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:
parent
686f69c9e9
commit
0f48a9b15a
75 changed files with 4686 additions and 2859 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue