Skip to content

Commit

Permalink
Fix user fixtures
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsp45 committed Jul 10, 2023
1 parent 2798b1f commit b15ee6c
Show file tree
Hide file tree
Showing 28 changed files with 327 additions and 491 deletions.
4 changes: 2 additions & 2 deletions lib/atomic/activities.ex
Original file line number Diff line number Diff line change
Expand Up @@ -268,10 +268,10 @@ defmodule Atomic.Activities do
## Examples
iex> create_enrollment(%{field: value})
iex> create_enrollment(%Activity{} = activity, %User{} = user)
{:ok, %Enrollment{}}
iex> create_enrollment(%{field: bad_value})
iex> create_enrollment(%Activity{} = activity, %User{} = user)
{:error, %Ecto.Changeset{}}
"""
Expand Down
49 changes: 36 additions & 13 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -33,33 +33,56 @@ defmodule Atomic.MixProject do
# Type `mix help deps` for examples and options.
defp deps do
[
{:bcrypt_elixir, "~> 3.0"},
{:phoenix, "~> 1.6.14"},
{:phoenix_ecto, "~> 4.4"},

# core
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.17.5"},

# database
{:ecto_sql, "~> 3.6"},
{:phoenix_ecto, "~> 4.4"},
{:postgrex, ">= 0.0.0"},

# security
{:bcrypt_elixir, "~> 3.0"},

# uploads
{:waffle_ecto, "~> 0.0"},
{:waffle, "~> 1.1"},

# mailer
{:phoenix_html, "~> 3.0"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.17.5"},
{:floki, ">= 0.30.0", only: :test},
{:swoosh, "~> 1.5"},
{:phoenix_swoosh, "~> 1.0"},

# frontend
{:tailwind, "~> 0.1", runtime: Mix.env() == :dev},
{:flop, "~> 0.17.0"},
{:phoenix_live_dashboard, "~> 0.6"},
{:esbuild, "~> 0.4", runtime: Mix.env() == :dev},
{:tailwind, "~> 0.1", runtime: Mix.env() == :dev},

# monitoring
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"},
{:phoenix_live_dashboard, "~> 0.6"},

# utilities
{:gettext, "~> 0.18"},
{:jason, "~> 1.2"},

# plugs
{:plug_cowboy, "~> 2.5"},
{:waffle, "~> 1.1"},

# testing
{:faker, "~> 0.17", only: [:dev, :test]},
{:ex_machina, "~> 2.7.0"},
{:floki, ">= 0.30.0", only: :test},

# tools
{:timex, "~> 3.0"},
{:swoosh, "~> 1.5"},
{:phoenix_swoosh, "~> 1.0"},
{:hackney, "~> 1.8"},
{:waffle_ecto, "~> 0.0"},
{:quantum, "~> 3.0"},
{:qrcode_ex, "~> 0.1.1"},
{:pdf_generator, "~>0.6.2"},
{:quantum, "~> 3.0"},
{:credo, "~> 1.6", only: [:dev, :test], runtime: false}
]
end
Expand Down
3 changes: 3 additions & 0 deletions mix.lock
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
%{
"argon2_elixir": {:hex, :argon2_elixir, "3.1.0", "4135e0a1b4ff800d42c85aa663e068efa3cb356297189b5b65caa992db8ec8cf", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "c08feae0ee0292165d1b945003363c7cd8523d002e0483c627dfca930291dd73"},
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.1", "9be815469e6bfefec40fa74658ecbbe6897acfb57614df1416eeccd4903f602c", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "486bb95efb645d1efc6794c1ddd776a186a9a713abf06f45708a6ce324fb96cf"},
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
"castore": {:hex, :castore, "1.0.1", "240b9edb4e9e94f8f56ab39d8d2d0a57f49e46c56aced8f873892df8ff64ff5a", [:mix], [], "hexpm", "b4951de93c224d44fac71614beabd88b71932d0b1dea80d2f80fb9044e01bbb3"},
Expand All @@ -16,7 +17,9 @@
"ecto_sql": {:hex, :ecto_sql, "3.10.1", "6ea6b3036a0b0ca94c2a02613fd9f742614b5cfe494c41af2e6571bb034dd94c", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f6a25bdbbd695f12c8171eaff0851fa4c8e72eec1e98c7364402dda9ce11c56b"},
"elixir_make": {:hex, :elixir_make, "0.7.6", "67716309dc5d43e16b5abbd00c01b8df6a0c2ab54a8f595468035a50189f9169", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5a0569756b0f7873a77687800c164cca6dfc03a09418e6fcf853d78991f49940"},
"esbuild": {:hex, :esbuild, "0.7.0", "ce3afb13cd2c5fd63e13c0e2d0e0831487a97a7696cfa563707342bb825d122a", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "4ae9f4f237c5ebcb001390b8ada65a12fb2bb04f3fe3d1f1692b7a06fbfe8752"},
"ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"},
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"},
"faker": {:hex, :faker, "0.17.0", "671019d0652f63aefd8723b72167ecdb284baf7d47ad3a82a15e9b8a6df5d1fa", [:mix], [], "hexpm", "a7d4ad84a93fd25c5f5303510753789fc2433ff241bf3b4144d3f6f291658a6a"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"floki": {:hex, :floki, "0.34.2", "5fad07ef153b3b8ec110b6b155ec3780c4b2c4906297d0b4be1a7162d04a7e02", [:mix], [], "hexpm", "26b9d50f0f01796bc6be611ca815c5e0de034d2128e39cc9702eee6b66a4d1c8"},
"flop": {:hex, :flop, "0.17.2", "9408f71a91350f8904e221a6b82e4429acee5aba5c1abbfd7901d2465b7aa44c", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm", "8bd987e353bffff3687cc7203bfdeb83942d8de6172dc833d651438d477115fc"},
Expand Down
62 changes: 29 additions & 33 deletions test/atomic/accounts_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ defmodule Atomic.AccountsTest do

import Atomic.AccountsFixtures
alias Atomic.Accounts.{User, UserToken}
import Atomic.Factory

describe "get_user_by_email/1" do
test "does not return the user if the email does not exist" do
refute Accounts.get_user_by_email("unknown@example.com")
end

test "returns the user if the email exists" do
%{id: id} = user = user_fixture()
%{id: id} = user = insert(:user)
assert %User{id: ^id} = Accounts.get_user_by_email(user.email)
end
end
Expand All @@ -23,27 +24,21 @@ defmodule Atomic.AccountsTest do
end

test "does not return the user if the password is not valid" do
user = user_fixture()
user = insert(:user)
refute Accounts.get_user_by_email_and_password(user.email, "invalid")
end

test "returns the user if the email and password are valid" do
%{id: id} = user = user_fixture()
%{id: id} = user = insert(:user)

assert %User{id: ^id} =
Accounts.get_user_by_email_and_password(user.email, valid_user_password())
end
end

describe "get_user!/1" do
test "raises if id is invalid" do
assert_raise Ecto.NoResultsError, fn ->
Accounts.get_user!(-1)
end
end

test "returns the user with the given id" do
%{id: id} = user = user_fixture()
%{id: id} = user = insert(:user)
assert %User{id: ^id} = Accounts.get_user!(user.id)
end
end
Expand Down Expand Up @@ -75,7 +70,7 @@ defmodule Atomic.AccountsTest do
end

test "validates email uniqueness" do
%{email: email} = user_fixture()
%{email: email} = insert(:user)
{:error, changeset} = Accounts.register_user(%{email: email})
assert "has already been taken" in errors_on(changeset).email

Expand All @@ -85,9 +80,10 @@ defmodule Atomic.AccountsTest do
end

test "registers users with a hashed password" do
email = unique_user_email()
{:ok, user} = Accounts.register_user(valid_user_attributes(email: email))
assert user.email == email
user_attrs = params_for(:user) |> Map.put(:password, valid_user_password())
{:ok, user} = Accounts.register_user(user_attrs)

assert user.email == user_attrs.email
assert is_binary(user.hashed_password)
assert is_nil(user.confirmed_at)
assert is_nil(user.password)
Expand All @@ -101,13 +97,13 @@ defmodule Atomic.AccountsTest do
end

test "allows fields to be set" do
email = unique_user_email()
email = Faker.Internet.email()
password = valid_user_password()

changeset =
Accounts.change_user_registration(
%User{},
valid_user_attributes(email: email, password: password)
params_for(:user, %{email: email, password: password})
)

assert changeset.valid?
Expand All @@ -126,7 +122,7 @@ defmodule Atomic.AccountsTest do

describe "apply_user_email/3" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "requires email to change", %{user: user} do
Expand All @@ -151,7 +147,7 @@ defmodule Atomic.AccountsTest do
end

test "validates email uniqueness", %{user: user} do
%{email: email} = user_fixture()
%{email: email} = insert(:user)

{:error, changeset} =
Accounts.apply_user_email(user, valid_user_password(), %{email: email})
Expand All @@ -161,13 +157,13 @@ defmodule Atomic.AccountsTest do

test "validates current password", %{user: user} do
{:error, changeset} =
Accounts.apply_user_email(user, "invalid", %{email: unique_user_email()})
Accounts.apply_user_email(user, "invalid", %{email: Faker.Internet.email()})

assert %{current_password: ["is not valid"]} = errors_on(changeset)
end

test "applies the email without persisting it", %{user: user} do
email = unique_user_email()
email = Faker.Internet.email()
{:ok, user} = Accounts.apply_user_email(user, valid_user_password(), %{email: email})
assert user.email == email
assert Accounts.get_user!(user.id).email != email
Expand All @@ -176,7 +172,7 @@ defmodule Atomic.AccountsTest do

describe "deliver_update_email_instructions/3" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "sends token through notification", %{user: user} do
Expand All @@ -195,8 +191,8 @@ defmodule Atomic.AccountsTest do

describe "update_user_email/2" do
setup do
user = user_fixture()
email = unique_user_email()
user = insert(:user)
email = Faker.Internet.email()

token =
extract_user_token(fn url ->
Expand Down Expand Up @@ -256,7 +252,7 @@ defmodule Atomic.AccountsTest do

describe "update_user_password/3" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "validates password", %{user: user} do
Expand Down Expand Up @@ -312,7 +308,7 @@ defmodule Atomic.AccountsTest do

describe "generate_user_session_token/1" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "generates a token", %{user: user} do
Expand All @@ -324,7 +320,7 @@ defmodule Atomic.AccountsTest do
assert_raise Ecto.ConstraintError, fn ->
Repo.insert!(%UserToken{
token: user_token.token,
user_id: user_fixture().id,
user_id: insert(:user).id,
context: "session"
})
end
Expand All @@ -333,7 +329,7 @@ defmodule Atomic.AccountsTest do

describe "get_user_by_session_token/1" do
setup do
user = user_fixture()
user = insert(:user)
token = Accounts.generate_user_session_token(user)
%{user: user, token: token}
end
Expand All @@ -355,7 +351,7 @@ defmodule Atomic.AccountsTest do

describe "delete_session_token/1" do
test "deletes the token" do
user = user_fixture()
user = insert(:user)
token = Accounts.generate_user_session_token(user)
assert Accounts.delete_session_token(token) == :ok
refute Accounts.get_user_by_session_token(token)
Expand All @@ -364,7 +360,7 @@ defmodule Atomic.AccountsTest do

describe "deliver_user_confirmation_instructions/2" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "sends token through notification", %{user: user} do
Expand All @@ -383,7 +379,7 @@ defmodule Atomic.AccountsTest do

describe "confirm_user/1" do
setup do
user = user_fixture()
user = insert(:user)

token =
extract_user_token(fn url ->
Expand Down Expand Up @@ -417,7 +413,7 @@ defmodule Atomic.AccountsTest do

describe "deliver_user_reset_password_instructions/2" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "sends token through notification", %{user: user} do
Expand All @@ -436,7 +432,7 @@ defmodule Atomic.AccountsTest do

describe "get_user_by_reset_password_token/1" do
setup do
user = user_fixture()
user = insert(:user)

token =
extract_user_token(fn url ->
Expand Down Expand Up @@ -465,7 +461,7 @@ defmodule Atomic.AccountsTest do

describe "reset_user_password/2" do
setup do
%{user: user_fixture()}
%{user: insert(:user)}
end

test "validates password", %{user: user} do
Expand Down
Loading

0 comments on commit b15ee6c

Please sign in to comment.