Add actor parameter to all tests requiring authorization

This commit adds actor: system_actor to all Ash operations in tests that
require authorization.
This commit is contained in:
Moritz 2026-01-23 20:00:24 +01:00
parent 686f69c9e9
commit 0f48a9b15a
Signed by: moritz
GPG key ID: 1020A035E5DD0824
75 changed files with 4686 additions and 2859 deletions

View file

@ -70,12 +70,17 @@ defmodule MvWeb.UserLive.FormMemberDropdownTest do
test "links user and member with identical email successfully", %{conn: conn} do
conn = setup_admin_conn(conn)
system_actor = Mv.Helpers.SystemActor.get_system_actor()
{:ok, member} =
Membership.create_member(%{
first_name: "David",
last_name: "Miller",
email: "david@example.com"
})
Membership.create_member(
%{
first_name: "David",
last_name: "Miller",
email: "david@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -106,12 +111,17 @@ defmodule MvWeb.UserLive.FormMemberDropdownTest do
test "shows member with same email in dropdown", %{conn: conn} do
conn = setup_admin_conn(conn)
system_actor = Mv.Helpers.SystemActor.get_system_actor()
{:ok, _member} =
Membership.create_member(%{
first_name: "Emma",
last_name: "Davis",
email: "emma@example.com"
})
Membership.create_member(
%{
first_name: "Emma",
last_name: "Davis",
email: "emma@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -135,13 +145,18 @@ defmodule MvWeb.UserLive.FormMemberDropdownTest do
# Helper functions
defp create_unlinked_members(count) do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
for i <- 1..count do
{:ok, member} =
Membership.create_member(%{
first_name: "FirstName#{i}",
last_name: "LastName#{i}",
email: "member#{i}@example.com"
})
Membership.create_member(
%{
first_name: "FirstName#{i}",
last_name: "LastName#{i}",
email: "member#{i}@example.com"
},
actor: system_actor
)
member
end

View file

@ -18,14 +18,18 @@ defmodule MvWeb.UserLive.FormMemberSearchTest do
describe "fuzzy search" do
test "finds member with exact name", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, _member} =
Membership.create_member(%{
first_name: "Jonathan",
last_name: "Smith",
email: "jonathan.smith@example.com"
})
Membership.create_member(
%{
first_name: "Jonathan",
last_name: "Smith",
email: "jonathan.smith@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -41,14 +45,18 @@ defmodule MvWeb.UserLive.FormMemberSearchTest do
end
test "finds member with typo (Jon finds Jonathan)", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, _member} =
Membership.create_member(%{
first_name: "Jonathan",
last_name: "Smith",
email: "jonathan.smith@example.com"
})
Membership.create_member(
%{
first_name: "Jonathan",
last_name: "Smith",
email: "jonathan.smith@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -65,14 +73,18 @@ defmodule MvWeb.UserLive.FormMemberSearchTest do
end
test "finds member with partial substring", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, _member} =
Membership.create_member(%{
first_name: "Alexander",
last_name: "Williams",
email: "alex@example.com"
})
Membership.create_member(
%{
first_name: "Alexander",
last_name: "Williams",
email: "alex@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -87,14 +99,18 @@ defmodule MvWeb.UserLive.FormMemberSearchTest do
end
test "shows partial match with similar names", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, _member} =
Membership.create_member(%{
first_name: "Johnny",
last_name: "Doeson",
email: "johnny@example.com"
})
Membership.create_member(
%{
first_name: "Johnny",
last_name: "Doeson",
email: "johnny@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")

View file

@ -19,14 +19,18 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
describe "member selection" do
test "input field shows selected member name", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, member} =
Membership.create_member(%{
first_name: "Alice",
last_name: "Johnson",
email: "alice@example.com"
})
Membership.create_member(
%{
first_name: "Alice",
last_name: "Johnson",
email: "alice@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -47,14 +51,18 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
end
test "confirmation box appears", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, member} =
Membership.create_member(%{
first_name: "Bob",
last_name: "Williams",
email: "bob@example.com"
})
Membership.create_member(
%{
first_name: "Bob",
last_name: "Williams",
email: "bob@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -77,14 +85,18 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
end
test "hidden input stores member ID", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
{:ok, member} =
Membership.create_member(%{
first_name: "Charlie",
last_name: "Brown",
email: "charlie@example.com"
})
Membership.create_member(
%{
first_name: "Charlie",
last_name: "Brown",
email: "charlie@example.com"
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/new")
@ -105,20 +117,27 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
describe "unlink workflow" do
test "unlink hides dropdown", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
# Create user with linked member
{:ok, member} =
Membership.create_member(%{
first_name: "Frank",
last_name: "Wilson",
email: "frank@example.com"
})
Membership.create_member(
%{
first_name: "Frank",
last_name: "Wilson",
email: "frank@example.com"
},
actor: system_actor
)
{:ok, user} =
Accounts.create_user(%{
email: "frank@example.com",
member: %{id: member.id}
})
Accounts.create_user(
%{
email: "frank@example.com",
member: %{id: member.id}
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/#{user.id}/edit")
@ -134,20 +153,27 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
end
test "unlink shows warning", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
# Create user with linked member
{:ok, member} =
Membership.create_member(%{
first_name: "Grace",
last_name: "Taylor",
email: "grace@example.com"
})
Membership.create_member(
%{
first_name: "Grace",
last_name: "Taylor",
email: "grace@example.com"
},
actor: system_actor
)
{:ok, user} =
Accounts.create_user(%{
email: "grace@example.com",
member: %{id: member.id}
})
Accounts.create_user(
%{
email: "grace@example.com",
member: %{id: member.id}
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/#{user.id}/edit")
@ -164,20 +190,27 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
end
test "unlink disables input", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
# Create user with linked member
{:ok, member} =
Membership.create_member(%{
first_name: "Henry",
last_name: "Anderson",
email: "henry@example.com"
})
Membership.create_member(
%{
first_name: "Henry",
last_name: "Anderson",
email: "henry@example.com"
},
actor: system_actor
)
{:ok, user} =
Accounts.create_user(%{
email: "henry@example.com",
member: %{id: member.id}
})
Accounts.create_user(
%{
email: "henry@example.com",
member: %{id: member.id}
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/#{user.id}/edit")
@ -193,20 +226,27 @@ defmodule MvWeb.UserLive.FormMemberSelectionTest do
end
test "save re-enables member selection", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
conn = setup_admin_conn(conn)
# Create user with linked member
{:ok, member} =
Membership.create_member(%{
first_name: "Isabel",
last_name: "Martinez",
email: "isabel@example.com"
})
Membership.create_member(
%{
first_name: "Isabel",
last_name: "Martinez",
email: "isabel@example.com"
},
actor: system_actor
)
{:ok, user} =
Accounts.create_user(%{
email: "isabel@example.com",
member: %{id: member.id}
})
Accounts.create_user(
%{
email: "isabel@example.com",
member: %{id: member.id}
},
actor: system_actor
)
{:ok, view, _html} = live(conn, ~p"/users/#{user.id}/edit")

View file

@ -75,11 +75,14 @@ defmodule MvWeb.UserLive.FormTest do
|> form("#user-form", user: %{email: "storetest@example.com"})
|> render_submit()
system_actor = Mv.Helpers.SystemActor.get_system_actor()
user =
Ash.get!(
Mv.Accounts.User,
[email: Ash.CiString.new("storetest@example.com")],
domain: Mv.Accounts
domain: Mv.Accounts,
actor: system_actor
)
assert to_string(user.email) == "storetest@example.com"
@ -101,11 +104,14 @@ defmodule MvWeb.UserLive.FormTest do
)
|> render_submit()
system_actor = Mv.Helpers.SystemActor.get_system_actor()
user =
Ash.get!(
Mv.Accounts.User,
[email: Ash.CiString.new("passwordstoretest@example.com")],
domain: Mv.Accounts
domain: Mv.Accounts,
actor: system_actor
)
assert user.hashed_password != nil
@ -181,7 +187,8 @@ defmodule MvWeb.UserLive.FormTest do
assert_redirected(view, "/users")
updated_user = Ash.reload!(user, domain: Mv.Accounts)
system_actor = Mv.Helpers.SystemActor.get_system_actor()
updated_user = Ash.reload!(user, domain: Mv.Accounts, actor: system_actor)
assert to_string(updated_user.email) == "new@example.com"
assert updated_user.hashed_password == original_password
end
@ -204,7 +211,8 @@ defmodule MvWeb.UserLive.FormTest do
assert_redirected(view, "/users")
updated_user = Ash.reload!(user, domain: Mv.Accounts)
system_actor = Mv.Helpers.SystemActor.get_system_actor()
updated_user = Ash.reload!(user, domain: Mv.Accounts, actor: system_actor)
assert updated_user.hashed_password != original_password
assert String.starts_with?(updated_user.hashed_password, "$2b$")
end
@ -285,17 +293,24 @@ defmodule MvWeb.UserLive.FormTest do
describe "member linking - display" do
test "shows linked member with unlink button when user has member", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
# Create member
{:ok, member} =
Mv.Membership.create_member(%{
first_name: "John",
last_name: "Doe",
email: "john@example.com"
})
Mv.Membership.create_member(
%{
first_name: "John",
last_name: "Doe",
email: "john@example.com"
},
actor: system_actor
)
# Create user linked to member
user = create_test_user(%{email: "user@example.com"})
{:ok, _updated_user} = Mv.Accounts.update_user(user, %{member: %{id: member.id}})
{:ok, _updated_user} =
Mv.Accounts.update_user(user, %{member: %{id: member.id}}, actor: system_actor)
# Load form
{:ok, view, html} = setup_live_view(conn, "/users/#{user.id}/edit")
@ -322,13 +337,18 @@ defmodule MvWeb.UserLive.FormTest do
describe "member linking - workflow" do
test "selecting member and saving links member to user", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
# Create unlinked member
{:ok, member} =
Mv.Membership.create_member(%{
first_name: "Jane",
last_name: "Smith",
email: "jane@example.com"
})
Mv.Membership.create_member(
%{
first_name: "Jane",
last_name: "Smith",
email: "jane@example.com"
},
actor: system_actor
)
# Create user without member
user = create_test_user(%{email: "user@example.com"})
@ -345,22 +365,35 @@ defmodule MvWeb.UserLive.FormTest do
assert_redirected(view, "/users")
# Verify member is linked
updated_user = Ash.get!(Mv.Accounts.User, user.id, domain: Mv.Accounts, load: [:member])
system_actor = Mv.Helpers.SystemActor.get_system_actor()
updated_user =
Ash.get!(Mv.Accounts.User, user.id,
domain: Mv.Accounts,
actor: system_actor,
load: [:member]
)
assert updated_user.member.id == member.id
end
test "unlinking member and saving removes member from user", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
# Create member
{:ok, member} =
Mv.Membership.create_member(%{
first_name: "Bob",
last_name: "Wilson",
email: "bob@example.com"
})
Mv.Membership.create_member(
%{
first_name: "Bob",
last_name: "Wilson",
email: "bob@example.com"
},
actor: system_actor
)
# Create user linked to member
user = create_test_user(%{email: "user@example.com"})
{:ok, _} = Mv.Accounts.update_user(user, %{member: %{id: member.id}})
{:ok, _} = Mv.Accounts.update_user(user, %{member: %{id: member.id}}, actor: system_actor)
{:ok, view, _html} = setup_live_view(conn, "/users/#{user.id}/edit")
@ -375,7 +408,15 @@ defmodule MvWeb.UserLive.FormTest do
assert_redirected(view, "/users")
# Verify member is unlinked
updated_user = Ash.get!(Mv.Accounts.User, user.id, domain: Mv.Accounts, load: [:member])
system_actor = Mv.Helpers.SystemActor.get_system_actor()
updated_user =
Ash.get!(Mv.Accounts.User, user.id,
domain: Mv.Accounts,
actor: system_actor,
load: [:member]
)
assert is_nil(updated_user.member)
end
end

View file

@ -407,17 +407,24 @@ defmodule MvWeb.UserLive.IndexTest do
describe "member linking display" do
test "displays linked member name in user list", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
# Create member
{:ok, member} =
Mv.Membership.create_member(%{
first_name: "Alice",
last_name: "Johnson",
email: "alice@example.com"
})
Mv.Membership.create_member(
%{
first_name: "Alice",
last_name: "Johnson",
email: "alice@example.com"
},
actor: system_actor
)
# Create user linked to member
user = create_test_user(%{email: "user@example.com"})
{:ok, _updated_user} = Mv.Accounts.update_user(user, %{member: %{id: member.id}})
{:ok, _updated_user} =
Mv.Accounts.update_user(user, %{member: %{id: member.id}}, actor: system_actor)
# Create another user without member
_unlinked_user = create_test_user(%{email: "unlinked@example.com"})