|
defmodule MedicodeWeb.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 MedicodeWeb.ConnCase, async: true`, although |
|
this option is not recommended for other databases. |
|
""" |
|
|
|
use ExUnit.CaseTemplate |
|
|
|
using do |
|
quote do |
|
|
|
@endpoint MedicodeWeb.Endpoint |
|
|
|
use MedicodeWeb, :verified_routes |
|
|
|
|
|
import Plug.Conn |
|
import Phoenix.ConnTest |
|
import MedicodeWeb.ConnCase |
|
end |
|
end |
|
|
|
setup tags do |
|
Medicode.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}) do |
|
user = Medicode.AccountsFixtures.user_fixture() |
|
%{conn: log_in_user(conn, user), user: user} |
|
end |
|
|
|
@doc """ |
|
Logs the given `user` into the `conn`. |
|
|
|
It returns an updated `conn`. |
|
""" |
|
def log_in_user(conn, user) do |
|
token = Medicode.Accounts.generate_user_session_token(user) |
|
|
|
conn |
|
|> Phoenix.ConnTest.init_test_session(%{}) |
|
|> Plug.Conn.put_session(:user_token, token) |
|
|> Plug.Conn.put_session(:current_user, user) |
|
end |
|
end |
|
|