From 5ff02b80c3ed81a2499518ef433660c707a43d72 Mon Sep 17 00:00:00 2001 From: Robert Prehn <3952444+prehnRA@users.noreply.github.com> Date: Fri, 23 Apr 2021 16:52:57 -0500 Subject: [PATCH] fix: Fix generated tests --- apps/admin/mix.exs | 2 +- apps/app/mix.exs | 2 +- .../templates/phx.gen.context/test_cases.exs | 21 ++++--- .../phx.gen.html/controller_test.exs | 39 +++++++------ .../phx.gen.json/controller_test.exs | 2 - .../priv/templates/phx.gen.live/live_test.exs | 1 - apps/app/test/app/{controllers => }/.keep | 0 apps/app/test/app/views/page_view_test.exs | 3 - apps/app/test/app_web/controllers/.keep | 0 .../views/error_view_test.exs | 2 +- .../views/layout_view_test.exs | 2 +- .../app/test/app_web/views/page_view_test.exs | 3 + apps/app/test/support/conn_case.ex | 8 +-- apps/app/test/support/data_case.ex | 55 +++++++++++++++++++ apps/content/mix.exs | 2 +- apps/core/mix.exs | 2 +- mix.lock | 6 +- 17 files changed, 106 insertions(+), 44 deletions(-) rename apps/app/test/app/{controllers => }/.keep (100%) delete mode 100644 apps/app/test/app/views/page_view_test.exs create mode 100644 apps/app/test/app_web/controllers/.keep rename apps/app/test/{app => app_web}/views/error_view_test.exs (91%) rename apps/app/test/{app => app_web}/views/layout_view_test.exs (94%) create mode 100644 apps/app/test/app_web/views/page_view_test.exs create mode 100644 apps/app/test/support/data_case.ex diff --git a/apps/admin/mix.exs b/apps/admin/mix.exs index 2b1d8a07..a02698fe 100644 --- a/apps/admin/mix.exs +++ b/apps/admin/mix.exs @@ -46,7 +46,7 @@ defmodule Legendary.Admin.MixProject do {:ecto_sql, "~> 3.4"}, {:excoveralls, "~> 0.10", only: [:dev, :test]}, {:kaffy, path: "kaffy"}, - {:phoenix, "~> 1.5.3"}, + {:phoenix, "~> 1.5.8"}, {:phoenix_ecto, "~> 4.0"}, {:phoenix_html, "~> 2.11"}, {:phoenix_live_reload, "~> 1.2", only: :dev}, diff --git a/apps/app/mix.exs b/apps/app/mix.exs index 5ca89575..6ce144b5 100644 --- a/apps/app/mix.exs +++ b/apps/app/mix.exs @@ -44,7 +44,7 @@ defmodule App.MixProject do {:core, in_umbrella: true}, {:ecto_sql, "~> 3.4"}, {:excoveralls, "~> 0.10", only: [:dev, :test]}, - {:phoenix, "~> 1.5.3"}, + {:phoenix, "~> 1.5.8"}, {:phoenix_ecto, "~> 4.0"}, {:phoenix_html, "~> 2.11"}, {:phoenix_live_reload, "~> 1.2", only: :dev}, diff --git a/apps/app/priv/templates/phx.gen.context/test_cases.exs b/apps/app/priv/templates/phx.gen.context/test_cases.exs index cab31692..92f73323 100644 --- a/apps/app/priv/templates/phx.gen.context/test_cases.exs +++ b/apps/app/priv/templates/phx.gen.context/test_cases.exs @@ -2,10 +2,19 @@ describe "<%= schema.plural %>" do alias <%= inspect schema.module %> - import <%= inspect context.module %>Fixtures - + @valid_attrs <%= inspect schema.params.create %> + @update_attrs <%= inspect schema.params.update %> @invalid_attrs <%= inspect for {key, _} <- schema.params.create, into: %{}, do: {key, nil} %> + def <%= schema.singular %>_fixture(attrs \\ %{}) do + {:ok, <%= schema.singular %>} = + attrs + |> Enum.into(@valid_attrs) + |> <%= inspect context.alias %>.create_<%= schema.singular %>() + + <%= schema.singular %> + end + test "list_<%= schema.plural %>/0 returns all <%= schema.plural %>" do <%= schema.singular %> = <%= schema.singular %>_fixture() assert <%= inspect context.alias %>.list_<%= schema.plural %>() == [<%= schema.singular %>] @@ -17,9 +26,7 @@ end test "create_<%= schema.singular %>/1 with valid data creates a <%= schema.singular %>" do - valid_attrs = <%= inspect schema.params.create %> - - assert {:ok, %<%= inspect schema.alias %>{} = <%= schema.singular %>} = <%= inspect context.alias %>.create_<%= schema.singular %>(valid_attrs)<%= for {field, value} <- schema.params.create do %> + assert {:ok, %<%= inspect schema.alias %>{} = <%= schema.singular %>} = <%= inspect context.alias %>.create_<%= schema.singular %>(@valid_attrs)<%= for {field, value} <- schema.params.create do %> assert <%= schema.singular %>.<%= field %> == <%= Mix.Phoenix.Schema.value(schema, field, value) %><% end %> end @@ -29,9 +36,7 @@ test "update_<%= schema.singular %>/2 with valid data updates the <%= schema.singular %>" do <%= schema.singular %> = <%= schema.singular %>_fixture() - update_attrs = <%= inspect schema.params.update %> - - assert {:ok, %<%= inspect schema.alias %>{} = <%= schema.singular %>} = <%= inspect context.alias %>.update_<%= schema.singular %>(<%= schema.singular %>, update_attrs)<%= for {field, value} <- schema.params.update do %> + assert {:ok, %<%= inspect schema.alias %>{} = <%= schema.singular %>} = <%= inspect context.alias %>.update_<%= schema.singular %>(<%= schema.singular %>, @update_attrs)<%= for {field, value} <- schema.params.update do %> assert <%= schema.singular %>.<%= field %> == <%= Mix.Phoenix.Schema.value(schema, field, value) %><% end %> end diff --git a/apps/app/priv/templates/phx.gen.html/controller_test.exs b/apps/app/priv/templates/phx.gen.html/controller_test.exs index 35c76c0f..4441388f 100644 --- a/apps/app/priv/templates/phx.gen.html/controller_test.exs +++ b/apps/app/priv/templates/phx.gen.html/controller_test.exs @@ -1,40 +1,45 @@ defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web_namespace, schema.alias) %>ControllerTest do use <%= inspect context.web_module %>.ConnCase - import <%= inspect context.module %>Fixtures + alias <%= inspect context.module %> @create_attrs <%= inspect schema.params.create %> @update_attrs <%= inspect schema.params.update %> @invalid_attrs <%= inspect for {key, _} <- schema.params.create, into: %{}, do: {key, nil} %> + def fixture(:<%= schema.singular %>) do + {:ok, <%= schema.singular %>} = <%= inspect context.alias %>.create_<%= schema.singular %>(@create_attrs) + <%= schema.singular %> + end + describe "index" do test "lists all <%= schema.plural %>", %{conn: conn} do conn = get(conn, Routes.<%= schema.route_helper %>_path(conn, :index)) - assert html_response(conn, 200) =~ "Listing <%= schema.human_plural %>" + assert html_response(conn, 200) =~ "<%= schema.human_plural %>" end end describe "new <%= schema.singular %>" do test "renders form", %{conn: conn} do conn = get(conn, Routes.<%= schema.route_helper %>_path(conn, :new)) - assert html_response(conn, 200) =~ "New <%= schema.human_singular %>" + assert html_response(conn, 200) =~ "Save" end end describe "create <%= schema.singular %>" do test "redirects to show when data is valid", %{conn: conn} do - conn = post(conn, Routes.<%= schema.route_helper %>_path(conn, :create), <%= schema.singular %>: @create_attrs) + post_conn = post(conn, Routes.<%= schema.route_helper %>_path(conn, :create), <%= schema.singular %>: @create_attrs) - assert %{id: id} = redirected_params(conn) - assert redirected_to(conn) == Routes.<%= schema.route_helper %>_path(conn, :show, id) + assert %{id: id} = redirected_params(post_conn) + assert redirected_to(post_conn) == Routes.<%= schema.route_helper %>_path(post_conn, :show, id) - conn = get(conn, Routes.<%= schema.route_helper %>_path(conn, :show, id)) - assert html_response(conn, 200) =~ "Show <%= schema.human_singular %>" + get_conn = get(conn, Routes.<%= schema.route_helper %>_path(conn, :show, id)) + assert html_response(get_conn, 200) =~ "Edit" end test "renders errors when data is invalid", %{conn: conn} do conn = post(conn, Routes.<%= schema.route_helper %>_path(conn, :create), <%= schema.singular %>: @invalid_attrs) - assert html_response(conn, 200) =~ "New <%= schema.human_singular %>" + assert html_response(conn, 200) =~ "Save" end end @@ -51,12 +56,12 @@ defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web setup [:create_<%= schema.singular %>] test "redirects when data is valid", %{conn: conn, <%= schema.singular %>: <%= schema.singular %>} do - conn = put(conn, Routes.<%= schema.route_helper %>_path(conn, :update, <%= schema.singular %>), <%= schema.singular %>: @update_attrs) - assert redirected_to(conn) == Routes.<%= schema.route_helper %>_path(conn, :show, <%= schema.singular %>) + put_conn = put(conn, Routes.<%= schema.route_helper %>_path(conn, :update, <%= schema.singular %>), <%= schema.singular %>: @update_attrs) + assert redirected_to(put_conn) == Routes.<%= schema.route_helper %>_path(put_conn, :show, <%= schema.singular %>) - conn = get(conn, Routes.<%= schema.route_helper %>_path(conn, :show, <%= schema.singular %>))<%= if schema.string_attr do %> - assert html_response(conn, 200) =~ <%= inspect Mix.Phoenix.Schema.default_param(schema, :update) %><% else %> - assert html_response(conn, 200)<% end %> + get_conn = get(conn, Routes.<%= schema.route_helper %>_path(conn, :show, <%= schema.singular %>))<%= if schema.string_attr do %> + assert html_response(get_conn, 200) =~ <%= inspect Mix.Phoenix.Schema.default_param(schema, :update) %><% else %> + assert html_response(get_conn, 200)<% end %> end test "renders errors when data is invalid", %{conn: conn, <%= schema.singular %>: <%= schema.singular %>} do @@ -69,8 +74,8 @@ defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web setup [:create_<%= schema.singular %>] test "deletes chosen <%= schema.singular %>", %{conn: conn, <%= schema.singular %>: <%= schema.singular %>} do - conn = delete(conn, Routes.<%= schema.route_helper %>_path(conn, :delete, <%= schema.singular %>)) - assert redirected_to(conn) == Routes.<%= schema.route_helper %>_path(conn, :index) + delete_conn = delete(conn, Routes.<%= schema.route_helper %>_path(conn, :delete, <%= schema.singular %>)) + assert redirected_to(delete_conn) == Routes.<%= schema.route_helper %>_path(delete_conn, :index) assert_error_sent 404, fn -> get(conn, Routes.<%= schema.route_helper %>_path(conn, :show, <%= schema.singular %>)) end @@ -78,7 +83,7 @@ defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web end defp create_<%= schema.singular %>(_) do - <%= schema.singular %> = <%= schema.singular %>_fixture() + <%= schema.singular %> = fixture(:<%= schema.singular %>) %{<%= schema.singular %>: <%= schema.singular %>} end end diff --git a/apps/app/priv/templates/phx.gen.json/controller_test.exs b/apps/app/priv/templates/phx.gen.json/controller_test.exs index 9f99e08e..8ff126f6 100644 --- a/apps/app/priv/templates/phx.gen.json/controller_test.exs +++ b/apps/app/priv/templates/phx.gen.json/controller_test.exs @@ -1,8 +1,6 @@ defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web_namespace, schema.alias) %>ControllerTest do use <%= inspect context.web_module %>.ConnCase - import <%= inspect context.module %>Fixtures - alias <%= inspect schema.module %> @create_attrs %{ diff --git a/apps/app/priv/templates/phx.gen.live/live_test.exs b/apps/app/priv/templates/phx.gen.live/live_test.exs index 2c5609e0..2817a6d9 100644 --- a/apps/app/priv/templates/phx.gen.live/live_test.exs +++ b/apps/app/priv/templates/phx.gen.live/live_test.exs @@ -2,7 +2,6 @@ defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web use <%= inspect context.web_module %>.ConnCase import Phoenix.LiveViewTest - import <%= inspect context.module %>Fixtures @create_attrs <%= inspect schema.params.create %> @update_attrs <%= inspect schema.params.update %> diff --git a/apps/app/test/app/controllers/.keep b/apps/app/test/app/.keep similarity index 100% rename from apps/app/test/app/controllers/.keep rename to apps/app/test/app/.keep diff --git a/apps/app/test/app/views/page_view_test.exs b/apps/app/test/app/views/page_view_test.exs deleted file mode 100644 index d8019a7d..00000000 --- a/apps/app/test/app/views/page_view_test.exs +++ /dev/null @@ -1,3 +0,0 @@ -defmodule App.PageViewTest do - use App.ConnCase, async: true -end diff --git a/apps/app/test/app_web/controllers/.keep b/apps/app/test/app_web/controllers/.keep new file mode 100644 index 00000000..e69de29b diff --git a/apps/app/test/app/views/error_view_test.exs b/apps/app/test/app_web/views/error_view_test.exs similarity index 91% rename from apps/app/test/app/views/error_view_test.exs rename to apps/app/test/app_web/views/error_view_test.exs index 75c5b503..85a326cd 100644 --- a/apps/app/test/app/views/error_view_test.exs +++ b/apps/app/test/app_web/views/error_view_test.exs @@ -1,5 +1,5 @@ defmodule AppWeb.ErrorViewTest do - use App.ConnCase, async: true + use AppWeb.ConnCase, async: true # Bring render/3 and render_to_string/3 for testing custom views import Phoenix.View diff --git a/apps/app/test/app/views/layout_view_test.exs b/apps/app/test/app_web/views/layout_view_test.exs similarity index 94% rename from apps/app/test/app/views/layout_view_test.exs rename to apps/app/test/app_web/views/layout_view_test.exs index a5e9b736..65687848 100644 --- a/apps/app/test/app/views/layout_view_test.exs +++ b/apps/app/test/app_web/views/layout_view_test.exs @@ -1,5 +1,5 @@ defmodule App.LayoutViewTest do - use App.ConnCase, async: true + use AppWeb.ConnCase, async: true import AppWeb.LayoutView diff --git a/apps/app/test/app_web/views/page_view_test.exs b/apps/app/test/app_web/views/page_view_test.exs new file mode 100644 index 00000000..9c4378bb --- /dev/null +++ b/apps/app/test/app_web/views/page_view_test.exs @@ -0,0 +1,3 @@ +defmodule App.PageViewTest do + use AppWeb.ConnCase, async: true +end diff --git a/apps/app/test/support/conn_case.ex b/apps/app/test/support/conn_case.ex index 88cb2e36..05be8b3f 100644 --- a/apps/app/test/support/conn_case.ex +++ b/apps/app/test/support/conn_case.ex @@ -1,4 +1,4 @@ -defmodule App.ConnCase do +defmodule AppWeb.ConnCase do @moduledoc """ This module defines the test case to be used by tests that require setting up a connection. @@ -11,7 +11,7 @@ defmodule App.ConnCase do we enable the SQL sandbox, so changes done to the database are reverted at the end of every test. If you are using PostgreSQL, you can even run database tests asynchronously - by setting `use App.ConnCase, async: true`, although + by setting `use AppWeb.ConnCase, async: true`, although this option is not recommended for other databases. """ @@ -22,9 +22,9 @@ defmodule App.ConnCase do # Import conveniences for testing with connections import Plug.Conn import Phoenix.ConnTest - import App.ConnCase + import AppWeb.ConnCase - alias App.Router.Helpers, as: Routes + alias AppWeb.Router.Helpers, as: Routes # The default endpoint for testing @endpoint AppWeb.Endpoint diff --git a/apps/app/test/support/data_case.ex b/apps/app/test/support/data_case.ex new file mode 100644 index 00000000..eb71dd1d --- /dev/null +++ b/apps/app/test/support/data_case.ex @@ -0,0 +1,55 @@ +defmodule App.DataCase do + @moduledoc """ + This module defines the setup for tests requiring + access to the application's data layer. + + You may define functions here to be used as helpers in + your tests. + + Finally, if the test case interacts with the database, + we enable the SQL sandbox, so changes done to the database + are reverted at the end of every test. If you are using + PostgreSQL, you can even run database tests asynchronously + by setting `use App.DataCase, async: true`, although + this option is not recommended for other databases. + """ + + use ExUnit.CaseTemplate + + using do + quote do + alias App.Repo + + import Ecto + import Ecto.Changeset + import Ecto.Query + import App.DataCase + end + end + + setup tags do + :ok = Ecto.Adapters.SQL.Sandbox.checkout(App.Repo) + + unless tags[:async] do + Ecto.Adapters.SQL.Sandbox.mode(App.Repo, {:shared, self()}) + end + + :ok + end + + @doc """ + A helper that transforms changeset errors into a map of messages. + + assert {:error, changeset} = Accounts.create_user(%{password: "short"}) + assert "password is too short" in errors_on(changeset).password + assert %{password: ["password is too short"]} = errors_on(changeset) + + """ + def errors_on(changeset) do + Ecto.Changeset.traverse_errors(changeset, fn {message, opts} -> + Regex.replace(~r"%{(\w+)}", message, fn _, key -> + opts |> Keyword.get(String.to_existing_atom(key), key) |> to_string() + end) + end) + end +end diff --git a/apps/content/mix.exs b/apps/content/mix.exs index 1a9b092c..fa22d9e1 100644 --- a/apps/content/mix.exs +++ b/apps/content/mix.exs @@ -51,7 +51,7 @@ defmodule Legendary.Content.MixProject do {:meck, "~> 0.8.13", only: :test}, {:neotomex, "~> 0.1.7"}, {:oban, "~> 2.1"}, - {:phoenix, "~> 1.5.3"}, + {:phoenix, "~> 1.5.8"}, {:phoenix_ecto, "~> 4.0"}, {:phoenix_html, "~> 2.11"}, {:phoenix_html_sanitizer, "~> 1.0.0"}, diff --git a/apps/core/mix.exs b/apps/core/mix.exs index b52b800e..fcd3c8b0 100644 --- a/apps/core/mix.exs +++ b/apps/core/mix.exs @@ -137,7 +137,7 @@ defmodule Legendary.Core.MixProject do {:ex_cldr, "~> 2.13.0"}, {:ex_doc, "~> 0.24", only: :dev, runtime: false}, {:excoveralls, "~> 0.10", only: [:dev, :test]}, - {:phoenix, "~> 1.5.3"}, + {:phoenix, "~> 1.5.8"}, {:phoenix_ecto, "~> 4.1"}, {:ecto_sql, "~> 3.4"}, {:ex_prompt, "~> 0.1.5"}, diff --git a/mix.lock b/mix.lock index e2b4f72c..d5101feb 100644 --- a/mix.lock +++ b/mix.lock @@ -43,7 +43,7 @@ "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "1.5.0", "203ef35ef3389aae6d361918bf3f952fa17a09e8e43b5aa592b93eba05d0fb8d", [:mix], [], "hexpm", "55a94c0f552249fc1a3dd9cd2d3ab9de9d3c89b559c2bd01121f824834f24746"}, + "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mochiweb": {:hex, :mochiweb, "2.12.2", "80804ad342afa3d7f3524040d4eed66ce74b17a555de454ac85b07c479928e46", [:make, :rebar], [], "hexpm", "d3e681d4054b74a96cf2efcd09e94157ab83a5f55ddc4ce69f90b8144673bd7a"}, "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"}, @@ -61,7 +61,7 @@ "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"}, "php_serializer": {:hex, :php_serializer, "0.9.2", "59c5fd6bd3096671fd89358fb8229341ac7423b50ad8d45a15213b02ea2edab2", [:mix], [], "hexpm", "34eb835a460944f7fc216773b363c02e7dcf8ac0390c9e9ccdbd92b31a7ca59a"}, "plug": {:hex, :plug, "1.11.1", "f2992bac66fdae679453c9e86134a4201f6f43a687d8ff1cd1b2862d53c80259", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "23524e4fefbb587c11f0833b3910bfb414bf2e2534d61928e920f54e3a1b881f"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.4.1", "779ba386c0915027f22e14a48919a9545714f849505fa15af2631a0d298abf0f", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d72113b6dff7b37a7d9b2a5b68892808e3a9a752f2bf7e503240945385b70507"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.5.0", "51c998f788c4e68fc9f947a5eba8c215fbb1d63a520f7604134cab0270ea6513", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5b2c8925a5e2587446f33810a58c01e66b3c345652eeec809b76ba007acde71a"}, "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"}, "postgrex": {:hex, :postgrex, "0.15.5", "aec40306a622d459b01bff890fa42f1430dac61593b122754144ad9033a2152f", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "ed90c81e1525f65a2ba2279dbcebf030d6d13328daa2f8088b9661eb9143af7f"}, "pow": {:hex, :pow, "1.0.20", "b99993811af5233681bfc521e81ca706d25a56f2be54bad6424db327ce840ab9", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.3.0 and < 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, ">= 2.0.0 and <= 3.0.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, ">= 1.5.0 and < 2.0.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "4b6bd271399ccb353abbdbdc316199fe7fd7ae36bbf47059d53e366831c34fc8"}, @@ -71,7 +71,7 @@ "slugger": {:hex, :slugger, "0.3.0", "efc667ab99eee19a48913ccf3d038b1fb9f165fa4fbf093be898b8099e61b6ed", [:mix], [], "hexpm", "20d0ded0e712605d1eae6c5b4889581c3460d92623a930ddda91e0e609b5afba"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "swarm": {:hex, :swarm, "3.4.0", "64f8b30055d74640d2186c66354b33b999438692a91be275bb89cdc7e401f448", [:mix], [{:gen_state_machine, "~> 2.0", [hex: :gen_state_machine, repo: "hexpm", optional: false]}, {:libring, "~> 1.0", [hex: :libring, repo: "hexpm", optional: false]}], "hexpm", "94884f84783fc1ba027aba8fe8a7dae4aad78c98e9f9c76667ec3471585c08c6"}, - "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, + "telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.5.0", "1b796e74add83abf844e808564275dfb342bcc930b04c7577ab780e262b0d998", [:mix], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "31225e6ce7a37a421a0a96ec55244386aec1c190b22578bd245188a4a33298fd"}, "telemetry_poller": {:hex, :telemetry_poller, "0.5.1", "21071cc2e536810bac5628b935521ff3e28f0303e770951158c73eaaa01e962a", [:rebar3], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4cab72069210bc6e7a080cec9afffad1b33370149ed5d379b81c7c5f0c663fd4"}, "timex": {:hex, :timex, "3.6.2", "845cdeb6119e2fef10751c0b247b6c59d86d78554c83f78db612e3290f819bc2", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5 or ~> 1.0.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "26030b46199d02a590be61c2394b37ea25a3664c02fafbeca0b24c972025d47a"},