2026-02-18 21:23:15 +00:00
|
|
|
defmodule BerrypodWeb.Auth.SettingsTest do
|
|
|
|
|
use BerrypodWeb.ConnCase
|
2025-12-30 12:26:46 +00:00
|
|
|
|
2026-02-18 21:23:15 +00:00
|
|
|
alias Berrypod.Accounts
|
2025-12-30 12:26:46 +00:00
|
|
|
import Phoenix.LiveViewTest
|
2026-02-18 21:23:15 +00:00
|
|
|
import Berrypod.AccountsFixtures
|
2025-12-30 12:26:46 +00:00
|
|
|
|
2026-02-12 09:04:51 +00:00
|
|
|
describe "settings redirect" do
|
|
|
|
|
test "redirects to admin settings when logged in", %{conn: conn} do
|
|
|
|
|
conn = log_in_user(conn, user_fixture())
|
|
|
|
|
assert {:error, {:redirect, %{to: "/admin/settings"}}} = live(conn, ~p"/users/settings")
|
2025-12-30 12:26:46 +00:00
|
|
|
end
|
|
|
|
|
|
2026-02-12 09:04:51 +00:00
|
|
|
test "redirects to login when not logged in", %{conn: conn} do
|
2025-12-30 12:26:46 +00:00
|
|
|
assert {:error, redirect} = live(conn, ~p"/users/settings")
|
|
|
|
|
assert {:redirect, %{to: path, flash: flash}} = redirect
|
|
|
|
|
assert path == ~p"/users/log-in"
|
|
|
|
|
assert %{"error" => "You must log in to access this page."} = flash
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe "confirm email" do
|
|
|
|
|
setup %{conn: conn} do
|
|
|
|
|
user = user_fixture()
|
|
|
|
|
email = unique_user_email()
|
|
|
|
|
|
|
|
|
|
token =
|
|
|
|
|
extract_user_token(fn url ->
|
|
|
|
|
Accounts.deliver_user_update_email_instructions(%{user | email: email}, user.email, url)
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
%{conn: log_in_user(conn, user), token: token, email: email, user: user}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "updates the user email once", %{conn: conn, user: user, token: token, email: email} do
|
|
|
|
|
{:error, redirect} = live(conn, ~p"/users/settings/confirm-email/#{token}")
|
|
|
|
|
|
2026-02-12 09:04:51 +00:00
|
|
|
assert {:redirect, %{to: "/admin/settings", flash: flash}} = redirect
|
|
|
|
|
assert %{"info" => "Email changed successfully."} = flash
|
2025-12-30 12:26:46 +00:00
|
|
|
refute Accounts.get_user_by_email(user.email)
|
|
|
|
|
assert Accounts.get_user_by_email(email)
|
|
|
|
|
|
|
|
|
|
# use confirm token again
|
|
|
|
|
{:error, redirect} = live(conn, ~p"/users/settings/confirm-email/#{token}")
|
2026-02-12 09:04:51 +00:00
|
|
|
|
|
|
|
|
assert {:redirect, %{to: "/admin/settings", flash: flash}} = redirect
|
|
|
|
|
assert %{"error" => "Email change link is invalid or it has expired."} = flash
|
2025-12-30 12:26:46 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "does not update email with invalid token", %{conn: conn, user: user} do
|
|
|
|
|
{:error, redirect} = live(conn, ~p"/users/settings/confirm-email/oops")
|
2026-02-12 09:04:51 +00:00
|
|
|
|
|
|
|
|
assert {:redirect, %{to: "/admin/settings", flash: flash}} = redirect
|
|
|
|
|
assert %{"error" => "Email change link is invalid or it has expired."} = flash
|
2025-12-30 12:26:46 +00:00
|
|
|
assert Accounts.get_user_by_email(user.email)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "redirects if user is not logged in", %{token: token} do
|
|
|
|
|
conn = build_conn()
|
|
|
|
|
{:error, redirect} = live(conn, ~p"/users/settings/confirm-email/#{token}")
|
2026-02-12 09:04:51 +00:00
|
|
|
|
2025-12-30 12:26:46 +00:00
|
|
|
assert {:redirect, %{to: path, flash: flash}} = redirect
|
|
|
|
|
assert path == ~p"/users/log-in"
|
|
|
|
|
assert %{"error" => message} = flash
|
|
|
|
|
assert message == "You must log in to access this page."
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|