Aliases: add module aliases for 9 nested module references Apply: replace apply/3 with direct module attribute calls Line length: break 1 long spec line Refactoring: extract helpers to reduce complexity and nesting in show.ex, radio.ex, weather workers, terrain, duct detection, backfill dashboard, contact map, and mix tasks
83 lines
2.3 KiB
Elixir
83 lines
2.3 KiB
Elixir
defmodule MicrowavepropWeb.ConnCase do
|
|
@moduledoc """
|
|
This module defines the test case to be used by
|
|
tests that require setting up a connection.
|
|
|
|
Such tests rely on `Phoenix.ConnTest` and also
|
|
import other functionality to make it easier
|
|
to build common data structures and query the data layer.
|
|
|
|
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 MicrowavepropWeb.ConnCase, async: true`, although
|
|
this option is not recommended for other databases.
|
|
"""
|
|
|
|
use ExUnit.CaseTemplate
|
|
|
|
alias Microwaveprop.Accounts
|
|
alias Microwaveprop.Accounts.Scope
|
|
alias Microwaveprop.AccountsFixtures
|
|
|
|
using do
|
|
quote do
|
|
use MicrowavepropWeb, :verified_routes
|
|
|
|
import MicrowavepropWeb.ConnCase
|
|
import Phoenix.ConnTest
|
|
import Plug.Conn
|
|
# The default endpoint for testing
|
|
@endpoint MicrowavepropWeb.Endpoint
|
|
|
|
# Import conveniences for testing with connections
|
|
end
|
|
end
|
|
|
|
setup tags do
|
|
Microwaveprop.DataCase.setup_sandbox(tags)
|
|
{:ok, conn: Phoenix.ConnTest.build_conn()}
|
|
end
|
|
|
|
@doc """
|
|
Setup helper that registers and logs in users.
|
|
|
|
setup :register_and_log_in_user
|
|
|
|
It stores an updated connection and a registered user in the
|
|
test context.
|
|
"""
|
|
def register_and_log_in_user(%{conn: conn} = context) do
|
|
user = AccountsFixtures.user_fixture()
|
|
scope = Scope.for_user(user)
|
|
|
|
opts =
|
|
context
|
|
|> Map.take([:token_authenticated_at])
|
|
|> Enum.to_list()
|
|
|
|
%{conn: log_in_user(conn, user, opts), user: user, scope: scope}
|
|
end
|
|
|
|
@doc """
|
|
Logs the given `user` into the `conn`.
|
|
|
|
It returns an updated `conn`.
|
|
"""
|
|
def log_in_user(conn, user, opts \\ []) do
|
|
token = Accounts.generate_user_session_token(user)
|
|
|
|
maybe_set_token_authenticated_at(token, opts[:token_authenticated_at])
|
|
|
|
conn
|
|
|> Phoenix.ConnTest.init_test_session(%{})
|
|
|> Plug.Conn.put_session(:user_token, token)
|
|
end
|
|
|
|
defp maybe_set_token_authenticated_at(_token, nil), do: nil
|
|
|
|
defp maybe_set_token_authenticated_at(token, authenticated_at) do
|
|
AccountsFixtures.override_token_authenticated_at(token, authenticated_at)
|
|
end
|
|
end
|