From 08739ad23d71dcb92f740f15ee43bdf72f370cd3 Mon Sep 17 00:00:00 2001
From: ilya <ilya@laptop.(none)>
Date: Wed, 18 Aug 2010 15:23:46 -0700
Subject: [PATCH] DG IZ; retractions remove post references in group objects

---
 app/models/user.rb        |  4 ++++
 spec/models/group_spec.rb | 29 ++++++++++++++++++++++++-----
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/app/models/user.rb b/app/models/user.rb
index 012e6c9233..1f82115ae6 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -243,6 +243,10 @@ class User
 
       else
         object.perform self.id
+        groups = self.groups_with_person(object.person)
+        groups.each{ |group| group.post_ids.delete(ensure_bson(object.post_id))
+                             group.save
+        }
       end
     elsif object.is_a? Request
       person = Diaspora::Parser.get_or_create_person_object_from_xml( xml )
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 26f3397d45..15de4bdbe4 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -55,16 +55,16 @@ describe Group do
   describe 'posting' do
     
     it 'should add post to group via post method' do
-      @group = @user.group(:name => 'losers', :people => [@friend])
+      group = @user.group(:name => 'losers', :people => [@friend])
 
-      status_message = @user.post( :status_message, :message => "hey", :group_id => @group.id )
+      status_message = @user.post( :status_message, :message => "hey", :group_id => group.id )
       
-      @group.reload
-      @group.posts.include?(status_message).should be true
+      group.reload
+      group.posts.include?(status_message).should be true
     end
 
     it 'should add post to group via receive method' do
-      group = @user.group(:name => 'losers')
+      group  = @user.group(:name => 'losers')
       group2 = @user2.group(:name => 'winners')
       friend_users(@user, group, @user2, group2)
 
@@ -77,5 +77,24 @@ describe Group do
       @user.visible_posts(:by_members_of => group).include?(message).should be true
     end
 
+    it 'should retract the post from the groups as well' do 
+      group  = @user.group(:name => 'losers')
+      group2 = @user2.group(:name => 'winners')
+      friend_users(@user, group, @user2, group2)
+
+      message = @user2.post(:status_message, :message => "Hey Dude")
+      
+      @user.receive message.to_diaspora_xml
+      group.reload
+  
+      group.post_ids.include?(message.id).should be true
+
+      retraction = @user2.retract(message)
+      @user.receive retraction.to_diaspora_xml
+
+      group.reload
+      group.post_ids.include?(message.id).should be false
+    end
   end
+
 end
-- 
GitLab