diff --git a/lib/diaspora/user/connecting.rb b/lib/diaspora/user/connecting.rb index 444380f97..0a7c2deab 100644 --- a/lib/diaspora/user/connecting.rb +++ b/lib/diaspora/user/connecting.rb @@ -59,16 +59,7 @@ module Diaspora #response from a contact request you sent if original_request = original_request(contact_request) - destination_aspect = self.aspect_by_id(original_request.into_id) - activate_contact(contact_request.from, destination_aspect) - Rails.logger.info("#{self.real_name}'s contact request has been accepted") - - contact_request.destroy - - pending_requests.delete(original_request) - original_request.destroy - self.save - Request.send_request_accepted(self, contact_request.from, destination_aspect) + receive_request_acceptance(contact_request, original_request) #this is a new contact request elsif !request_from_me?(contact_request) @@ -83,6 +74,18 @@ module Diaspora contact_request end + def receive_request_acceptance(received_request, sent_request) + destination_aspect = self.aspect_by_id(sent_request.into_id) + activate_contact(received_request.from, destination_aspect) + Rails.logger.info("#{self.real_name}'s contact request has been accepted") + + received_request.destroy + pending_requests.delete(sent_request) + sent_request.destroy + self.save + Request.send_request_accepted(self, received_request.from, destination_aspect) + end + def disconnect(bad_contact) Rails.logger.info("#{self.real_name} is disconnecting #{bad_contact.inspect}") retraction = Retraction.for(self) diff --git a/spec/models/aspect_spec.rb b/spec/models/aspect_spec.rb index a0e6b5f3f..9eabde8be 100644 --- a/spec/models/aspect_spec.rb +++ b/spec/models/aspect_spec.rb @@ -179,7 +179,6 @@ describe Aspect do it 'deletes a user from the aspect' do user.add_person_to_aspect(user2.person.id, aspect1.id) user.reload - aspect1.reload.contacts.include?(contact).should be true user.delete_person_from_aspect(user2.person.id, aspect1.id) user.reload aspect1.reload.contacts.include?(contact).should be false @@ -188,6 +187,15 @@ describe Aspect do it 'should check to make sure you have the aspect ' do proc{user.delete_person_from_aspect(user2.person.id, aspect2.id) }.should raise_error /Can not delete a person from an aspect you do not own/ end + + it 'deletes no posts' do + user.add_person_to_aspect(user2.person.id, aspect1.id) + user.reload + user2.post(:status_message, :message => "Hey Dude", :to => aspect2.id) + lambda{ + user.delete_person_from_aspect(user2.person.id, aspect1.id) + }.should_not change(Post, :count) + end end context 'moving and removing posts' do diff --git a/spec/models/user/connecting_spec.rb b/spec/models/user/connecting_spec.rb index 345fb22c7..b7171f6ef 100644 --- a/spec/models/user/connecting_spec.rb +++ b/spec/models/user/connecting_spec.rb @@ -36,13 +36,27 @@ describe Diaspora::UserModules::Connecting do user.receive_contact_request(r) user.reload.pending_requests.should include r end + end - it 'should autoaccept a request the user sent' do - request = user.send_contact_request_to(user2.person, aspect) - user.contact_for(user2.person).should be_nil - user.receive_request(request.reverse_for(user2), user2.person) + describe '#receive_request_accepted' do + before do + @original_request = user.send_contact_request_to(user2.person, aspect) + @acceptance = @original_request.reverse_for(user2) + end + it 'connects to the acceptor' do + user.receive_request(@acceptance, user2.person) user.contact_for(user2.person).should_not be_nil end + it 'deletes the original request' do + user.receive_request(@acceptance, user2.person) + user.pending_requests.include?(@original_request).should be_false + Request.find(@original_request.id).should be_nil + end + it 'deletes the acceptance' do + user.receive_request(@acceptance, user2.person) + user.pending_requests.include?(@acceptance).should be_false + Request.find(@acceptance.id).should be_nil + end end context 'requests that cross paths' do