This commit is contained in:
parent
f8e1d39964
commit
a62fceaf28
1 changed files with 46 additions and 18 deletions
|
|
@ -16,9 +16,13 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
|
||||
describe "Relationships" do
|
||||
test "member has many_to_many groups relationship (load with preloading)", %{actor: actor} do
|
||||
{:ok, member} = Membership.create_member(%{email: "test@test.com"}, actor: actor)
|
||||
{:ok, group1} = Membership.create_group(%{name: "Group One"}, actor: actor)
|
||||
{:ok, group2} = Membership.create_group(%{name: "Group Two"}, actor: actor)
|
||||
{:ok, member} = Membership.create_member(%{email: unique_email("member")}, actor: actor)
|
||||
|
||||
{:ok, group1} =
|
||||
Membership.create_group(%{name: unique_group_name("Group One")}, actor: actor)
|
||||
|
||||
{:ok, group2} =
|
||||
Membership.create_group(%{name: unique_group_name("Group Two")}, actor: actor)
|
||||
|
||||
{:ok, _mg1} =
|
||||
Membership.create_member_group(%{member_id: member.id, group_id: group1.id},
|
||||
|
|
@ -40,9 +44,11 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
end
|
||||
|
||||
test "load multiple members with groups preloaded (N+1 prevention)", %{actor: actor} do
|
||||
{:ok, member1} = Membership.create_member(%{email: "member1@test.com"}, actor: actor)
|
||||
{:ok, member2} = Membership.create_member(%{email: "member2@test.com"}, actor: actor)
|
||||
{:ok, group} = Membership.create_group(%{name: "Test Group"}, actor: actor)
|
||||
{:ok, member1} = Membership.create_member(%{email: unique_email("member1")}, actor: actor)
|
||||
{:ok, member2} = Membership.create_member(%{email: unique_email("member2")}, actor: actor)
|
||||
|
||||
{:ok, group} =
|
||||
Membership.create_group(%{name: unique_group_name("Test Group")}, actor: actor)
|
||||
|
||||
{:ok, _mg1} =
|
||||
Membership.create_member_group(%{member_id: member1.id, group_id: group.id},
|
||||
|
|
@ -70,8 +76,10 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
|
||||
describe "Member-Group Association Operations" do
|
||||
test "add member to group via Ash API", %{actor: actor} do
|
||||
{:ok, member} = Membership.create_member(%{email: "test@test.com"}, actor: actor)
|
||||
{:ok, group} = Membership.create_group(%{name: "Test Group"}, actor: actor)
|
||||
{:ok, member} = Membership.create_member(%{email: unique_email("member")}, actor: actor)
|
||||
|
||||
{:ok, group} =
|
||||
Membership.create_group(%{name: unique_group_name("Test Group")}, actor: actor)
|
||||
|
||||
assert {:ok, member_group} =
|
||||
Membership.create_member_group(%{member_id: member.id, group_id: group.id},
|
||||
|
|
@ -83,8 +91,10 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
end
|
||||
|
||||
test "remove member from group via Ash API", %{actor: actor} do
|
||||
{:ok, member} = Membership.create_member(%{email: "test@test.com"}, actor: actor)
|
||||
{:ok, group} = Membership.create_group(%{name: "Test Group"}, actor: actor)
|
||||
{:ok, member} = Membership.create_member(%{email: unique_email("member")}, actor: actor)
|
||||
|
||||
{:ok, group} =
|
||||
Membership.create_group(%{name: unique_group_name("Test Group")}, actor: actor)
|
||||
|
||||
{:ok, member_group} =
|
||||
Membership.create_member_group(%{member_id: member.id, group_id: group.id},
|
||||
|
|
@ -107,10 +117,16 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
end
|
||||
|
||||
test "add member to multiple groups in single operation", %{actor: actor} do
|
||||
{:ok, member} = Membership.create_member(%{email: "test@test.com"}, actor: actor)
|
||||
{:ok, group1} = Membership.create_group(%{name: "Group One"}, actor: actor)
|
||||
{:ok, group2} = Membership.create_group(%{name: "Group Two"}, actor: actor)
|
||||
{:ok, group3} = Membership.create_group(%{name: "Group Three"}, actor: actor)
|
||||
{:ok, member} = Membership.create_member(%{email: unique_email("member")}, actor: actor)
|
||||
|
||||
{:ok, group1} =
|
||||
Membership.create_group(%{name: unique_group_name("Group One")}, actor: actor)
|
||||
|
||||
{:ok, group2} =
|
||||
Membership.create_group(%{name: unique_group_name("Group Two")}, actor: actor)
|
||||
|
||||
{:ok, group3} =
|
||||
Membership.create_group(%{name: unique_group_name("Group Three")}, actor: actor)
|
||||
|
||||
# Add to all groups
|
||||
{:ok, _mg1} =
|
||||
|
|
@ -138,8 +154,10 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
|
||||
describe "Edge Cases" do
|
||||
test "adding member to same group twice fails (duplicate prevention)", %{actor: actor} do
|
||||
{:ok, member} = Membership.create_member(%{email: "test@test.com"}, actor: actor)
|
||||
{:ok, group} = Membership.create_group(%{name: "Test Group"}, actor: actor)
|
||||
{:ok, member} = Membership.create_member(%{email: unique_email("member")}, actor: actor)
|
||||
|
||||
{:ok, group} =
|
||||
Membership.create_group(%{name: unique_group_name("Test Group")}, actor: actor)
|
||||
|
||||
{:ok, _mg1} =
|
||||
Membership.create_member_group(%{member_id: member.id, group_id: group.id},
|
||||
|
|
@ -154,8 +172,10 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
end
|
||||
|
||||
test "removing member from group they're not in (idempotent, no error)", %{actor: actor} do
|
||||
{:ok, member} = Membership.create_member(%{email: "test@test.com"}, actor: actor)
|
||||
{:ok, group} = Membership.create_group(%{name: "Test Group"}, actor: actor)
|
||||
{:ok, member} = Membership.create_member(%{email: unique_email("member")}, actor: actor)
|
||||
|
||||
{:ok, group} =
|
||||
Membership.create_group(%{name: unique_group_name("Test Group")}, actor: actor)
|
||||
|
||||
# Verify no association exists
|
||||
{:ok, nil} =
|
||||
|
|
@ -194,4 +214,12 @@ defmodule Mv.Membership.MemberGroupsRelationshipTest do
|
|||
assert result == :ok || match?({:error, _}, result)
|
||||
end
|
||||
end
|
||||
|
||||
defp unique_email(prefix) do
|
||||
"#{prefix}-#{System.unique_integer([:positive])}@test.com"
|
||||
end
|
||||
|
||||
defp unique_group_name(prefix) do
|
||||
"#{prefix} #{System.unique_integer([:positive])}"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue