From f2d7f35b84b3b904aa5eaa6b426655f4e29f153a Mon Sep 17 00:00:00 2001 From: danielvincent Date: Wed, 4 Aug 2010 20:29:54 -0700 Subject: [PATCH] unfriend still not removing association from bad_friend --- app/models/person.rb | 3 +-- app/models/user.rb | 20 +++++++++------- spec/factories.rb | 2 +- spec/models/person_spec.rb | 49 +++++++++++++++++++++++++++++++------- 4 files changed, 55 insertions(+), 19 deletions(-) diff --git a/app/models/person.rb b/app/models/person.rb index ffa1f5b91..9c148b50a 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -33,8 +33,7 @@ class Person after_destroy :remove_all_traces, :remove_key - scope :friends, where(:_type => "Person", :active => true) - + scope :friends, where(:_type => "Person", :active => true) def real_name diff --git a/app/models/user.rb b/app/models/user.rb index 0fe65b719..503b93d9a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -73,18 +73,22 @@ class User end def unfriend(friend_id) - bad_friend = self.friends.first(:id => friend_id) - self.friends.detect{|x| x.id == friend_id}.delete + bad_friend = Person.first(:id => friend_id) + + + puts bad_friend.users.count + + self.friend_ids.delete( friend_id ) + self.save + + + + puts bad_friend.users.count + if bad_friend - - - bad - - Retraction.for(self).push_to_url(bad_friend.url) bad_friend.destroy if bad_friend.users.count == 0 end - self.save end def send_request(rel_hash) diff --git a/spec/factories.rb b/spec/factories.rb index 3a71bb2fc..284a67813 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -22,7 +22,7 @@ Factory.define :user do |u| u.password "bluepin7" u.password_confirmation "bluepin7" - u.person Factory.create(:person) + u.sequence(:person) {|p| Factory.create(:person, :email => "robert-#{p}@grimm.org")} end Factory.define :status_message do |m| diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index 15a53cf80..8e8a0f926 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -42,16 +42,49 @@ describe Person do s.comments.count.should == 4 end - it 'should let a user unfriend a person' do - user = Factory.create(:user) - person = Factory.create(:person) + describe "unfriending" do + it 'should delete an orphaned friend' do + user = Factory.create(:user) + user.save + + person = Factory.create(:person) - user.friends << person + person.users << user + user.friend_ids << person.id - user.friends.count.should == 1 - user.unfriend(person.id) - user.friends.count.should == 0 - Person.all.count.should == 1 + Person.all.count.should == 2 + user.friends.count.should == 1 + user.unfriend(person.id) + user.friends.count.should == 0 + Person.all.count.should == 1 + end + + it 'should not delete an un-orphaned friend' do + user_one = Factory.create(:user) + user_two = Factory.create(:user) + + user_one.save + user_two.save + + person = Factory.create(:person) + + person.users << user_one + person.users << user_two + + user_one.friend_ids << person.id + user_two.friend_ids << person.id + + Person.all.count.should == 3 + user_one.friends.count.should == 1 + user_two.friends.count.should == 1 + + user_one.unfriend(person.id) + + user_one.friends.count.should == 0 + user_two.friends.count.should == 1 + + Person.all.count.should == 2 + end end end