Refactor test setup: use global setup and fix MembershipFees domain alias
- Remove redundant setup blocks from member_live tests - Add build_unauthenticated_conn helper for AuthController tests - Add global setup in conn_case.ex
This commit is contained in:
parent
bc87893134
commit
075a06ba6f
9 changed files with 216 additions and 81 deletions
|
|
@ -1,21 +1,42 @@
|
|||
defmodule MvWeb.AuthControllerTest do
|
||||
use MvWeb.ConnCase, async: true
|
||||
import Phoenix.LiveViewTest
|
||||
import Phoenix.ConnTest
|
||||
|
||||
# Helper to create an unauthenticated conn (preserves sandbox metadata)
|
||||
defp build_unauthenticated_conn(authenticated_conn) do
|
||||
# Create new conn but preserve sandbox metadata for database access
|
||||
new_conn = build_conn()
|
||||
|
||||
# Copy sandbox metadata from authenticated conn
|
||||
if authenticated_conn.private[:ecto_sandbox] do
|
||||
Plug.Conn.put_private(new_conn, :ecto_sandbox, authenticated_conn.private[:ecto_sandbox])
|
||||
else
|
||||
new_conn
|
||||
end
|
||||
end
|
||||
|
||||
# Basic UI tests
|
||||
test "GET /sign-in shows sign in form", %{conn: conn} do
|
||||
test "GET /sign-in shows sign in form", %{conn: authenticated_conn} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
conn = get(conn, ~p"/sign-in")
|
||||
assert html_response(conn, 200) =~ "Sign in"
|
||||
end
|
||||
|
||||
test "GET /sign-out redirects to home", %{conn: conn} do
|
||||
conn = conn_with_oidc_user(conn)
|
||||
test "GET /sign-out redirects to home", %{conn: authenticated_conn} do
|
||||
conn = conn_with_oidc_user(authenticated_conn)
|
||||
conn = get(conn, ~p"/sign-out")
|
||||
assert redirected_to(conn) == ~p"/"
|
||||
end
|
||||
|
||||
# Password authentication (LiveView)
|
||||
test "password user can sign in with valid credentials via LiveView", %{conn: conn} do
|
||||
test "password user can sign in with valid credentials via LiveView", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
_user =
|
||||
create_test_user(%{
|
||||
email: "password@example.com",
|
||||
|
|
@ -35,7 +56,12 @@ defmodule MvWeb.AuthControllerTest do
|
|||
assert to =~ "/auth/user/password/sign_in_with_token"
|
||||
end
|
||||
|
||||
test "password user with invalid credentials shows error via LiveView", %{conn: conn} do
|
||||
test "password user with invalid credentials shows error via LiveView", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
_user =
|
||||
create_test_user(%{
|
||||
email: "test@example.com",
|
||||
|
|
@ -55,7 +81,12 @@ defmodule MvWeb.AuthControllerTest do
|
|||
assert html =~ "Email or password was incorrect"
|
||||
end
|
||||
|
||||
test "password user with non-existent email shows error via LiveView", %{conn: conn} do
|
||||
test "password user with non-existent email shows error via LiveView", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/sign-in")
|
||||
|
||||
html =
|
||||
|
|
@ -69,7 +100,10 @@ defmodule MvWeb.AuthControllerTest do
|
|||
end
|
||||
|
||||
# Registration (LiveView)
|
||||
test "user can register with valid credentials via LiveView", %{conn: conn} do
|
||||
test "user can register with valid credentials via LiveView", %{conn: authenticated_conn} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/register")
|
||||
|
||||
{:error, {:redirect, %{to: to}}} =
|
||||
|
|
@ -82,7 +116,10 @@ defmodule MvWeb.AuthControllerTest do
|
|||
assert to =~ "/auth/user/password/sign_in_with_token"
|
||||
end
|
||||
|
||||
test "registration with existing email shows error via LiveView", %{conn: conn} do
|
||||
test "registration with existing email shows error via LiveView", %{conn: authenticated_conn} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
_user =
|
||||
create_test_user(%{
|
||||
email: "existing@example.com",
|
||||
|
|
@ -102,7 +139,10 @@ defmodule MvWeb.AuthControllerTest do
|
|||
assert html =~ "has already been taken"
|
||||
end
|
||||
|
||||
test "registration with weak password shows error via LiveView", %{conn: conn} do
|
||||
test "registration with weak password shows error via LiveView", %{conn: authenticated_conn} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/register")
|
||||
|
||||
html =
|
||||
|
|
@ -116,18 +156,27 @@ defmodule MvWeb.AuthControllerTest do
|
|||
end
|
||||
|
||||
# Access control
|
||||
test "unauthenticated user accessing protected route gets redirected to sign-in", %{conn: conn} do
|
||||
test "unauthenticated user accessing protected route gets redirected to sign-in", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
conn = get(conn, ~p"/members")
|
||||
assert redirected_to(conn) == ~p"/sign-in"
|
||||
end
|
||||
|
||||
test "authenticated user can access protected route", %{conn: conn} do
|
||||
conn = conn_with_oidc_user(conn)
|
||||
test "authenticated user can access protected route", %{conn: authenticated_conn} do
|
||||
conn = conn_with_oidc_user(authenticated_conn)
|
||||
conn = get(conn, ~p"/members")
|
||||
assert conn.status == 200
|
||||
end
|
||||
|
||||
test "password authenticated user can access protected route via LiveView", %{conn: conn} do
|
||||
test "password authenticated user can access protected route via LiveView", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
_user =
|
||||
create_test_user(%{
|
||||
email: "auth@example.com",
|
||||
|
|
@ -150,7 +199,12 @@ defmodule MvWeb.AuthControllerTest do
|
|||
end
|
||||
|
||||
# Edge cases
|
||||
test "user with nil oidc_id can still sign in with password via LiveView", %{conn: conn} do
|
||||
test "user with nil oidc_id can still sign in with password via LiveView", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
_user =
|
||||
create_test_user(%{
|
||||
email: "nil_oidc@example.com",
|
||||
|
|
@ -170,7 +224,12 @@ defmodule MvWeb.AuthControllerTest do
|
|||
assert to =~ "/auth/user/password/sign_in_with_token"
|
||||
end
|
||||
|
||||
test "user with empty string oidc_id is handled correctly via LiveView", %{conn: conn} do
|
||||
test "user with empty string oidc_id is handled correctly via LiveView", %{
|
||||
conn: authenticated_conn
|
||||
} do
|
||||
# Create unauthenticated conn for this test
|
||||
conn = build_unauthenticated_conn(authenticated_conn)
|
||||
|
||||
_user =
|
||||
create_test_user(%{
|
||||
email: "empty_oidc@example.com",
|
||||
|
|
|
|||
|
|
@ -11,20 +11,6 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
|
||||
require Ash.Query
|
||||
|
||||
setup %{conn: conn} do
|
||||
# Create admin user
|
||||
{:ok, user} =
|
||||
Mv.Accounts.User
|
||||
|> Ash.Changeset.for_create(:register_with_password, %{
|
||||
email: "admin#{System.unique_integer([:positive])}@mv.local",
|
||||
password: "testpassword123"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
authenticated_conn = conn_with_password_user(conn, user)
|
||||
%{conn: authenticated_conn, user: user}
|
||||
end
|
||||
|
||||
# Helper to create a membership fee type
|
||||
defp create_fee_type(attrs) do
|
||||
default_attrs = %{
|
||||
|
|
|
|||
|
|
@ -12,20 +12,6 @@ defmodule MvWeb.MemberLive.IndexMembershipFeeStatusTest do
|
|||
|
||||
require Ash.Query
|
||||
|
||||
setup %{conn: conn} do
|
||||
# Create admin user
|
||||
{:ok, user} =
|
||||
Mv.Accounts.User
|
||||
|> Ash.Changeset.for_create(:register_with_password, %{
|
||||
email: "admin#{System.unique_integer([:positive])}@mv.local",
|
||||
password: "testpassword123"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
conn = conn_with_password_user(conn, user)
|
||||
%{conn: conn, user: user}
|
||||
end
|
||||
|
||||
# Helper to create a membership fee type
|
||||
defp create_fee_type(attrs) do
|
||||
default_attrs = %{
|
||||
|
|
|
|||
|
|
@ -12,20 +12,6 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
|
|||
|
||||
require Ash.Query
|
||||
|
||||
setup do
|
||||
# Create admin user
|
||||
{:ok, user} =
|
||||
Mv.Accounts.User
|
||||
|> Ash.Changeset.for_create(:register_with_password, %{
|
||||
email: "admin#{System.unique_integer([:positive])}@mv.local",
|
||||
password: "testpassword123"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
conn = conn_with_password_user(build_conn(), user)
|
||||
%{conn: conn, user: user}
|
||||
end
|
||||
|
||||
# Helper to create a membership fee type
|
||||
defp create_fee_type(attrs) do
|
||||
default_attrs = %{
|
||||
|
|
|
|||
|
|
@ -12,20 +12,6 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
|
|||
|
||||
require Ash.Query
|
||||
|
||||
setup %{conn: conn} do
|
||||
# Create admin user
|
||||
{:ok, user} =
|
||||
Mv.Accounts.User
|
||||
|> Ash.Changeset.for_create(:register_with_password, %{
|
||||
email: "admin#{System.unique_integer([:positive])}@mv.local",
|
||||
password: "testpassword123"
|
||||
})
|
||||
|> Ash.create()
|
||||
|
||||
conn = conn_with_password_user(conn, user)
|
||||
%{conn: conn, user: user}
|
||||
end
|
||||
|
||||
# Helper to create a membership fee type
|
||||
defp create_fee_type(attrs) do
|
||||
default_attrs = %{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue