From f212b51f7f83f63cb59dff45f38f82480bd7bb14 Mon Sep 17 00:00:00 2001
From: cmrd Senya <senya@riseup.net>
Date: Sun, 1 Oct 2017 03:05:57 +0300
Subject: [PATCH] Check for user existence on aspect membership destruction

---
 app/models/aspect_membership.rb       | 4 +---
 spec/models/aspect_membership_spec.rb | 8 ++++++++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/app/models/aspect_membership.rb b/app/models/aspect_membership.rb
index 18c5869bbe..87bc6c5745 100644
--- a/app/models/aspect_membership.rb
+++ b/app/models/aspect_membership.rb
@@ -11,9 +11,7 @@ class AspectMembership < ApplicationRecord
   has_one :person, :through => :contact
 
   before_destroy do
-    if self.contact && self.contact.aspects.size == 1
-      self.user.disconnect(self.contact)
-    end
+    user&.disconnect(contact) if contact&.aspects&.size == 1
     true
   end
 
diff --git a/spec/models/aspect_membership_spec.rb b/spec/models/aspect_membership_spec.rb
index d9585c5541..d8f1de0fe1 100644
--- a/spec/models/aspect_membership_spec.rb
+++ b/spec/models/aspect_membership_spec.rb
@@ -26,5 +26,13 @@ describe AspectMembership, :type => :model do
       alice.add_contact_to_aspect(contact, aspect)
       aspect_membership.destroy
     end
+
+    it "doesn't fail destruction if the user entry was deleted in prior" do
+      aspect_membership.user.delete
+      id = aspect_membership.id
+
+      expect { AspectMembership.find(id).destroy }.not_to raise_error
+      expect(AspectMembership.where(id: id)).not_to exist
+    end
   end
 end
-- 
GitLab