Fix Credo Design in test support and member index test
Add aliases in fixtures, conn_case, data_case. Use aliases in index_test.exs. Remove empty placeholder test files.
This commit is contained in:
parent
7a8b069834
commit
e537f4eb31
6 changed files with 132 additions and 118 deletions
|
|
@ -17,6 +17,14 @@ defmodule MvWeb.ConnCase do
|
|||
|
||||
use ExUnit.CaseTemplate
|
||||
|
||||
alias AshAuthentication.Plug.Helpers, as: AuthPlugHelpers
|
||||
alias Mv.Accounts
|
||||
alias Mv.Authorization.Actor
|
||||
alias Mv.DataCase
|
||||
alias Mv.Fixtures
|
||||
alias Mv.Helpers.SystemActor
|
||||
alias Phoenix.ConnTest
|
||||
|
||||
using do
|
||||
quote do
|
||||
# The default endpoint for testing
|
||||
|
|
@ -92,8 +100,8 @@ defmodule MvWeb.ConnCase do
|
|||
def sign_in_user_via_oidc(conn, user) do
|
||||
# Mock OIDC sign-in by creating a token directly
|
||||
conn
|
||||
|> Phoenix.ConnTest.init_test_session(%{})
|
||||
|> AshAuthentication.Plug.Helpers.store_in_session(user)
|
||||
|> ConnTest.init_test_session(%{})
|
||||
|> AuthPlugHelpers.store_in_session(user)
|
||||
end
|
||||
|
||||
@doc """
|
||||
|
|
@ -114,8 +122,8 @@ defmodule MvWeb.ConnCase do
|
|||
user = create_test_user(Map.merge(default_attrs, user_attrs))
|
||||
|
||||
# Create admin role and assign it
|
||||
admin_role = Mv.Fixtures.role_fixture("admin")
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
admin_role = Fixtures.role_fixture("admin")
|
||||
system_actor = SystemActor.get_system_actor()
|
||||
|
||||
{:ok, user} =
|
||||
user
|
||||
|
|
@ -124,7 +132,7 @@ defmodule MvWeb.ConnCase do
|
|||
|> Ash.update(actor: system_actor)
|
||||
|
||||
# Load role for authorization
|
||||
user_with_role = Ash.load!(user, :role, domain: Mv.Accounts, actor: system_actor)
|
||||
user_with_role = Ash.load!(user, :role, domain: Accounts, actor: system_actor)
|
||||
|
||||
sign_in_user_via_oidc(conn, user_with_role)
|
||||
end
|
||||
|
|
@ -134,8 +142,8 @@ defmodule MvWeb.ConnCase do
|
|||
"""
|
||||
def conn_with_password_user(conn, user) do
|
||||
conn
|
||||
|> Phoenix.ConnTest.init_test_session(%{})
|
||||
|> AshAuthentication.Plug.Helpers.store_in_session(user)
|
||||
|> ConnTest.init_test_session(%{})
|
||||
|> AuthPlugHelpers.store_in_session(user)
|
||||
end
|
||||
|
||||
@doc """
|
||||
|
|
@ -143,14 +151,14 @@ defmodule MvWeb.ConnCase do
|
|||
This is useful for tests that need full access to resources.
|
||||
"""
|
||||
def conn_with_admin_user(conn) do
|
||||
admin_user = Mv.Fixtures.user_with_role_fixture("admin")
|
||||
admin_user = Fixtures.user_with_role_fixture("admin")
|
||||
conn_with_password_user(conn, admin_user)
|
||||
end
|
||||
|
||||
setup tags do
|
||||
pid = Mv.DataCase.setup_sandbox(tags)
|
||||
pid = DataCase.setup_sandbox(tags)
|
||||
|
||||
conn = Phoenix.ConnTest.build_conn()
|
||||
conn = ConnTest.build_conn()
|
||||
# Set metadata for Phoenix.Ecto.SQL.Sandbox plug to allow LiveView processes
|
||||
# to share the test's database connection in async tests
|
||||
conn = Plug.Conn.put_private(conn, :ecto_sandbox, pid)
|
||||
|
|
@ -164,27 +172,27 @@ defmodule MvWeb.ConnCase do
|
|||
:admin ->
|
||||
# Create admin user with role for all tests (unless test overrides with its own user)
|
||||
# This ensures all tests have an authenticated user with proper authorization
|
||||
admin_user = Mv.Fixtures.user_with_role_fixture("admin")
|
||||
admin_user = Fixtures.user_with_role_fixture("admin")
|
||||
authenticated_conn = conn_with_password_user(conn, admin_user)
|
||||
{authenticated_conn, admin_user}
|
||||
|
||||
:member ->
|
||||
# Create member user for role-based testing
|
||||
# "member" role uses "own_data" permission set (Mitglied role)
|
||||
member_user = Mv.Fixtures.user_with_role_fixture("own_data")
|
||||
member_user = Fixtures.user_with_role_fixture("own_data")
|
||||
authenticated_conn = conn_with_password_user(conn, member_user)
|
||||
{authenticated_conn, member_user}
|
||||
|
||||
:read_only ->
|
||||
# Vorstand/Buchhaltung: can read members, groups; cannot edit or access admin/settings
|
||||
read_only_user = Mv.Fixtures.user_with_role_fixture("read_only")
|
||||
read_only_user = Mv.Authorization.Actor.ensure_loaded(read_only_user)
|
||||
read_only_user = Fixtures.user_with_role_fixture("read_only")
|
||||
read_only_user = Actor.ensure_loaded(read_only_user)
|
||||
authenticated_conn = conn_with_password_user(conn, read_only_user)
|
||||
{authenticated_conn, read_only_user}
|
||||
|
||||
:normal_user ->
|
||||
# Kassenwart: can read/update members, groups; cannot access users/settings/admin
|
||||
normal_user = Mv.Fixtures.user_with_role_fixture("normal_user")
|
||||
normal_user = Fixtures.user_with_role_fixture("normal_user")
|
||||
authenticated_conn = conn_with_password_user(conn, normal_user)
|
||||
{authenticated_conn, normal_user}
|
||||
|
||||
|
|
@ -194,7 +202,7 @@ defmodule MvWeb.ConnCase do
|
|||
|
||||
_other ->
|
||||
# Fallback: treat unknown role as admin for safety
|
||||
admin_user = Mv.Fixtures.user_with_role_fixture("admin")
|
||||
admin_user = Fixtures.user_with_role_fixture("admin")
|
||||
authenticated_conn = conn_with_password_user(conn, admin_user)
|
||||
{authenticated_conn, admin_user}
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue