From 025706e391b0fa90a95cb1e0d0e0963328951b0b Mon Sep 17 00:00:00 2001 From: shibao Date: Wed, 16 Feb 2022 21:20:04 -0500 Subject: [PATCH] pass user settings controller test --- .../controllers/user_auth_test.exs | 3 +- .../user_confirmation_controller_test.exs | 41 +++++++++++++--- .../user_registration_controller_test.exs | 5 +- .../user_reset_password_controller_test.exs | 18 ++++++- .../user_settings_controller_test.exs | 49 +++++++++++++------ 5 files changed, 90 insertions(+), 26 deletions(-) diff --git a/test/cannery_web/controllers/user_auth_test.exs b/test/cannery_web/controllers/user_auth_test.exs index bbb45df..9dde8b4 100644 --- a/test/cannery_web/controllers/user_auth_test.exs +++ b/test/cannery_web/controllers/user_auth_test.exs @@ -4,6 +4,7 @@ defmodule CanneryWeb.UserAuthTest do """ use CanneryWeb.ConnCase, async: true + import CanneryWeb.Gettext alias Cannery.Accounts alias CanneryWeb.UserAuth @@ -138,7 +139,7 @@ defmodule CanneryWeb.UserAuthTest do conn = conn |> fetch_flash() |> UserAuth.require_authenticated_user([]) assert conn.halted assert redirected_to(conn) == Routes.user_session_path(conn, :new) - assert get_flash(conn, :error) == "You must log in to access this page." + assert get_flash(conn, :error) == dgettext("errors", "You must log in to access this page.") end test "stores the path to redirect to on GET", %{conn: conn} do diff --git a/test/cannery_web/controllers/user_confirmation_controller_test.exs b/test/cannery_web/controllers/user_confirmation_controller_test.exs index 49d30f9..e31ec62 100644 --- a/test/cannery_web/controllers/user_confirmation_controller_test.exs +++ b/test/cannery_web/controllers/user_confirmation_controller_test.exs @@ -31,7 +31,14 @@ defmodule CanneryWeb.UserConfirmationControllerTest do }) assert redirected_to(conn) == "/" - assert get_flash(conn, :info) =~ dgettext("prompts", "If your email is in our system") + + assert get_flash(conn, :info) =~ + dgettext( + "prompts", + "If your email is in our system and it has not been confirmed yet, " <> + "you will receive an email with instructions shortly." + ) + assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "confirm" end @@ -44,8 +51,13 @@ defmodule CanneryWeb.UserConfirmationControllerTest do }) assert redirected_to(conn) == "/" - assert get_flash(conn, :info) =~ "If your email is in our system" - refute Repo.get_by(Accounts.UserToken, user_id: user.id) + + assert get_flash(conn, :info) =~ + dgettext( + "prompts", + "If your email is in our system and it has not been confirmed yet, " <> + "you will receive an email with instructions shortly." + ) end test "does not send confirmation token if email is invalid", %{conn: conn} do @@ -55,7 +67,14 @@ defmodule CanneryWeb.UserConfirmationControllerTest do }) assert redirected_to(conn) == "/" - assert get_flash(conn, :info) =~ dgettext("prompts", "If your email is in our system") + + assert get_flash(conn, :info) =~ + dgettext( + "prompts", + "If your email is in our system and it has not been confirmed yet, " <> + "you will receive an email with instructions shortly." + ) + assert Repo.all(Accounts.UserToken) == [] end end @@ -69,7 +88,10 @@ defmodule CanneryWeb.UserConfirmationControllerTest do conn = get(conn, Routes.user_confirmation_path(conn, :confirm, token)) assert redirected_to(conn) == "/" - assert get_flash(conn, :info) =~ dgettext("prompts", "%{email} confirmed successfully", email: user.email) + + assert get_flash(conn, :info) =~ + dgettext("prompts", "%{email} confirmed successfully", email: user.email) + assert Accounts.get_user!(user.id).confirmed_at refute get_session(conn, :user_token) assert Repo.all(Accounts.UserToken) == [] @@ -77,7 +99,9 @@ defmodule CanneryWeb.UserConfirmationControllerTest do # When not logged in conn = get(conn, Routes.user_confirmation_path(conn, :confirm, token)) assert redirected_to(conn) == "/" - assert get_flash(conn, :error) =~ dgettext("errors", "User confirmation link is invalid or it has expired") + + assert get_flash(conn, :error) =~ + dgettext("errors", "User confirmation link is invalid or it has expired") # When logged in conn = @@ -92,7 +116,10 @@ defmodule CanneryWeb.UserConfirmationControllerTest do test "does not confirm email with invalid token", %{conn: conn, user: user} do conn = get(conn, Routes.user_confirmation_path(conn, :confirm, "oops")) assert redirected_to(conn) == "/" - assert get_flash(conn, :error) =~ dgettext("errors", "User confirmation link is invalid or it has expired") + + assert get_flash(conn, :error) =~ + dgettext("errors", "User confirmation link is invalid or it has expired") + refute Accounts.get_user!(user.id).confirmed_at end end diff --git a/test/cannery_web/controllers/user_registration_controller_test.exs b/test/cannery_web/controllers/user_registration_controller_test.exs index 0ffd352..9a75847 100644 --- a/test/cannery_web/controllers/user_registration_controller_test.exs +++ b/test/cannery_web/controllers/user_registration_controller_test.exs @@ -32,7 +32,10 @@ defmodule CanneryWeb.UserRegistrationControllerTest do "user" => valid_user_attributes(email: email) }) - assert get_session(conn, :phoenix_flash) == %{"info" => dgettext("prompts", "Please check your email to verify your account")} + assert get_session(conn, :phoenix_flash) == %{ + "info" => dgettext("prompts", "Please check your email to verify your account") + } + assert redirected_to(conn) =~ "/" # Now do a logged in request and assert on the menu diff --git a/test/cannery_web/controllers/user_reset_password_controller_test.exs b/test/cannery_web/controllers/user_reset_password_controller_test.exs index c44769f..51b1cff 100644 --- a/test/cannery_web/controllers/user_reset_password_controller_test.exs +++ b/test/cannery_web/controllers/user_reset_password_controller_test.exs @@ -30,7 +30,14 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do }) assert redirected_to(conn) == "/" - assert get_flash(conn, :info) =~ dgettext("prompts", "If your email is in our system") + + assert get_flash(conn, :info) =~ + dgettext( + "prompts", + "If your email is in our system and it has not been confirmed yet, " <> + "you will receive an email with instructions shortly." + ) + assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "reset_password" end @@ -41,7 +48,14 @@ defmodule CanneryWeb.UserResetPasswordControllerTest do }) assert redirected_to(conn) == "/" - assert get_flash(conn, :info) =~ dgettext("prompts", "If your email is in our system") + + assert get_flash(conn, :info) =~ + dgettext( + "prompts", + "If your email is in our system and it has not been confirmed yet, " <> + "you will receive an email with instructions shortly." + ) + assert Repo.all(Accounts.UserToken) == [] end end diff --git a/test/cannery_web/controllers/user_settings_controller_test.exs b/test/cannery_web/controllers/user_settings_controller_test.exs index d224120..39d9b83 100644 --- a/test/cannery_web/controllers/user_settings_controller_test.exs +++ b/test/cannery_web/controllers/user_settings_controller_test.exs @@ -1,8 +1,13 @@ defmodule CanneryWeb.UserSettingsControllerTest do - use CanneryWeb.ConnCase, async: true + @moduledoc """ + Tests the user settings controller + """ + use CanneryWeb.ConnCase, async: true + import CanneryWeb.Gettext alias Cannery.Accounts - import Cannery.AccountsFixtures + + @moduletag :user_settings_controller_test setup :register_and_log_in_user @@ -10,7 +15,7 @@ defmodule CanneryWeb.UserSettingsControllerTest do test "renders settings page", %{conn: conn} do conn = get(conn, Routes.user_settings_path(conn, :edit)) response = html_response(conn, 200) - assert response =~ "

Settings

" + assert response =~ gettext("Settings") end test "redirects if user is not logged in" do @@ -34,7 +39,10 @@ defmodule CanneryWeb.UserSettingsControllerTest do assert redirected_to(new_password_conn) == Routes.user_settings_path(conn, :edit) assert get_session(new_password_conn, :user_token) != get_session(conn, :user_token) - assert get_flash(new_password_conn, :info) =~ "Password updated successfully" + + assert get_flash(new_password_conn, :info) =~ + dgettext("actions", "Password updated successfully") + assert Accounts.get_user_by_email_and_password(user.email, "new valid password") end @@ -50,10 +58,10 @@ defmodule CanneryWeb.UserSettingsControllerTest do }) response = html_response(old_password_conn, 200) - assert response =~ "

Settings

" - assert response =~ "should be at least 12 character(s)" - assert response =~ "does not match password" - assert response =~ "is not valid" + assert response =~ gettext("Settings") + assert response =~ dgettext("errors", "should be at least 12 character(s)") + assert response =~ dgettext("errors", "does not match password") + assert response =~ dgettext("errors", "is not valid") assert get_session(old_password_conn, :user_token) == get_session(conn, :user_token) end @@ -70,7 +78,13 @@ defmodule CanneryWeb.UserSettingsControllerTest do }) assert redirected_to(conn) == Routes.user_settings_path(conn, :edit) - assert get_flash(conn, :info) =~ "A link to confirm your email" + + assert get_flash(conn, :info) =~ + dgettext( + "prompts", + "A link to confirm your email change has been sent to the new address." + ) + assert Accounts.get_user_by_email(user.email) end @@ -83,9 +97,9 @@ defmodule CanneryWeb.UserSettingsControllerTest do }) response = html_response(conn, 200) - assert response =~ "

Settings

" - assert response =~ "must have the @ sign and no spaces" - assert response =~ "is not valid" + assert response =~ gettext("Settings") + assert response =~ dgettext("errors", "must have the @ sign and no spaces") + assert response =~ dgettext("errors", "is not valid") end end @@ -104,19 +118,24 @@ defmodule CanneryWeb.UserSettingsControllerTest do test "updates the user email once", %{conn: conn, user: user, token: token, email: email} do conn = get(conn, Routes.user_settings_path(conn, :confirm_email, token)) assert redirected_to(conn) == Routes.user_settings_path(conn, :edit) - assert get_flash(conn, :info) =~ "Email changed successfully" + assert get_flash(conn, :info) =~ dgettext("prompts", "Email changed successfully") refute Accounts.get_user_by_email(user.email) assert Accounts.get_user_by_email(email) conn = get(conn, Routes.user_settings_path(conn, :confirm_email, token)) assert redirected_to(conn) == Routes.user_settings_path(conn, :edit) - assert get_flash(conn, :error) =~ "Email change link is invalid or it has expired" + + assert get_flash(conn, :error) =~ + dgettext("errors", "Email change link is invalid or it has expired") end test "does not update email with invalid token", %{conn: conn, user: user} do conn = get(conn, Routes.user_settings_path(conn, :confirm_email, "oops")) assert redirected_to(conn) == Routes.user_settings_path(conn, :edit) - assert get_flash(conn, :error) =~ "Email change link is invalid or it has expired" + + assert get_flash(conn, :error) =~ + dgettext("errors", "Email change link is invalid or it has expired") + assert Accounts.get_user_by_email(user.email) end