This commit is contained in:
parent
2f140e8f10
commit
824a8f7476
2 changed files with 71 additions and 17 deletions
|
|
@ -11,9 +11,17 @@ defmodule Mv.Membership.MemberEmailCalculation do
|
|||
def calculate(records, _opts, _context) do
|
||||
Enum.map(records, fn record ->
|
||||
case record.user do
|
||||
%{email: user_email} when is_binary(user_email) -> user_email
|
||||
_ -> record.member_email
|
||||
%{email: user_email} ->
|
||||
# Convert Ash.CiString to string if needed
|
||||
if is_struct(user_email, Ash.CiString) do
|
||||
to_string(user_email)
|
||||
else
|
||||
user_email
|
||||
end
|
||||
|
||||
_ ->
|
||||
record.member_email
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,14 +6,12 @@ defmodule Mv.Membership.MemberEmailTest do
|
|||
test "email shows member_email when no user is assigned" do
|
||||
{:ok, member} =
|
||||
Membership.create_member(%{
|
||||
first_name: "Test",
|
||||
last_name: "Member",
|
||||
member_email: "memberonly@example.com"
|
||||
})
|
||||
|
||||
# Load the email calculation
|
||||
member = Ash.load!(member, :email, domain: Membership)
|
||||
|
||||
|
||||
assert member.member_email == "memberonly@example.com"
|
||||
assert member.email == "memberonly@example.com"
|
||||
end
|
||||
|
|
@ -21,8 +19,6 @@ defmodule Mv.Membership.MemberEmailTest do
|
|||
test "updating member_email updates the computed email when no user is assigned" do
|
||||
{:ok, member} =
|
||||
Membership.create_member(%{
|
||||
first_name: "Update",
|
||||
last_name: "Test",
|
||||
member_email: "old@example.com"
|
||||
})
|
||||
|
||||
|
|
@ -31,23 +27,73 @@ defmodule Mv.Membership.MemberEmailTest do
|
|||
|
||||
# Load the email calculation
|
||||
member = Ash.load!(member, :email, domain: Membership)
|
||||
|
||||
|
||||
assert member.member_email == "new@example.com"
|
||||
assert member.email == "new@example.com"
|
||||
end
|
||||
|
||||
test "member can be created without member_email" do
|
||||
{:ok, member} =
|
||||
Membership.create_member(%{
|
||||
first_name: "No",
|
||||
last_name: "Email"
|
||||
})
|
||||
Membership.create_member(%{})
|
||||
|
||||
# Load the email calculation with user relationship
|
||||
member = Ash.load!(member, [:email, user: [:email]], domain: Membership)
|
||||
|
||||
# Load the email calculation
|
||||
member = Ash.load!(member, :email, domain: Membership)
|
||||
|
||||
assert member.member_email == nil
|
||||
assert member.email == nil
|
||||
end
|
||||
|
||||
test "email shows user.email when user is assigned" do
|
||||
# Create a member first
|
||||
{:ok, member} =
|
||||
Membership.create_member(%{
|
||||
member_email: "member@example.com"
|
||||
})
|
||||
|
||||
# Create a user and assign it to the member
|
||||
{:ok, _user} =
|
||||
Mv.Accounts.create_user(%{
|
||||
email: "user@example.com",
|
||||
member_id: member.id
|
||||
})
|
||||
|
||||
# Load the email calculation with user relationship
|
||||
member = Ash.load!(member, [:email, user: [:email]], domain: Membership)
|
||||
|
||||
assert member.member_email == "member@example.com"
|
||||
# Should show user email
|
||||
assert member.email == "user@example.com"
|
||||
end
|
||||
|
||||
test "email updates when user email changes" do
|
||||
# Create a member
|
||||
{:ok, member} =
|
||||
Membership.create_member(%{
|
||||
member_email: "member@example.com"
|
||||
})
|
||||
|
||||
# Create a user
|
||||
{:ok, user} =
|
||||
Mv.Accounts.create_user(%{
|
||||
email: "old@example.com",
|
||||
member_id: member.id
|
||||
})
|
||||
|
||||
# Load the email calculation initially
|
||||
member = Ash.load!(member, [:email, user: [:email]], domain: Membership)
|
||||
assert member.email == "old@example.com"
|
||||
|
||||
# Update user email
|
||||
{:ok, _updated_user} =
|
||||
Mv.Accounts.update_user(user, %{
|
||||
email: "new@example.com"
|
||||
})
|
||||
|
||||
# Reload member and check email calculation
|
||||
member = Ash.reload!(member, domain: Membership)
|
||||
member = Ash.load!(member, [:email, user: [:email]], domain: Membership)
|
||||
|
||||
assert member.email == "new@example.com"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue