WIP feat: member user relation
This commit is contained in:
parent
997691746a
commit
4e6f5a517a
35 changed files with 1208 additions and 192 deletions
107
test/accounts/registration_member_test.exs
Normal file
107
test/accounts/registration_member_test.exs
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue