update tests
This commit is contained in:
@ -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 """
|
||||
|
@ -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
60
test/support/fixtures.ex
Normal 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
|
@ -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
|
Reference in New Issue
Block a user