diff --git a/app/models/user.rb b/app/models/user.rb index 1896af90c..d7184cf8f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,7 +40,7 @@ class User ######### Friend Requesting ########### def send_friend_request_to(friend_url) - unless self.friends.detect{ |x| x.url == friend_url} + unless self.friends.detect{ |x| x.receive_url == friend_url} p = Request.instantiate(:to => friend_url, :from => self.person) if p.save self.pending_requests << p @@ -76,8 +76,7 @@ class User def receive_friend_request(friend_request) Rails.logger.debug("receiving friend request #{friend_request.to_json}") - - if Request.where(:callback_url => person.receive_url, :destination_url => person.receive_url).first + if pending_requests.detect{|req| (req.callback_url == person.receive_url) && (req.destination_url == person.receive_url)} activate_friend friend_request.person Rails.logger.debug("#{self.real_name}'s friend request has been accepted") friend_request.destroy diff --git a/lib/diaspora/parser.rb b/lib/diaspora/parser.rb index 3a12e3a85..c5fdf3ccb 100644 --- a/lib/diaspora/parser.rb +++ b/lib/diaspora/parser.rb @@ -60,17 +60,17 @@ module Diaspora objects = parse_objects_from_xml(xml) objects.each do |p| Rails.logger.debug("Receiving object:\n#{p.inspect}") + if p.is_a? Retraction Rails.logger.debug "Got a retraction for #{p.post_id}" p.perform elsif p.is_a? Request - puts user.pending_requests.count user.receive_friend_request(p) - puts user.pending_requests.count elsif p.is_a? Profile p.save + elsif p.respond_to?(:person) && !(p.person.nil?) && !(p.person.is_a? User) Rails.logger.debug("Saving object with success: #{p.save}") end diff --git a/spec/helpers/requests_helper_spec.rb b/spec/helpers/requests_helper_spec.rb index 6f5b37442..8419bd566 100644 --- a/spec/helpers/requests_helper_spec.rb +++ b/spec/helpers/requests_helper_spec.rb @@ -20,7 +20,7 @@ describe RequestsHelper do end it 'should return the correct tag and url for a given address' do - relationship_flow('tom@tom.joindiaspora.com')[:friend].should == 'http://tom.joindiaspora.com/' + relationship_flow('tom@tom.joindiaspora.com')[:friend].include?("receive/user").should == true end end diff --git a/spec/lib/diaspora_parser_spec.rb b/spec/lib/diaspora_parser_spec.rb index 02d0728e9..4ec4815c7 100644 --- a/spec/lib/diaspora_parser_spec.rb +++ b/spec/lib/diaspora_parser_spec.rb @@ -3,6 +3,8 @@ require File.dirname(__FILE__) + '/../spec_helper' include ApplicationHelper include Diaspora::Parser + + describe Diaspora::Parser do before do @user = Factory.create(:user, :email => "bob@aol.com") @@ -123,7 +125,8 @@ describe Diaspora::Parser do Person.all.count.should be 2 Person.first(:_id => original_person_id).serialized_key.include?("PUBLIC").should be true - Person.where(:url => request.callback_url).first.id.should == original_person_id + url = "http://" + request.callback_url.split("/")[2] + "/" + Person.where(:url => url).first.id.should == original_person_id end it "should not create a new person if the person is already here" do @@ -140,19 +143,23 @@ describe Diaspora::Parser do @user2.reload @user2.person.reload - puts @user2.inspect - puts @user2.person.inspect @user2.person.serialized_key.include?("PRIVATE").should be true - Person.where(:url => request.callback_url).first.id.should == original_person_id + url = "http://" + request.callback_url.split("/")[2] + "/" + Person.where(:url => url).first.id.should == original_person_id end it "should activate the Person if I initiated a request to that url" do - request = Request.instantiate(:to => @person.url, :from => @user).save + request = Request.instantiate(:to => @person.receive_url, :from => @user) + request.save + @user.pending_requests << request + @user.save + request_remote = Request.new - request_remote.destination_url = @user.url - request_remote.callback_url = @user.url + request_remote.id = request.id + request_remote.destination_url = @user.receive_url + request_remote.callback_url = @user.receive_url request_remote.person = @person request_remote.exported_key = @person.export_key @@ -163,6 +170,7 @@ describe Diaspora::Parser do store_objects_from_xml(xml, @user) new_person = Person.first(:url => @person.url) new_person.nil?.should be false + @user.reload @user.friends.include?(new_person).should be true end diff --git a/spec/models/comments_spec.rb b/spec/models/comments_spec.rb index 810b6dfc5..3be395644 100644 --- a/spec/models/comments_spec.rb +++ b/spec/models/comments_spec.rb @@ -45,7 +45,7 @@ describe Comment do end it 'should send a user comment on his own post to lots of people' do - allowed_urls = @user_status.people_with_permissions.map{|x| x = x.url + "receive/"} + allowed_urls = @user_status.people_with_permissions.map{|x| x = x.receive_url} message_queue.should_receive(:add_post_request).with(allowed_urls, anything) @user.comment "yo", :on => @user_status end diff --git a/spec/models/request_spec.rb b/spec/models/request_spec.rb index cafcd8c9d..f3fd9c4a5 100644 --- a/spec/models/request_spec.rb +++ b/spec/models/request_spec.rb @@ -27,10 +27,10 @@ describe Request do user = Factory.create(:user) remote_person = Factory.build(:person, :email => "robert@grimm.com", :url => "http://king.com/") - Request.instantiate(:from => user.person, :to => remote_person.url).save - Request.instantiate(:from => user.person, :to => remote_person.url).save - Request.instantiate(:from => user.person, :to => remote_person.url).save - Request.instantiate(:from => remote_person, :to => user.url).save + Request.instantiate(:from => user.person, :to => remote_person.receive_url).save + Request.instantiate(:from => user.person, :to => remote_person.receive_url).save + Request.instantiate(:from => user.person, :to => remote_person.receive_url).save + Request.instantiate(:from => remote_person, :to => user.receive_url).save Request.for_user(user).all.count.should == 1 end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b32581afc..2102344b8 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -28,7 +28,7 @@ describe User do describe 'friend requesting' do it "should be able to accept a pending friend request" do friend = Factory.create(:person) - r = Request.instantiate(:to => @user.url, :from => friend) + r = Request.instantiate(:to => @user.receive_url, :from => friend) r.save Person.all.count.should == 2 Request.for_user(@user).all.count.should == 1 @@ -39,7 +39,7 @@ describe User do it 'should be able to ignore a pending friend request' do friend = Factory.create(:person) - r = Request.instantiate(:to => @user.url, :from => friend) + r = Request.instantiate(:to => @user.receive_url, :from => friend) r.save Person.count.should == 2 @@ -58,7 +58,7 @@ describe User do @user.save - @user.send_friend_request_to( friend.url ).should be nil + @user.send_friend_request_to( friend.receive_url ).should be nil end it 'should be able to give me the terse url for webfinger' do @@ -73,13 +73,13 @@ describe User do @user.pending_requests.empty?.should be true @user.friends.empty?.should be true - request = Request.instantiate(:to => @user.url, :from => person_one) + request = Request.instantiate(:to => @user.receive_url, :from => person_one) person_one.destroy @user.receive_friend_request request @user.pending_requests.size.should be 1 @user.friends.size.should be 0 - request_two = Request.instantiate(:to => @user.url, :from => person_two) + request_two = Request.instantiate(:to => @user.receive_url, :from => person_two) person_two.destroy @user.receive_friend_request request_two @user.pending_requests.size.should be 2