diff --git a/Gemfile.lock b/Gemfile.lock index b184b3559..14e3f10ef 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -122,6 +122,7 @@ GEM selenium-webdriver (>= 0.0.3) childprocess (0.0.7) ffi (~> 0.6.3) + columnize (0.3.1) crack (0.1.8) cucumber (0.9.2) builder (~> 2.1.2) @@ -162,6 +163,7 @@ GEM i18n (0.4.1) json (1.4.6) json_pure (1.4.6) + linecache (0.43) mail (2.2.7) activesupport (>= 2.3.6) mime-types @@ -223,6 +225,11 @@ GEM rspec-expectations (= 2.0.0) rspec-rails (2.0.0) rspec (= 2.0.0) + ruby-debug (0.10.3) + columnize (>= 0.1) + ruby-debug-base (~> 0.10.3.0) + ruby-debug-base (0.10.3) + linecache (>= 0.3) rubyzip (0.9.4) selenium-webdriver (0.0.29) childprocess (>= 0.0.7) @@ -280,6 +287,7 @@ DEPENDENCIES roxml! rspec (>= 2.0.0) rspec-rails (>= 2.0.0) + ruby-debug sprinkle! thin webmock diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 31d2c9d9c..9d598480c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -36,7 +36,7 @@ class ApplicationController < ActionController::Base end def count_requests - @request_count = Request.for_user(current_user).size if current_user + @request_count = current_user.requests_for_me.size if current_user end def set_invites diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb index ec22b9f32..26aafb771 100644 --- a/app/controllers/aspects_controller.rb +++ b/app/controllers/aspects_controller.rb @@ -65,7 +65,7 @@ class AspectsController < ApplicationController def manage @aspect = :manage - @remote_requests = Request.for_user(current_user).all + @remote_requests = current_user.requests_for_me end def update diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index 2212f9539..ab1574347 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -6,8 +6,9 @@ class InvitationsController < Devise::InvitationsController def create + puts params.inspect begin - params[:aspect_id] = params.delete(:aspects) + params[:user][:aspect_id] = params[:user].delete(:aspects) self.resource = current_user.invite_user(params[resource_name]) flash[:notice] = I18n.t 'invitations.create.sent' rescue RuntimeError => e diff --git a/app/views/invitations/_new.haml b/app/views/invitations/_new.haml index 2da46f7c7..36b0dacac 100644 --- a/app/views/invitations/_new.haml +++ b/app/views/invitations/_new.haml @@ -7,5 +7,5 @@ - if @aspect == :all = f.select(:aspects, @aspects_dropdown_array) - else - = f.select(:aspects, @aspects_dropdown_array, :selected => [@aspect.to_s, @aspect.id]) + = f.select(:aspects, @aspects_dropdown_array, :selected => [@aspect.to_s, @aspect_id]) %p= f.submit "Send an invitation" diff --git a/lib/diaspora/user/friending.rb b/lib/diaspora/user/friending.rb index 6b2c26cea..c95d72c98 100644 --- a/lib/diaspora/user/friending.rb +++ b/lib/diaspora/user/friending.rb @@ -114,7 +114,11 @@ module Diaspora end def request_from_me?(request) - pending_requests.detect{|req| (req.callback_url == person.receive_url) && (req.destination_url == person.receive_url)} + (pending_request_ids.include?(request.id.to_id)) && (request.callback_url == person.receive_url) + end + + def requests_for_me + pending_requests.select{|req| req.person != self.person } end end end diff --git a/spec/models/request_spec.rb b/spec/models/request_spec.rb index cac505eb5..a7d242ee7 100644 --- a/spec/models/request_spec.rb +++ b/spec/models/request_spec.rb @@ -6,9 +6,10 @@ require 'spec_helper' describe Request do let(:user) { Factory(:user) } - ler(:person) {Factory :person} + let(:user2) { Factory :user} + let(:person) {Factory :person} let(:aspect) { user.aspect(:name => "dudes") } - let(:request){ user.send_friend_request_to person, aspect } + let(:request){ user.send_friend_request_to user2.person, aspect } it 'should require a destination and callback url' do person_request = Request.new @@ -19,6 +20,8 @@ describe Request do end it 'should generate xml for the User as a Person' do + + request = user.send_friend_request_to person, aspect xml = request.to_xml.to_s xml.should include user.person.diaspora_handle @@ -45,10 +48,25 @@ describe Request do person_request.destination_url.should == "http://google.com/" end - context 'quering request through user' do - it 'finds requests the user sent' do + describe '#request_from_me' do + it 'recognizes requests from me' do request - user.requests_for_me.include?(request).should be true + user.reload + user.request_from_me?(request).should be true + end + + it 'recognized when a request is not from me' do + user2.receive_salmon(user.salmon(request).xml_for(user2.person)) + user2.reload + user2.request_from_me?(request).should == false + end + end + + context 'quering request through user' do + it 'finds requests for that user' do + user2.receive_salmon(user.salmon(request).xml_for(user2.person)) + user2.reload + user2.requests_for_me.include?(request).should == true end end diff --git a/spec/models/user/invite_spec.rb b/spec/models/user/invite_spec.rb index 7190c9b23..e4118430d 100644 --- a/spec/models/user/invite_spec.rb +++ b/spec/models/user/invite_spec.rb @@ -12,6 +12,7 @@ describe User do let(:inviter_with_3_invites) {Factory.create :user, :invites => 3} let(:aspect2) {inviter_with_3_invites.aspect(:name => "Jersey Girls")} let!(:invited_user1) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter)} + let!(:invited_user2) { inviter.invite_user(:email => "jane@example.com", :aspect_id => aspect.id) } before do deliverable = Object.new @@ -39,6 +40,7 @@ describe User do it 'sends email to the invited user' do ::Devise.mailer.should_receive(:invitation).once inviter.invite_user(:email => "ian@example.com", :aspect_id => aspect.id) + inviter.invite_user(:email => "ian@example.com", :aspect_id => aspect.id) end it 'adds the inviter to the invited_user' do @@ -87,6 +89,24 @@ describe User do Person.count.should be person_count + 1 u.person.profile.first_name.should == "Bob" end + + it 'should auto accept the request for the sender into the right aspect' do + u = invited_user2.accept_invitation!(:invitation_token => invited_user2.invitation_token, + :username => "user", + :password => "secret", + :password_confirmation => "secret", + :person => {:profile => {:first_name => "Bob", + :last_name => "Smith"}} ) + u.reload + u.pending_requests + u.pending_requests.count.should == 1 + request = u.pending_requests.first + aspect2 = u.aspect(:name => "dudes") + u.reload + inviter + inviter.receive_salmon(u.salmon(u.accept_friend_request(request.id, aspect2.id)).xml_for(inviter.person)) + inviter.friends.include?(u.person).should be true + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 403042406..552fd884d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,7 +12,7 @@ require 'database_cleaner' require 'webmock/rspec' include Devise::TestHelpers -include WebMock +include WebMock::API # Requires supporting files with custom matchers and macros, etc, # in ./support/ and its subdirectories.