fix: member.email calculation
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Moritz 2025-08-05 17:38:47 +02:00
parent 2f140e8f10
commit 824a8f7476
Signed by: moritz
GPG key ID: 1020A035E5DD0824
2 changed files with 71 additions and 17 deletions

View file

@ -11,8 +11,16 @@ defmodule Mv.Membership.MemberEmailCalculation do
def calculate(records, _opts, _context) do def calculate(records, _opts, _context) do
Enum.map(records, fn record -> Enum.map(records, fn record ->
case record.user do case record.user do
%{email: user_email} when is_binary(user_email) -> user_email %{email: user_email} ->
_ -> record.member_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 end

View file

@ -6,8 +6,6 @@ defmodule Mv.Membership.MemberEmailTest do
test "email shows member_email when no user is assigned" do test "email shows member_email when no user is assigned" do
{:ok, member} = {:ok, member} =
Membership.create_member(%{ Membership.create_member(%{
first_name: "Test",
last_name: "Member",
member_email: "memberonly@example.com" member_email: "memberonly@example.com"
}) })
@ -21,8 +19,6 @@ defmodule Mv.Membership.MemberEmailTest do
test "updating member_email updates the computed email when no user is assigned" do test "updating member_email updates the computed email when no user is assigned" do
{:ok, member} = {:ok, member} =
Membership.create_member(%{ Membership.create_member(%{
first_name: "Update",
last_name: "Test",
member_email: "old@example.com" member_email: "old@example.com"
}) })
@ -38,16 +34,66 @@ defmodule Mv.Membership.MemberEmailTest do
test "member can be created without member_email" do test "member can be created without member_email" do
{:ok, member} = {:ok, member} =
Membership.create_member(%{ Membership.create_member(%{})
first_name: "No",
last_name: "Email"
})
# Load the email calculation # Load the email calculation with user relationship
member = Ash.load!(member, :email, domain: Membership) member = Ash.load!(member, [:email, user: [:email]], domain: Membership)
assert member.member_email == nil assert member.member_email == nil
assert member.email == nil assert member.email == nil
end 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 end