mitgliederverwaltung/test/accounts/registration_member_test.exs

107 lines
3.3 KiB
Elixir

defmodule Mv.Accounts.RegistrationMemberTest do
use Mv.DataCase
alias Mv.Accounts
alias Mv.Accounts.User.MemberCreationNotifier
describe "registration creates member" do
test "registering a user creates and assigns a new member via notifier" do
# Create user first
assert {:ok, user} =
Accounts.register_with_password(%{
email: "test@example.com",
password: "password123"
})
assert to_string(user.email) == "test@example.com"
# Manually trigger the notifier to test synchronously
notification = %Ash.Notifier.Notification{
action: %{name: :register_with_password},
resource: Mv.Accounts.User,
data: user
}
assert :ok = MemberCreationNotifier.notify(notification)
# Reload user to get updated member_id
user = Ash.reload!(user, domain: Mv.Accounts)
# User should have a member assigned
assert user.member_id != nil
# Member should exist and have correct data
member = Ash.get!(Mv.Membership.Member, user.member_id, domain: Mv.Membership)
assert member.email == "test@example.com"
assert member.first_name == "User"
assert member.last_name == "Generated"
end
test "notifier doesn't create member if user already has one" do
# Create a member first
{:ok, existing_member} =
Mv.Membership.create_member(%{
email: "existing@example.com",
first_name: "Existing",
last_name: "Member"
})
# Create user with existing member
assert {:ok, user} =
Accounts.create_user(%{
email: "existing@example.com",
member_id: existing_member.id
})
# Trigger notifier
notification = %Ash.Notifier.Notification{
action: %{name: :create_user},
resource: Mv.Accounts.User,
data: user
}
assert :ok = MemberCreationNotifier.notify(notification)
# User should still have the same member
user = Ash.reload!(user, domain: Mv.Accounts)
assert user.member_id == existing_member.id
# Should not have created a new member
member = Ash.get!(Mv.Membership.Member, user.member_id, domain: Mv.Membership)
assert member.first_name == "Existing"
assert member.last_name == "Member"
end
test "member data has correct default values" do
# Create user
assert {:ok, user} =
Accounts.create_user(%{
email: "member@example.com"
})
# Trigger notifier manually
notification = %Ash.Notifier.Notification{
action: %{name: :create_user},
resource: Mv.Accounts.User,
data: user
}
assert :ok = MemberCreationNotifier.notify(notification)
# Reload and check member
user = Ash.reload!(user, domain: Mv.Accounts)
member = Ash.get!(Mv.Membership.Member, user.member_id, domain: Mv.Membership)
# Email should match user
assert member.email == "member@example.com"
# Other fields should have default values
assert member.first_name == "User"
assert member.last_name == "Generated"
# Allow both false and nil
assert member.paid == false || member.paid == nil
assert member.phone_number == nil
assert member.birth_date == nil
end
end
end