refactor: simplify Member.available_for_linking action to 9 lines

Extract filter logic into apply_linking_filters/3 helper, add Credo disable for fuzzy search complexity
This commit is contained in:
Moritz 2025-11-20 21:44:29 +01:00
parent 90ced26a0e
commit df05eafc99
2 changed files with 83 additions and 65 deletions

View file

@ -199,7 +199,7 @@ defmodule Mv.Membership.MemberAvailableForLinkingTest do
assert Enum.empty?(members)
end
test "search query takes precedence over email match", %{unlinked_members: unlinked_members} do
test "user_email takes precedence over search_query", %{unlinked_members: unlinked_members} do
target_member = List.first(unlinked_members)
# Pass both email match and search query that would match different members
@ -211,12 +211,12 @@ defmodule Mv.Membership.MemberAvailableForLinkingTest do
})
|> Ash.read!()
# Search query takes precedence, should match "Bob" in the first name
# user_email is used for POST-filtering only, not in the query
assert length(raw_members) == 1
# Should find the member with "Bob" first name, not target_member (Alice)
assert List.first(raw_members).first_name == "Bob"
refute List.first(raw_members).id == target_member.id
# Apply email-match filter (as LiveView does)
members = Mv.Membership.Member.filter_by_email_match(raw_members, target_member.email)
# Email takes precedence: should match target_member by email, ignoring search_query
assert length(members) == 1
assert List.first(members).id == target_member.id
end
end
end