- Create UserSettingsLive to replace UserSettingsController - Convert email/password forms to LiveView with proper form handling - Add mobile session management (toggle alerts, revoke devices) - Add require_sudo_mode on_mount hook to UserAuth - Create dedicated live_session for sudo mode routes in router - Keep UserSettingsController for email confirmation via token only - Add MobileSessions.get_session/1 function for test support - Update tests to match LiveView behavior (password update redirects to login) - Remove old controller tests for email/password updates (now in LiveView)
62 lines
2 KiB
Elixir
62 lines
2 KiB
Elixir
defmodule ToweropsWeb.UserSettingsControllerTest do
|
|
@moduledoc """
|
|
Tests for UserSettingsController.
|
|
|
|
Most user settings functionality is now in UserSettingsLive.
|
|
This controller only handles email confirmation via token.
|
|
"""
|
|
use ToweropsWeb.ConnCase, async: true
|
|
|
|
import Towerops.AccountsFixtures
|
|
|
|
alias Towerops.Accounts
|
|
|
|
setup :register_and_log_in_user
|
|
|
|
describe "GET /users/settings/confirm-email/:token" do
|
|
setup %{user: user} do
|
|
email = unique_user_email()
|
|
|
|
token =
|
|
extract_user_token(fn url ->
|
|
Accounts.deliver_user_update_email_instructions(%{user | email: email}, user.email, url)
|
|
end)
|
|
|
|
%{token: token, email: email}
|
|
end
|
|
|
|
test "updates the user email once", %{conn: conn, user: user, token: token, email: email} do
|
|
conn = get(conn, ~p"/users/settings/confirm-email/#{token}")
|
|
assert redirected_to(conn) == ~p"/users/settings"
|
|
|
|
assert Phoenix.Flash.get(conn.assigns.flash, :info) =~
|
|
"Email changed successfully"
|
|
|
|
refute Accounts.get_user_by_email(user.email)
|
|
assert Accounts.get_user_by_email(email)
|
|
|
|
conn = get(conn, ~p"/users/settings/confirm-email/#{token}")
|
|
|
|
assert redirected_to(conn) == ~p"/users/settings"
|
|
|
|
assert Phoenix.Flash.get(conn.assigns.flash, :error) =~
|
|
"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, ~p"/users/settings/confirm-email/oops")
|
|
assert redirected_to(conn) == ~p"/users/settings"
|
|
|
|
assert Phoenix.Flash.get(conn.assigns.flash, :error) =~
|
|
"Email change link is invalid or it has expired"
|
|
|
|
assert Accounts.get_user_by_email(user.email)
|
|
end
|
|
|
|
test "redirects if user is not logged in", %{token: token} do
|
|
conn = build_conn()
|
|
conn = get(conn, ~p"/users/settings/confirm-email/#{token}")
|
|
assert redirected_to(conn) == ~p"/users/log-in"
|
|
end
|
|
end
|
|
end
|