Sync user email to member when changing password (admin_set_password)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Add SyncUserEmailToMember change to admin_set_password so email+password updates in the user form sync the new email to the linked member.
This commit is contained in:
parent
d78032d50f
commit
2b4e1e3963
2 changed files with 42 additions and 0 deletions
|
|
@ -120,6 +120,43 @@ defmodule Mv.Accounts.UserEmailSyncTest do
|
|||
{:ok, member_after_unlink} = Ash.get(Mv.Membership.Member, member.id, actor: actor)
|
||||
assert member_after_unlink.email == "user@example.com"
|
||||
end
|
||||
|
||||
test "admin_set_password with email change syncs to linked member", %{actor: actor} do
|
||||
# Create member and user linked to it (with password so admin_set_password applies)
|
||||
{:ok, member} = Membership.create_member(@valid_member_attrs, actor: actor)
|
||||
|
||||
{:ok, user} =
|
||||
Mv.Accounts.User
|
||||
|> Ash.Changeset.for_create(:register_with_password, %{
|
||||
email: "user@example.com",
|
||||
password: "initialpass123"
|
||||
})
|
||||
|> Ash.create(actor: actor)
|
||||
|
||||
{:ok, user} =
|
||||
user
|
||||
|> Ash.Changeset.for_update(:update_user, %{member: %{id: member.id}})
|
||||
|> Ash.update(actor: actor)
|
||||
|
||||
assert user.member_id == member.id
|
||||
{:ok, m} = Ash.get(Mv.Membership.Member, member.id, actor: actor)
|
||||
assert m.email == "user@example.com"
|
||||
|
||||
# Change both email and password via admin_set_password (e.g. user form "Change Password")
|
||||
{:ok, updated_user} =
|
||||
user
|
||||
|> Ash.Changeset.for_update(:admin_set_password, %{
|
||||
email: "newemail@example.com",
|
||||
password: "newpassword123"
|
||||
})
|
||||
|> Ash.update(actor: actor)
|
||||
|
||||
assert to_string(updated_user.email) == "newemail@example.com"
|
||||
|
||||
# Member email must be synced (Option A: SyncUserEmailToMember on admin_set_password)
|
||||
{:ok, synced_member} = Ash.get(Mv.Membership.Member, member.id, actor: actor)
|
||||
assert synced_member.email == "newemail@example.com"
|
||||
end
|
||||
end
|
||||
|
||||
describe "AshAuthentication compatibility" do
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue