From 3c4b838b259644414990e43fb61ec1acd15c1c32 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Mon, 8 Dec 2025 15:11:58 -0500 Subject: [PATCH] Fix Identity destruction callback ordering ref: #2003 Co-authored-by: Dylan --- app/models/identity.rb | 2 +- test/models/identity_test.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/models/identity.rb b/app/models/identity.rb index ee4a323b2e..bb69734b4e 100644 --- a/app/models/identity.rb +++ b/app/models/identity.rb @@ -8,7 +8,7 @@ class Identity < ApplicationRecord has_one_attached :avatar - before_destroy :deactivate_users + before_destroy :deactivate_users, prepend: true validates :email_address, format: { with: URI::MailTo::EMAIL_REGEXP } normalizes :email_address, with: ->(value) { value.strip.downcase.presence } diff --git a/test/models/identity_test.rb b/test/models/identity_test.rb index 1c6c6b2589..5b5763ffd3 100644 --- a/test/models/identity_test.rb +++ b/test/models/identity_test.rb @@ -46,4 +46,19 @@ class IdentityTest < ActiveSupport::TestCase assert_equal identity.email_address, user.name end end + + test "destroy deactivates users before nullifying identity" do + identity = identities(:kevin) + user = users(:kevin) + + assert_predicate user, :active? + assert_predicate user.accesses, :any? + + identity.destroy! + user.reload + + assert_nil user.identity_id, "identity should be nullified" + assert_not_predicate user, :active? + assert_empty user.accesses, "user accesses should be removed" + end end