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