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 committed by Simon
parent 0cedbe52f9
commit c715a45277
Signed by: simon
GPG key ID: 40E7A58C4AA1EDB2
75 changed files with 4686 additions and 2859 deletions

View file

@ -9,15 +9,23 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
alias Mv.Accounts
alias Mv.Membership
setup do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
%{actor: system_actor}
end
describe "available_for_linking with fuzzy search" do
test "finds member despite typo" do
test "finds member despite typo", %{actor: actor} do
# Create member with specific name
{:ok, member} =
Membership.create_member(%{
first_name: "Jonathan",
last_name: "Smith",
email: "jonathan@example.com"
})
Membership.create_member(
%{
first_name: "Jonathan",
last_name: "Smith",
email: "jonathan@example.com"
},
actor: actor
)
# Search with typo
query =
@ -27,21 +35,24 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
search_query: "Jonatan"
})
{:ok, members} = Ash.read(query, domain: Mv.Membership)
{:ok, members} = Ash.read(query, domain: Mv.Membership, actor: actor)
# Should find Jonathan despite typo
assert length(members) == 1
assert hd(members).id == member.id
end
test "finds member with partial match" do
test "finds member with partial match", %{actor: actor} do
# Create member
{: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: actor
)
# Search with partial
query =
@ -51,28 +62,34 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
search_query: "Alex"
})
{:ok, members} = Ash.read(query, domain: Mv.Membership)
{:ok, members} = Ash.read(query, domain: Mv.Membership, actor: actor)
# Should find Alexander
assert length(members) == 1
assert hd(members).id == member.id
end
test "email match overrides fuzzy search" do
test "email match overrides fuzzy search", %{actor: actor} do
# Create two members
{:ok, member1} =
Membership.create_member(%{
first_name: "John",
last_name: "Doe",
email: "john@example.com"
})
Membership.create_member(
%{
first_name: "John",
last_name: "Doe",
email: "john@example.com"
},
actor: actor
)
{:ok, _member2} =
Membership.create_member(%{
first_name: "Jane",
last_name: "Smith",
email: "jane@example.com"
})
Membership.create_member(
%{
first_name: "Jane",
last_name: "Smith",
email: "jane@example.com"
},
actor: actor
)
# Search with user_email that matches member1, but search_query that would match member2
query =
@ -82,7 +99,7 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
search_query: "Jane"
})
{:ok, members} = Ash.read(query, domain: Mv.Membership)
{:ok, members} = Ash.read(query, domain: Mv.Membership, actor: actor)
# Apply email filter
filtered_members = Mv.Membership.Member.filter_by_email_match(members, "john@example.com")
@ -92,14 +109,17 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
assert hd(filtered_members).id == member1.id
end
test "limits to 10 results" do
test "limits to 10 results", %{actor: actor} do
# Create 15 members with similar names
for i <- 1..15 do
Membership.create_member(%{
first_name: "Test#{i}",
last_name: "Member",
email: "test#{i}@example.com"
})
Membership.create_member(
%{
first_name: "Test#{i}",
last_name: "Member",
email: "test#{i}@example.com"
},
actor: actor
)
end
# Search for "Test"
@ -110,34 +130,43 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
search_query: "Test"
})
{:ok, members} = Ash.read(query, domain: Mv.Membership)
{:ok, members} = Ash.read(query, domain: Mv.Membership, actor: actor)
# Should return max 10 members
assert length(members) == 10
end
test "excludes linked members" do
test "excludes linked members", %{actor: actor} do
# Create member and link to user
{:ok, member1} =
Membership.create_member(%{
first_name: "Linked",
last_name: "Member",
email: "linked@example.com"
})
Membership.create_member(
%{
first_name: "Linked",
last_name: "Member",
email: "linked@example.com"
},
actor: actor
)
{:ok, _user} =
Accounts.create_user(%{
email: "user@example.com",
member: %{id: member1.id}
})
Accounts.create_user(
%{
email: "user@example.com",
member: %{id: member1.id}
},
actor: actor
)
# Create unlinked member
{:ok, member2} =
Membership.create_member(%{
first_name: "Unlinked",
last_name: "Member",
email: "unlinked@example.com"
})
Membership.create_member(
%{
first_name: "Unlinked",
last_name: "Member",
email: "unlinked@example.com"
},
actor: actor
)
# Search for "Member"
query =
@ -147,7 +176,7 @@ defmodule Mv.Membership.MemberFuzzySearchLinkingTest do
search_query: "Member"
})
{:ok, members} = Ash.read(query, domain: Mv.Membership)
{:ok, members} = Ash.read(query, domain: Mv.Membership, actor: actor)
# Should only return unlinked member
member_ids = Enum.map(members, & &1.id)