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