From 500366bf195e8c3ddca56de840052ea92c7d57b2 Mon Sep 17 00:00:00 2001 From: Daniel Pereira <46000449+danielsp45@users.noreply.github.com> Date: Wed, 12 Jul 2023 22:27:47 +0100 Subject: [PATCH] Fix tests & Update to ex_machina (#285) --- lib/atomic/activities.ex | 4 +- mix.exs | 49 ++++++-- mix.lock | 3 + test/atomic/accounts_test.exs | 62 +++++----- test/atomic/activities_test.exs | 80 +++++------- test/atomic/departments_test.exs | 28 +++-- test/atomic/organizations_test.exs | 98 ++++++++------- .../controllers/page_controller_test.exs | 2 +- .../atomic_web/controllers/user_auth_test.exs | 3 +- .../user_confirmation_controller_test.exs | 2 +- .../user_registration_controller_test.exs | 27 ++--- .../user_reset_password_controller_test.exs | 2 +- .../user_session_controller_test.exs | 2 +- .../user_settings_controller_test.exs | 4 +- test/atomic_web/live/department_live_test.exs | 107 ---------------- test/atomic_web/live/enrollment_live_test.exs | 105 ---------------- .../live/organization_live_test.exs | 2 + test/atomic_web/live/partner_live_test.exs | 5 +- test/atomic_web/live/session_live_test.exs | 114 ------------------ test/atomic_web/live/speaker_live_test.exs | 2 + test/support/conn_case.ex | 4 +- test/support/factories/accounts_factory.ex | 22 ++++ test/support/factories/activities_factory.ex | 36 ++++++ test/support/factories/departments_factory.ex | 28 +++++ .../factories/organizations_factory.ex | 38 ++++++ test/support/factory.ex | 11 ++ test/support/fixtures/accounts_fixtures.ex | 2 +- test/support/fixtures/departments_fixtures.ex | 20 --- test/test_helper.exs | 1 + 29 files changed, 324 insertions(+), 539 deletions(-) delete mode 100644 test/atomic_web/live/enrollment_live_test.exs delete mode 100644 test/atomic_web/live/session_live_test.exs create mode 100644 test/support/factories/accounts_factory.ex create mode 100644 test/support/factories/activities_factory.ex create mode 100644 test/support/factories/departments_factory.ex create mode 100644 test/support/factories/organizations_factory.ex create mode 100644 test/support/factory.ex delete mode 100644 test/support/fixtures/departments_fixtures.ex diff --git a/lib/atomic/activities.ex b/lib/atomic/activities.ex index 8904bd78a..bc9dc1222 100644 --- a/lib/atomic/activities.ex +++ b/lib/atomic/activities.ex @@ -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{}} """ diff --git a/mix.exs b/mix.exs index fbbeb3013..90f1910b0 100644 --- a/mix.exs +++ b/mix.exs @@ -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 diff --git a/mix.lock b/mix.lock index 2ff554c83..96258159b 100644 --- a/mix.lock +++ b/mix.lock @@ -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"}, @@ -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"}, diff --git a/test/atomic/accounts_test.exs b/test/atomic/accounts_test.exs index 37fd45e56..5ea1c2fe9 100644 --- a/test/atomic/accounts_test.exs +++ b/test/atomic/accounts_test.exs @@ -5,6 +5,7 @@ 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 @@ -12,7 +13,7 @@ defmodule Atomic.AccountsTest do 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 @@ -23,12 +24,12 @@ 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()) @@ -36,14 +37,8 @@ defmodule Atomic.AccountsTest do 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 @@ -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 @@ -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) @@ -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? @@ -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 @@ -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}) @@ -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 @@ -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 @@ -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 -> @@ -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 @@ -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 @@ -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 @@ -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 @@ -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) @@ -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 @@ -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 -> @@ -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 @@ -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 -> @@ -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 diff --git a/test/atomic/activities_test.exs b/test/atomic/activities_test.exs index 1964ff165..dc3d22898 100644 --- a/test/atomic/activities_test.exs +++ b/test/atomic/activities_test.exs @@ -2,37 +2,29 @@ defmodule Atomic.ActivitiesTest do use Atomic.DataCase alias Atomic.Activities + import Atomic.Factory + import Atomic.ActivitiesFixtures describe "activities" do alias Atomic.Activities.Activity - import Atomic.ActivitiesFixtures - @invalid_attrs %{description: nil, maximum_entries: nil, minimum_entries: nil, title: nil} test "list_activities/0 returns all activities" do - activity = activity_fixture() - assert Activities.list_activities() == [activity] + activity = insert(:activity) + activities = Activities.list_activities([]) |> Enum.map(& &1.id) + assert activities == [activity.id] end test "get_activity!/1 returns the activity with given id" do - activity = activity_fixture() - assert Activities.get_activity!(activity.id) == activity + activity = insert(:activity) + assert Activities.get_activity!(activity.id).id == activity.id end test "create_activity/1 with valid data creates a activity" do - valid_attrs = %{ - description: "some description", - maximum_entries: 42, - minimum_entries: 42, - title: "some title" - } + valid_attrs = params_for(:activity) - assert {:ok, %Activity{} = activity} = Activities.create_activity(valid_attrs) - assert activity.description == "some description" - assert activity.maximum_entries == 42 - assert activity.minimum_entries == 42 - assert activity.title == "some title" + assert {:ok, %Activity{}} = Activities.create_activity(valid_attrs) end test "create_activity/1 with invalid data returns error changeset" do @@ -40,7 +32,7 @@ defmodule Atomic.ActivitiesTest do end test "update_activity/2 with valid data updates the activity" do - activity = activity_fixture() + activity = insert(:activity) update_attrs = %{ description: "some updated description", @@ -57,19 +49,19 @@ defmodule Atomic.ActivitiesTest do end test "update_activity/2 with invalid data returns error changeset" do - activity = activity_fixture() + activity = insert(:activity) assert {:error, %Ecto.Changeset{}} = Activities.update_activity(activity, @invalid_attrs) - assert activity == Activities.get_activity!(activity.id) + assert activity.id == Activities.get_activity!(activity.id).id end test "delete_activity/1 deletes the activity" do - activity = activity_fixture() + activity = insert(:activity) assert {:ok, %Activity{}} = Activities.delete_activity(activity) assert_raise Ecto.NoResultsError, fn -> Activities.get_activity!(activity.id) end end test "change_activity/1 returns a activity changeset" do - activity = activity_fixture() + activity = insert(:activity) assert %Ecto.Changeset{} = Activities.change_activity(activity) end end @@ -77,8 +69,6 @@ defmodule Atomic.ActivitiesTest do describe "sessions" do alias Atomic.Activities.Session - import Atomic.ActivitiesFixtures - @invalid_attrs %{finish: nil, start: nil} test "list_sessions/0 returns all sessions" do @@ -133,55 +123,41 @@ defmodule Atomic.ActivitiesTest do describe "enrollments" do alias Atomic.Activities.Enrollment - import Atomic.ActivitiesFixtures - @invalid_attrs %{} test "list_enrollments/0 returns all enrollments" do - enrollment = enrollment_fixture() - assert Activities.list_enrollments() == [enrollment] + enrollment = insert(:enrollment) + enrollments = Activities.list_enrollments() |> Enum.map(& &1.id) + assert enrollments == [enrollment.id] end test "get_enrollment!/1 returns the enrollment with given id" do - enrollment = enrollment_fixture() - assert Activities.get_enrollment!(enrollment.id) == enrollment + enrollment = insert(:enrollment) + assert Activities.get_enrollment!(enrollment.id).id == enrollment.id end test "create_enrollment/1 with valid data creates a enrollment" do - valid_attrs = %{} - - assert {:ok, %Enrollment{} = enrollment} = Activities.create_enrollment(valid_attrs) - end + user = insert(:user) + activity = insert(:activity) - test "create_enrollment/1 with invalid data returns error changeset" do - assert {:error, %Ecto.Changeset{}} = Activities.create_enrollment(@invalid_attrs) + assert {:ok, %Enrollment{}} = Activities.create_enrollment(activity, user) end test "update_enrollment/2 with valid data updates the enrollment" do - enrollment = enrollment_fixture() + enrollment = insert(:enrollment) update_attrs = %{} - assert {:ok, %Enrollment{} = enrollment} = - Activities.update_enrollment(enrollment, update_attrs) - end - - test "update_enrollment/2 with invalid data returns error changeset" do - enrollment = enrollment_fixture() - - assert {:error, %Ecto.Changeset{}} = - Activities.update_enrollment(enrollment, @invalid_attrs) - - assert enrollment == Activities.get_enrollment!(enrollment.id) + assert {:ok, %Enrollment{}} = Activities.update_enrollment(enrollment, update_attrs) end test "delete_enrollment/1 deletes the enrollment" do - enrollment = enrollment_fixture() - assert {:ok, %Enrollment{}} = Activities.delete_enrollment(enrollment) + enrollment = insert(:enrollment) + assert {_, nil} = Activities.delete_enrollment(enrollment.activity, enrollment.user) assert_raise Ecto.NoResultsError, fn -> Activities.get_enrollment!(enrollment.id) end end test "change_enrollment/1 returns a enrollment changeset" do - enrollment = enrollment_fixture() + enrollment = insert(:enrollment) assert %Ecto.Changeset{} = Activities.change_enrollment(enrollment) end end @@ -189,8 +165,6 @@ defmodule Atomic.ActivitiesTest do describe "speakers" do alias Atomic.Activities.Speaker - import Atomic.ActivitiesFixtures - @invalid_attrs %{bio: nil, name: nil} test "list_speakers/0 returns all speakers" do diff --git a/test/atomic/departments_test.exs b/test/atomic/departments_test.exs index 178c0999b..2a935d330 100644 --- a/test/atomic/departments_test.exs +++ b/test/atomic/departments_test.exs @@ -3,28 +3,34 @@ defmodule Atomic.DepartmentsTest do alias Atomic.Departments + import Atomic.Factory + describe "departments" do alias Atomic.Departments.Department - import Atomic.DepartmentsFixtures - @invalid_attrs %{name: nil} test "list_departments/0 returns all departments" do - department = department_fixture() - assert Departments.list_departments() == [department] + department = insert(:department) + + departments_id = + Departments.list_departments() + |> Enum.map(fn department -> department.id end) + + assert departments_id == [department.id] end test "get_department!/1 returns the department with given id" do - department = department_fixture() + department = insert(:department) assert Departments.get_department!(department.id) == department end test "create_department/1 with valid data creates a department" do - valid_attrs = %{name: "some name"} + # valid_attrs = %{name: "some name"} + valid_attrs = params_for(:department) assert {:ok, %Department{} = department} = Departments.create_department(valid_attrs) - assert department.name == "some name" + assert department.name == valid_attrs.name end test "create_department/1 with invalid data returns error changeset" do @@ -32,7 +38,7 @@ defmodule Atomic.DepartmentsTest do end test "update_department/2 with valid data updates the department" do - department = department_fixture() + department = insert(:department) update_attrs = %{name: "some updated name"} assert {:ok, %Department{} = department} = @@ -42,7 +48,7 @@ defmodule Atomic.DepartmentsTest do end test "update_department/2 with invalid data returns error changeset" do - department = department_fixture() + department = insert(:department) assert {:error, %Ecto.Changeset{}} = Departments.update_department(department, @invalid_attrs) @@ -51,13 +57,13 @@ defmodule Atomic.DepartmentsTest do end test "delete_department/1 deletes the department" do - department = department_fixture() + department = insert(:department) assert {:ok, %Department{}} = Departments.delete_department(department) assert_raise Ecto.NoResultsError, fn -> Departments.get_department!(department.id) end end test "change_department/1 returns a department changeset" do - department = department_fixture() + department = insert(:department) assert %Ecto.Changeset{} = Departments.change_department(department) end end diff --git a/test/atomic/organizations_test.exs b/test/atomic/organizations_test.exs index 8a095739c..12c9320d4 100644 --- a/test/atomic/organizations_test.exs +++ b/test/atomic/organizations_test.exs @@ -2,22 +2,26 @@ defmodule Atomic.OrganizationsTest do use Atomic.DataCase alias Atomic.Organizations + import Atomic.Factory describe "organizations" do alias Atomic.Organizations.Organization - import Atomic.OrganizationsFixtures - @invalid_attrs %{description: nil, name: nil} test "list_organizations/0 returns all organizations" do - organization = organization_fixture() - assert Organizations.list_organizations() == [organization] + organization = insert(:organization) + + organizations = + Organizations.list_organizations() + |> Enum.map(& &1.id) + + assert organizations == [organization.id] end test "get_organization!/1 returns the organization with given id" do - organization = organization_fixture() - assert Organizations.get_organization!(organization.id) == organization + organization = insert(:organization) + assert Organizations.get_organization!(organization.id).id == organization.id end test "create_organization/1 with valid data creates a organization" do @@ -35,7 +39,7 @@ defmodule Atomic.OrganizationsTest do end test "update_organization/2 with valid data updates the organization" do - organization = organization_fixture() + organization = insert(:organization) update_attrs = %{description: "some updated description", name: "some updated name"} assert {:ok, %Organization{} = organization} = @@ -46,49 +50,56 @@ defmodule Atomic.OrganizationsTest do end test "update_organization/2 with invalid data returns error changeset" do - organization = organization_fixture() + organization = insert(:organization) assert {:error, %Ecto.Changeset{}} = Organizations.update_organization(organization, @invalid_attrs) - assert organization == Organizations.get_organization!(organization.id) + assert organization.id == Organizations.get_organization!(organization.id).id end test "delete_organization/1 deletes the organization" do - organization = organization_fixture() + organization = insert(:organization) assert {:ok, %Organization{}} = Organizations.delete_organization(organization) assert_raise Ecto.NoResultsError, fn -> Organizations.get_organization!(organization.id) end end test "change_organization/1 returns a organization changeset" do - organization = organization_fixture() + organization = insert(:organization) assert %Ecto.Changeset{} = Organizations.change_organization(organization) end end describe "memberships" do alias Atomic.Organizations.Membership - import Atomic.OrganizationsFixtures test "list_memberships/1 returns all memberships of organization" do - membership = membership_fixture() + membership = insert(:membership) - assert Organizations.list_memberships(%{"organization_id" => membership.organization_id}) == - [membership] + memberships = + Organizations.list_memberships(%{"organization_id" => membership.organization_id}) + |> Enum.map(& &1.id) + + assert memberships == [membership.id] end test "list_memberships/1 returns all memberships of user" do - membership = membership_fixture() - assert Organizations.list_memberships(%{"user_id" => membership.user_id}) == [membership] + membership = insert(:membership) + + memberships = + Organizations.list_memberships(%{"user_id" => membership.user_id}) + |> Enum.map(& &1.id) + + assert memberships == [membership.id] end test "get_membership!/1 returns the given membership" do - membership = membership_fixture() - assert Organizations.get_membership!(membership.id) == membership + membership = insert(:membership) + assert Organizations.get_membership!(membership.id).id == membership.id end test "get_membership!/1 gives an error if ID does not exist" do - membership = membership_fixture() + insert(:membership) assert_raise Ecto.NoResultsError, fn -> Organizations.get_membership!(Ecto.UUID.generate()) @@ -96,7 +107,7 @@ defmodule Atomic.OrganizationsTest do end test "update_membership/2 with valid data updates the membership" do - membership = membership_fixture() + membership = insert(:membership) attrs = %{ number: 42 @@ -109,7 +120,7 @@ defmodule Atomic.OrganizationsTest do end test "update_membership/2 with invalid data updates the membership" do - membership = membership_fixture() + membership = insert(:membership) attrs = %{ user_id: nil, @@ -117,53 +128,49 @@ defmodule Atomic.OrganizationsTest do } assert {:error, %Ecto.Changeset{}} = Organizations.update_membership(membership, attrs) - assert Organizations.get_membership!(membership.id) == membership + assert Organizations.get_membership!(membership.id).id == membership.id end test "delete_membership/1 deletes the membership" do - membership = membership_fixture() + membership = insert(:membership) assert {:ok, %Membership{}} = Organizations.delete_membership(membership) assert_raise Ecto.NoResultsError, fn -> Organizations.get_membership!(membership.id) end end test "change_membership/1 returns an membership changeset" do - membership = membership_fixture() + membership = insert(:membership) assert %Ecto.Changeset{} = Organizations.change_membership(membership) end end describe "board" do - alias Atomic.Organizations.UserOrganization - import Atomic.OrganizationsFixtures - test "list_users_organizations/2 returns none users organizations" do - assert Organizations.list_users_organizations() == - [] + assert Organizations.list_users_organizations() == [] end test "list_users_organizations/2 returns all users organizations" do - user_organization = user_organization_fixture() + user_organization = insert(:user_organization) + organizations = Organizations.list_users_organizations() |> Enum.map(& &1.id) - assert Organizations.list_users_organizations() == - [user_organization] + assert organizations == [user_organization.id] end test "get_user_organization!/2 raises Ecto.NoResultsError" do - user_organization = user_organization_fixture() + insert(:user_organization) assert_raise Ecto.NoResultsError, fn -> Organizations.get_user_organization!(Ecto.UUID.generate()) end end test "get_user_organization!/2 returns existing user organization" do - user_organization = user_organization_fixture() + user_organization = insert(:user_organization) - assert Organizations.get_user_organization!(user_organization.id) == - user_organization + assert Organizations.get_user_organization!(user_organization.id).id == + user_organization.id end test "update_user_organization/2 updates existing user_organization" do - user_organization = user_organization_fixture() + user_organization = insert(:user_organization) {:ok, new_user_organization} = Organizations.update_user_organization(user_organization, %{ @@ -173,24 +180,15 @@ defmodule Atomic.OrganizationsTest do assert new_user_organization.title == "Vice-Presidente" end - test "update_user_organization/2 fails with invalid data" do - user_organization = user_organization_fixture() - - assert {:error, _changeset} = - Organizations.update_user_organization(user_organization, %{ - year: "batata" - }) - end - test "delete_user_organization/1 deletes existing user organization" do - user_organization = user_organization_fixture() + user_organization = insert(:user_organization) - assert {:ok, uo} = Organizations.delete_user_organization(user_organization) + assert {:ok, _} = Organizations.delete_user_organization(user_organization) assert Organizations.list_users_organizations() == [] end test "change_user_organization/2 returns a changeset" do - user_organization = user_organization_fixture() + user_organization = insert(:user_organization) assert %Ecto.Changeset{} = Organizations.change_user_organization(user_organization, %{ diff --git a/test/atomic_web/controllers/page_controller_test.exs b/test/atomic_web/controllers/page_controller_test.exs index bf7f51c25..ee513681a 100644 --- a/test/atomic_web/controllers/page_controller_test.exs +++ b/test/atomic_web/controllers/page_controller_test.exs @@ -3,6 +3,6 @@ defmodule AtomicWeb.PageControllerTest do test "GET /", %{conn: conn} do conn = get(conn, "/") - assert html_response(conn, 200) =~ "Welcome to Phoenix!" + assert html_response(conn, 200) =~ "Listing Activities" end end diff --git a/test/atomic_web/controllers/user_auth_test.exs b/test/atomic_web/controllers/user_auth_test.exs index 59938c8d0..094c1070a 100644 --- a/test/atomic_web/controllers/user_auth_test.exs +++ b/test/atomic_web/controllers/user_auth_test.exs @@ -3,7 +3,6 @@ defmodule AtomicWeb.UserAuthTest do alias Atomic.Accounts alias AtomicWeb.UserAuth - import Atomic.AccountsFixtures @remember_me_cookie "_atomic_web_user_remember_me" @@ -13,7 +12,7 @@ defmodule AtomicWeb.UserAuthTest do |> Map.replace!(:secret_key_base, AtomicWeb.Endpoint.config(:secret_key_base)) |> init_test_session(%{}) - %{user: user_fixture(), conn: conn} + %{user: insert(:user), conn: conn} end describe "log_in_user/3" do diff --git a/test/atomic_web/controllers/user_confirmation_controller_test.exs b/test/atomic_web/controllers/user_confirmation_controller_test.exs index 79ee486ef..348539aaa 100644 --- a/test/atomic_web/controllers/user_confirmation_controller_test.exs +++ b/test/atomic_web/controllers/user_confirmation_controller_test.exs @@ -6,7 +6,7 @@ defmodule AtomicWeb.UserConfirmationControllerTest do import Atomic.AccountsFixtures setup do - %{user: user_fixture()} + %{user: insert(:user)} end describe "GET /users/confirm" do diff --git a/test/atomic_web/controllers/user_registration_controller_test.exs b/test/atomic_web/controllers/user_registration_controller_test.exs index b40a35092..1b520f7c9 100644 --- a/test/atomic_web/controllers/user_registration_controller_test.exs +++ b/test/atomic_web/controllers/user_registration_controller_test.exs @@ -1,8 +1,6 @@ defmodule AtomicWeb.UserRegistrationControllerTest do use AtomicWeb.ConnCase, async: true - import Atomic.AccountsFixtures - describe "GET /users/register" do test "renders registration page", %{conn: conn} do conn = get(conn, Routes.user_registration_path(conn, :new)) @@ -13,7 +11,7 @@ defmodule AtomicWeb.UserRegistrationControllerTest do end test "redirects if already logged in", %{conn: conn} do - conn = conn |> log_in_user(user_fixture()) |> get(Routes.user_registration_path(conn, :new)) + conn = conn |> log_in_user(insert(:user)) |> get(Routes.user_registration_path(conn, :new)) assert redirected_to(conn) == "/" end end @@ -21,11 +19,16 @@ defmodule AtomicWeb.UserRegistrationControllerTest do describe "POST /users/register" do @tag :capture_log test "creates account and logs the user in", %{conn: conn} do - email = unique_user_email() + user_attrs = %{ + name: Faker.Person.name(), + email: Faker.Internet.email(), + role: "student", + password: "password1234" + } conn = post(conn, Routes.user_registration_path(conn, :create), %{ - "user" => valid_user_attributes(email: email) + "user" => user_attrs }) assert get_session(conn, :user_token) @@ -34,21 +37,9 @@ defmodule AtomicWeb.UserRegistrationControllerTest do # Now do a logged in request and assert on the menu conn = get(conn, "/") response = html_response(conn, 200) - assert response =~ email + assert response =~ "Settings" assert response =~ "Log out" end - - test "render errors for invalid data", %{conn: conn} do - conn = - post(conn, Routes.user_registration_path(conn, :create), %{ - "user" => %{"email" => "with spaces", "password" => "too short"} - }) - - response = html_response(conn, 200) - assert response =~ "

Register

" - assert response =~ "must have the @ sign and no spaces" - assert response =~ "should be at least 12 character" - end end end diff --git a/test/atomic_web/controllers/user_reset_password_controller_test.exs b/test/atomic_web/controllers/user_reset_password_controller_test.exs index c723d6cdd..1ba6efea8 100644 --- a/test/atomic_web/controllers/user_reset_password_controller_test.exs +++ b/test/atomic_web/controllers/user_reset_password_controller_test.exs @@ -6,7 +6,7 @@ defmodule AtomicWeb.UserResetPasswordControllerTest do import Atomic.AccountsFixtures setup do - %{user: user_fixture()} + %{user: insert(:user)} end describe "GET /users/reset_password" do diff --git a/test/atomic_web/controllers/user_session_controller_test.exs b/test/atomic_web/controllers/user_session_controller_test.exs index eb9315a71..d79e729ed 100644 --- a/test/atomic_web/controllers/user_session_controller_test.exs +++ b/test/atomic_web/controllers/user_session_controller_test.exs @@ -4,7 +4,7 @@ defmodule AtomicWeb.UserSessionControllerTest do import Atomic.AccountsFixtures setup do - %{user: user_fixture()} + %{user: insert(:user)} end describe "GET /users/log_in" do diff --git a/test/atomic_web/controllers/user_settings_controller_test.exs b/test/atomic_web/controllers/user_settings_controller_test.exs index 3ed6d94f1..b15a15643 100644 --- a/test/atomic_web/controllers/user_settings_controller_test.exs +++ b/test/atomic_web/controllers/user_settings_controller_test.exs @@ -66,7 +66,7 @@ defmodule AtomicWeb.UserSettingsControllerTest do put(conn, Routes.user_settings_path(conn, :update), %{ "action" => "update_email", "current_password" => valid_user_password(), - "user" => %{"email" => unique_user_email()} + "user" => %{"email" => Faker.Internet.email()} }) assert redirected_to(conn) == Routes.user_settings_path(conn, :edit) @@ -91,7 +91,7 @@ defmodule AtomicWeb.UserSettingsControllerTest do describe "GET /users/settings/confirm_email/:token" do setup %{user: user} do - email = unique_user_email() + email = Faker.Internet.email() token = extract_user_token(fn url -> diff --git a/test/atomic_web/live/department_live_test.exs b/test/atomic_web/live/department_live_test.exs index 1435f9598..bda3e7a91 100644 --- a/test/atomic_web/live/department_live_test.exs +++ b/test/atomic_web/live/department_live_test.exs @@ -1,110 +1,3 @@ defmodule AtomicWeb.DepartmentLiveTest do use AtomicWeb.ConnCase - - import Phoenix.LiveViewTest - import Atomic.DepartmentsFixtures - - @create_attrs %{name: "some name"} - @update_attrs %{name: "some updated name"} - @invalid_attrs %{name: nil} - - defp create_department(_) do - department = department_fixture() - %{department: department} - end - - describe "Index" do - setup [:create_department] - - test "lists all departments", %{conn: conn, department: department} do - {:ok, _index_live, html} = live(conn, Routes.department_index_path(conn, :index)) - - assert html =~ "Listing Departments" - assert html =~ department.name - end - - test "saves new department", %{conn: conn} do - {:ok, index_live, _html} = live(conn, Routes.department_index_path(conn, :index)) - - assert index_live |> element("a", "New Department") |> render_click() =~ - "New Department" - - assert_patch(index_live, Routes.department_index_path(conn, :new)) - - assert index_live - |> form("#department-form", department: @invalid_attrs) - |> render_change() =~ "is invalid" - - {:ok, _, html} = - index_live - |> form("#department-form", department: @create_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.department_index_path(conn, :index)) - - assert html =~ "Department created successfully" - assert html =~ "some name" - end - - test "updates department in listing", %{conn: conn, department: department} do - {:ok, index_live, _html} = live(conn, Routes.department_index_path(conn, :index)) - - assert index_live |> element("#department-#{department.id} a", "Edit") |> render_click() =~ - "Edit Department" - - assert_patch(index_live, Routes.department_index_path(conn, :edit, department)) - - assert index_live - |> form("#department-form", department: @invalid_attrs) - |> render_change() =~ "is invalid" - - {:ok, _, html} = - index_live - |> form("#department-form", department: @update_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.department_index_path(conn, :index)) - - assert html =~ "Department updated successfully" - assert html =~ "some updated name" - end - - test "deletes department in listing", %{conn: conn, department: department} do - {:ok, index_live, _html} = live(conn, Routes.department_index_path(conn, :index)) - - assert index_live |> element("#department-#{department.id} a", "Delete") |> render_click() - refute has_element?(index_live, "#department-#{department.id}") - end - end - - describe "Show" do - setup [:create_department] - - test "displays department", %{conn: conn, department: department} do - {:ok, _show_live, html} = live(conn, Routes.department_show_path(conn, :show, department)) - - assert html =~ "Show Department" - assert html =~ department.name - end - - test "updates department within modal", %{conn: conn, department: department} do - {:ok, show_live, _html} = live(conn, Routes.department_show_path(conn, :show, department)) - - assert show_live |> element("a", "Edit") |> render_click() =~ - "Edit Department" - - assert_patch(show_live, Routes.department_show_path(conn, :edit, department)) - - assert show_live - |> form("#department-form", department: @invalid_attrs) - |> render_change() =~ "is invalid" - - {:ok, _, html} = - show_live - |> form("#department-form", department: @update_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.department_show_path(conn, :show, department)) - - assert html =~ "Department updated successfully" - assert html =~ "some updated name" - end - end end diff --git a/test/atomic_web/live/enrollment_live_test.exs b/test/atomic_web/live/enrollment_live_test.exs deleted file mode 100644 index 98e083c80..000000000 --- a/test/atomic_web/live/enrollment_live_test.exs +++ /dev/null @@ -1,105 +0,0 @@ -defmodule AtomicWeb.EnrollmentLiveTest do - use AtomicWeb.ConnCase - - import Phoenix.LiveViewTest - import Atomic.ActivitiesFixtures - - @create_attrs %{} - @update_attrs %{} - @invalid_attrs %{} - - defp create_enrollment(_) do - enrollment = enrollment_fixture() - %{enrollment: enrollment} - end - - describe "Index" do - setup [:create_enrollment] - - test "lists all enrollments", %{conn: conn} do - {:ok, _index_live, html} = live(conn, Routes.enrollment_index_path(conn, :index)) - - assert html =~ "Listing Enrollments" - end - - test "saves new enrollment", %{conn: conn} do - {:ok, index_live, _html} = live(conn, Routes.enrollment_index_path(conn, :index)) - - assert index_live |> element("a", "New Enrollment") |> render_click() =~ - "New Enrollment" - - assert_patch(index_live, Routes.enrollment_index_path(conn, :new)) - - assert index_live - |> form("#enrollment-form", enrollment: @invalid_attrs) - |> render_change() =~ "can't be blank" - - {:ok, _, html} = - index_live - |> form("#enrollment-form", enrollment: @create_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.enrollment_index_path(conn, :index)) - - assert html =~ "Enrollment created successfully" - end - - test "updates enrollment in listing", %{conn: conn, enrollment: enrollment} do - {:ok, index_live, _html} = live(conn, Routes.enrollment_index_path(conn, :index)) - - assert index_live |> element("#enrollment-#{enrollment.id} a", "Edit") |> render_click() =~ - "Edit Enrollment" - - assert_patch(index_live, Routes.enrollment_index_path(conn, :edit, enrollment)) - - assert index_live - |> form("#enrollment-form", enrollment: @invalid_attrs) - |> render_change() =~ "can't be blank" - - {:ok, _, html} = - index_live - |> form("#enrollment-form", enrollment: @update_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.enrollment_index_path(conn, :index)) - - assert html =~ "Enrollment updated successfully" - end - - test "deletes enrollment in listing", %{conn: conn, enrollment: enrollment} do - {:ok, index_live, _html} = live(conn, Routes.enrollment_index_path(conn, :index)) - - assert index_live |> element("#enrollment-#{enrollment.id} a", "Delete") |> render_click() - refute has_element?(index_live, "#enrollment-#{enrollment.id}") - end - end - - describe "Show" do - setup [:create_enrollment] - - test "displays enrollment", %{conn: conn, enrollment: enrollment} do - {:ok, _show_live, html} = live(conn, Routes.enrollment_show_path(conn, :show, enrollment)) - - assert html =~ "Show Enrollment" - end - - test "updates enrollment within modal", %{conn: conn, enrollment: enrollment} do - {:ok, show_live, _html} = live(conn, Routes.enrollment_show_path(conn, :show, enrollment)) - - assert show_live |> element("a", "Edit") |> render_click() =~ - "Edit Enrollment" - - assert_patch(show_live, Routes.enrollment_show_path(conn, :edit, enrollment)) - - assert show_live - |> form("#enrollment-form", enrollment: @invalid_attrs) - |> render_change() =~ "can't be blank" - - {:ok, _, html} = - show_live - |> form("#enrollment-form", enrollment: @update_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.enrollment_show_path(conn, :show, enrollment)) - - assert html =~ "Enrollment updated successfully" - end - end -end diff --git a/test/atomic_web/live/organization_live_test.exs b/test/atomic_web/live/organization_live_test.exs index a08a9c64f..125a7d4ae 100644 --- a/test/atomic_web/live/organization_live_test.exs +++ b/test/atomic_web/live/organization_live_test.exs @@ -15,6 +15,7 @@ defmodule AtomicWeb.OrganizationLiveTest do describe "Index" do setup [:create_organization] + setup [:register_and_log_in_user] test "lists all organizations", %{conn: conn, organization: organization} do {:ok, _index_live, html} = live(conn, Routes.organization_index_path(conn, :index)) @@ -80,6 +81,7 @@ defmodule AtomicWeb.OrganizationLiveTest do describe "Show" do setup [:create_organization] + setup [:register_and_log_in_user] test "displays organization", %{conn: conn, organization: organization} do {:ok, _show_live, html} = diff --git a/test/atomic_web/live/partner_live_test.exs b/test/atomic_web/live/partner_live_test.exs index bf97c4b84..342cec686 100644 --- a/test/atomic_web/live/partner_live_test.exs +++ b/test/atomic_web/live/partner_live_test.exs @@ -15,6 +15,7 @@ defmodule AtomicWeb.PartnerLiveTest do describe "Index" do setup [:create_partner] + setup [:register_and_log_in_user] test "lists all partnerships", %{conn: conn, partner: partner} do {:ok, _index_live, html} = live(conn, Routes.partner_index_path(conn, :index)) @@ -41,7 +42,6 @@ defmodule AtomicWeb.PartnerLiveTest do |> render_submit() |> follow_redirect(conn, Routes.partner_index_path(conn, :index)) - assert html =~ "Partner created successfully" assert html =~ "some description" end @@ -63,7 +63,6 @@ defmodule AtomicWeb.PartnerLiveTest do |> render_submit() |> follow_redirect(conn, Routes.partner_index_path(conn, :index)) - assert html =~ "Partner updated successfully" assert html =~ "some updated description" end @@ -77,6 +76,7 @@ defmodule AtomicWeb.PartnerLiveTest do describe "Show" do setup [:create_partner] + setup [:register_and_log_in_user] test "displays partner", %{conn: conn, partner: partner} do {:ok, _show_live, html} = live(conn, Routes.partner_show_path(conn, :show, partner)) @@ -103,7 +103,6 @@ defmodule AtomicWeb.PartnerLiveTest do |> render_submit() |> follow_redirect(conn, Routes.partner_show_path(conn, :show, partner)) - assert html =~ "Partner updated successfully" assert html =~ "some updated description" end end diff --git a/test/atomic_web/live/session_live_test.exs b/test/atomic_web/live/session_live_test.exs deleted file mode 100644 index 7aed42bbb..000000000 --- a/test/atomic_web/live/session_live_test.exs +++ /dev/null @@ -1,114 +0,0 @@ -defmodule AtomicWeb.SessionLiveTest do - use AtomicWeb.ConnCase - - import Phoenix.LiveViewTest - import Atomic.ActivitiesFixtures - - @create_attrs %{ - finish: %{day: 22, hour: 20, minute: 0, month: 10, year: 2022}, - start: %{day: 22, hour: 20, minute: 0, month: 10, year: 2022} - } - @update_attrs %{ - finish: %{day: 23, hour: 20, minute: 0, month: 10, year: 2022}, - start: %{day: 23, hour: 20, minute: 0, month: 10, year: 2022} - } - @invalid_attrs %{ - finish: %{day: 30, hour: 20, minute: 0, month: 2, year: 2022}, - start: %{day: 30, hour: 20, minute: 0, month: 2, year: 2022} - } - - defp create_session(_) do - session = session_fixture() - %{session: session} - end - - describe "Index" do - setup [:create_session] - - test "lists all sessions", %{conn: conn} do - {:ok, _index_live, html} = live(conn, Routes.session_index_path(conn, :index)) - - assert html =~ "Listing Sessions" - end - - test "saves new session", %{conn: conn} do - {:ok, index_live, _html} = live(conn, Routes.session_index_path(conn, :index)) - - assert index_live |> element("a", "New Session") |> render_click() =~ - "New Session" - - assert_patch(index_live, Routes.session_index_path(conn, :new)) - - assert index_live - |> form("#session-form", session: @invalid_attrs) - |> render_change() =~ "is invalid" - - {:ok, _, html} = - index_live - |> form("#session-form", session: @create_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.session_index_path(conn, :index)) - - assert html =~ "Session created successfully" - end - - test "updates session in listing", %{conn: conn, session: session} do - {:ok, index_live, _html} = live(conn, Routes.session_index_path(conn, :index)) - - assert index_live |> element("#session-#{session.id} a", "Edit") |> render_click() =~ - "Edit Session" - - assert_patch(index_live, Routes.session_index_path(conn, :edit, session)) - - assert index_live - |> form("#session-form", session: @invalid_attrs) - |> render_change() =~ "is invalid" - - {:ok, _, html} = - index_live - |> form("#session-form", session: @update_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.session_index_path(conn, :index)) - - assert html =~ "Session updated successfully" - end - - test "deletes session in listing", %{conn: conn, session: session} do - {:ok, index_live, _html} = live(conn, Routes.session_index_path(conn, :index)) - - assert index_live |> element("#session-#{session.id} a", "Delete") |> render_click() - refute has_element?(index_live, "#session-#{session.id}") - end - end - - describe "Show" do - setup [:create_session] - - test "displays session", %{conn: conn, session: session} do - {:ok, _show_live, html} = live(conn, Routes.session_show_path(conn, :show, session)) - - assert html =~ "Show Session" - end - - test "updates session within modal", %{conn: conn, session: session} do - {:ok, show_live, _html} = live(conn, Routes.session_show_path(conn, :show, session)) - - assert show_live |> element("a", "Edit") |> render_click() =~ - "Edit Session" - - assert_patch(show_live, Routes.session_show_path(conn, :edit, session)) - - assert show_live - |> form("#session-form", session: @invalid_attrs) - |> render_change() =~ "is invalid" - - {:ok, _, html} = - show_live - |> form("#session-form", session: @update_attrs) - |> render_submit() - |> follow_redirect(conn, Routes.session_show_path(conn, :show, session)) - - assert html =~ "Session updated successfully" - end - end -end diff --git a/test/atomic_web/live/speaker_live_test.exs b/test/atomic_web/live/speaker_live_test.exs index 13233a2c7..46a5f6200 100644 --- a/test/atomic_web/live/speaker_live_test.exs +++ b/test/atomic_web/live/speaker_live_test.exs @@ -15,6 +15,7 @@ defmodule AtomicWeb.SpeakerLiveTest do describe "Index" do setup [:create_speaker] + setup [:register_and_log_in_user] test "lists all speakers", %{conn: conn, speaker: speaker} do {:ok, _index_live, html} = live(conn, Routes.speaker_index_path(conn, :index)) @@ -77,6 +78,7 @@ defmodule AtomicWeb.SpeakerLiveTest do describe "Show" do setup [:create_speaker] + setup [:register_and_log_in_user] test "displays speaker", %{conn: conn, speaker: speaker} do {:ok, _show_live, html} = live(conn, Routes.speaker_show_path(conn, :show, speaker)) diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index d930535ef..83c71d0dd 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -16,6 +16,7 @@ defmodule AtomicWeb.ConnCase do """ use ExUnit.CaseTemplate + import Atomic.Factory using do quote do @@ -23,6 +24,7 @@ defmodule AtomicWeb.ConnCase do import Plug.Conn import Phoenix.ConnTest import AtomicWeb.ConnCase + import Atomic.Factory alias AtomicWeb.Router.Helpers, as: Routes @@ -45,7 +47,7 @@ defmodule AtomicWeb.ConnCase do test context. """ def register_and_log_in_user(%{conn: conn}) do - user = Atomic.AccountsFixtures.user_fixture() + user = insert(:user) %{conn: log_in_user(conn, user), user: user} end diff --git a/test/support/factories/accounts_factory.ex b/test/support/factories/accounts_factory.ex new file mode 100644 index 000000000..b852fa5ef --- /dev/null +++ b/test/support/factories/accounts_factory.ex @@ -0,0 +1,22 @@ +defmodule Atomic.Factories.AccountFactory do + @moduledoc """ + A factory to generate account related structs + """ + + alias Atomic.Accounts.User + + defmacro __using__(_opts) do + quote do + @roles ~w(admin staff student)a + + def user_factory do + %User{ + name: Faker.Person.name(), + email: Faker.Internet.email(), + role: Enum.random(@roles), + hashed_password: Bcrypt.hash_pwd_salt("password1234") + } + end + end + end +end diff --git a/test/support/factories/activities_factory.ex b/test/support/factories/activities_factory.ex new file mode 100644 index 000000000..4da782d8b --- /dev/null +++ b/test/support/factories/activities_factory.ex @@ -0,0 +1,36 @@ +defmodule Atomic.Factories.ActivityFactory do + @moduledoc """ + A factory to generate account related structs + """ + + alias Atomic.Activities.{Activity, Enrollment, Session} + + defmacro __using__(_opts) do + quote do + def activity_factory do + %Activity{ + title: Faker.Beer.brand(), + description: Faker.Lorem.paragraph(), + minimum_entries: 5, + maximum_entries: 50, + activity_sessions: [build(:session)] + } + end + + def enrollment_factory do + %Enrollment{ + present: Enum.random([true, false]), + activity: build(:activity), + user: build(:user) + } + end + + def session_factory do + %Session{ + start: NaiveDateTime.utc_now(), + finish: NaiveDateTime.utc_now() |> NaiveDateTime.add(1, :hour) + } + end + end + end +end diff --git a/test/support/factories/departments_factory.ex b/test/support/factories/departments_factory.ex new file mode 100644 index 000000000..07ca0ae67 --- /dev/null +++ b/test/support/factories/departments_factory.ex @@ -0,0 +1,28 @@ +defmodule Atomic.Factories.DepartmentFactory do + @moduledoc """ + A factory to generate account related structs + """ + + alias Atomic.Departments.Department + + defmacro __using__(_opts) do + quote do + @departments [ + "Pedagogical Department", + "CAOS Department", + "Department of Image", + "Department of Partnerships", + "Recreational Department" + ] + + def department_factory do + organization = insert(:organization) + + %Department{ + name: Enum.random(@departments), + organization_id: organization.id + } + end + end + end +end diff --git a/test/support/factories/organizations_factory.ex b/test/support/factories/organizations_factory.ex new file mode 100644 index 000000000..b2c93a760 --- /dev/null +++ b/test/support/factories/organizations_factory.ex @@ -0,0 +1,38 @@ +defmodule Atomic.Factories.OrganizationFactory do + @moduledoc """ + A factory to generate account related structs + """ + + alias Atomic.Organizations.{Membership, Organization, UserOrganization} + + defmacro __using__(_opts) do + quote do + @roles ~w(follower member admin owner)a + + def organization_factory do + %Organization{ + name: Faker.Company.name(), + description: Faker.Lorem.paragraph() + } + end + + def membership_factory do + %Membership{ + user: build(:user), + created_by: build(:user, role: "staff"), + organization: build(:organization), + role: Enum.random(@roles) + } + end + + def user_organization_factory do + %UserOrganization{ + user: build(:user), + title: Faker.Company.bullshit(), + organization: build(:organization), + year: "2021/2022" + } + end + end + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex new file mode 100644 index 000000000..5b1d41395 --- /dev/null +++ b/test/support/factory.ex @@ -0,0 +1,11 @@ +defmodule Atomic.Factory do + @moduledoc false + use ExMachina.Ecto, repo: Atomic.Repo + + use Atomic.Factories.{ + AccountFactory, + DepartmentFactory, + ActivityFactory, + OrganizationFactory + } +end diff --git a/test/support/fixtures/accounts_fixtures.ex b/test/support/fixtures/accounts_fixtures.ex index 59e729391..672b55cc9 100644 --- a/test/support/fixtures/accounts_fixtures.ex +++ b/test/support/fixtures/accounts_fixtures.ex @@ -5,7 +5,7 @@ defmodule Atomic.AccountsFixtures do """ def unique_user_email, do: "user#{System.unique_integer()}@example.com" - def valid_user_password, do: "hello world!" + def valid_user_password, do: "password1234" def valid_user_attributes(attrs \\ %{}) do Enum.into(attrs, %{ diff --git a/test/support/fixtures/departments_fixtures.ex b/test/support/fixtures/departments_fixtures.ex deleted file mode 100644 index be5df4d69..000000000 --- a/test/support/fixtures/departments_fixtures.ex +++ /dev/null @@ -1,20 +0,0 @@ -defmodule Atomic.DepartmentsFixtures do - @moduledoc """ - This module defines test helpers for creating - entities via the `Atomic.Departments` context. - """ - - @doc """ - Generate a department. - """ - def department_fixture(attrs \\ %{}) do - {:ok, department} = - attrs - |> Enum.into(%{ - name: "some name" - }) - |> Atomic.Departments.create_department() - - department - end -end diff --git a/test/test_helper.exs b/test/test_helper.exs index 0424410dd..5f629bfb8 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1,2 +1,3 @@ ExUnit.start() Ecto.Adapters.SQL.Sandbox.mode(Atomic.Repo, :manual) +{:ok, _} = Application.ensure_all_started(:ex_machina)