update tests

This commit is contained in:
2022-02-25 21:53:15 -05:00
committed by oliviasculley
parent 74bcec6cfe
commit 616de3c117
15 changed files with 506 additions and 172 deletions

View File

@ -16,14 +16,16 @@ defmodule LokalWeb.ConnCase do
"""
use ExUnit.CaseTemplate
import Lokal.Fixtures
alias Lokal.{Accounts, Accounts.User, Repo}
alias Ecto.Adapters.SQL.Sandbox
alias Lokal.{Accounts, Repo}
using do
quote do
# Import conveniences for testing with connections
import Plug.Conn
import Phoenix.ConnTest
import Lokal.Fixtures
import LokalWeb.ConnCase
alias LokalWeb.Router.Helpers, as: Routes
@ -47,12 +49,17 @@ defmodule LokalWeb.ConnCase do
It stores an updated connection and a registered user in the
test context.
"""
@spec register_and_log_in_user(%{conn: Plug.Conn.t()}) ::
%{conn: Plug.Conn.t(), current_user: User.t()}
def register_and_log_in_user(%{conn: conn}) do
user = Lokal.AccountsFixtures.user_fixture()
current_user = user_fixture() |> confirm_user()
%{conn: log_in_user(conn, current_user), current_user: current_user}
end
@spec confirm_user(User.t()) :: User.t()
def confirm_user(user) do
{:ok, %{user: user}} = user |> Accounts.confirm_user_multi() |> Repo.transaction()
%{conn: log_in_user(conn, user), user: user}
user
end
@doc """

View File

@ -25,6 +25,7 @@ defmodule Lokal.DataCase do
import Ecto.Changeset
import Ecto.Query
import Lokal.DataCase
import Lokal.Fixtures
end
end

60
test/support/fixtures.ex Normal file
View File

@ -0,0 +1,60 @@
defmodule Lokal.Fixtures do
@moduledoc """
This module defines test helpers for creating entities
"""
alias Lokal.{Accounts, Accounts.User, Email}
def unique_user_email, do: "user#{System.unique_integer()}@example.com"
def valid_user_password, do: "hello world!"
@spec user_fixture() :: Accounts.User.t()
@spec user_fixture(attrs :: map()) :: Accounts.User.t()
def user_fixture(attrs \\ %{}) do
attrs
|> Enum.into(%{
"email" => unique_user_email(),
"password" => valid_user_password()
})
|> Accounts.register_user()
|> unwrap_ok_tuple()
end
@spec admin_fixture() :: Accounts.User.t()
@spec admin_fixture(attrs :: map()) :: Accounts.User.t()
def admin_fixture(attrs \\ %{}) do
attrs
|> Enum.into(%{
"email" => unique_user_email(),
"password" => valid_user_password(),
"role" => "admin"
})
|> Accounts.register_user()
|> unwrap_ok_tuple()
end
def extract_user_token(fun) do
%{args: %{attrs: attrs, email: email_key, user_id: user_id}} = fun.(&"[TOKEN]#{&1}[TOKEN]")
# convert atoms to string keys
attrs = attrs |> Map.new(fn {atom_key, value} -> {atom_key |> Atom.to_string(), value} end)
email =
email_key
|> Atom.to_string()
|> Email.generate_email(Accounts.get_user!(user_id), attrs)
[_, html_token | _] = email.html_body |> String.split("[TOKEN]")
[_, text_token | _] = email.text_body |> String.split("[TOKEN]")
^text_token = html_token
end
def valid_user_attributes(attrs \\ %{}) do
Enum.into(attrs, %{
email: unique_user_email(),
password: valid_user_password()
})
end
defp unwrap_ok_tuple({:ok, value}), do: value
end

View File

@ -1,31 +0,0 @@
defmodule Lokal.AccountsFixtures do
@moduledoc """
This module defines test helpers for creating
entities via the `Lokal.Accounts` context.
"""
def unique_user_email, do: "user#{System.unique_integer()}@example.com"
def valid_user_password, do: "hello world!"
def valid_user_attributes(attrs \\ %{}) do
Enum.into(attrs, %{
email: unique_user_email(),
password: valid_user_password()
})
end
def user_fixture(attrs \\ %{}) do
{:ok, user} =
attrs
|> valid_user_attributes()
|> Lokal.Accounts.register_user()
user
end
def extract_user_token(fun) do
{:ok, captured} = fun.(&"[TOKEN]#{&1}[TOKEN]")
[_, token, _] = String.split(captured.body, "[TOKEN]")
token
end
end