From 71cae6b89f9af986a0face13032aa9966050996c Mon Sep 17 00:00:00 2001 From: danielvincent <danielgrippi@gmail.com> Date: Fri, 3 Dec 2010 11:36:08 -0800 Subject: [PATCH] Move request mail into resque --- app/models/jobs/mail_request_acceptance.rb | 9 +++++ app/models/jobs/mail_request_received.rb | 9 +++++ app/models/request.rb | 22 +---------- lib/diaspora/user/connecting.rb | 13 +++---- spec/models/request_spec.rb | 44 ---------------------- spec/models/user/connecting_spec.rb | 32 ++++++++-------- 6 files changed, 42 insertions(+), 87 deletions(-) create mode 100644 app/models/jobs/mail_request_acceptance.rb create mode 100644 app/models/jobs/mail_request_received.rb diff --git a/app/models/jobs/mail_request_acceptance.rb b/app/models/jobs/mail_request_acceptance.rb new file mode 100644 index 0000000000..6e00b43739 --- /dev/null +++ b/app/models/jobs/mail_request_acceptance.rb @@ -0,0 +1,9 @@ +module Jobs + class MailRequestAcceptance + @queue = :mail + def self.perform(recipient_id, sender_id, aspect_id) + Notifier.request_accepted(recipient_id, sender_id, aspect_id).deliver + end + end +end + diff --git a/app/models/jobs/mail_request_received.rb b/app/models/jobs/mail_request_received.rb new file mode 100644 index 0000000000..b57e16fd6e --- /dev/null +++ b/app/models/jobs/mail_request_received.rb @@ -0,0 +1,9 @@ +module Jobs + class MailRequestReceived + @queue = :mail + def self.perform(recipient_id, sender_id) + Notifier.new_request(recipient_id, sender_id).deliver + end + end +end + diff --git a/app/models/request.rb b/app/models/request.rb index 3fce59fa93..8fd7563163 100644 --- a/app/models/request.rb +++ b/app/models/request.rb @@ -6,7 +6,6 @@ class Request require File.join(Rails.root, 'lib/diaspora/webhooks') include MongoMapper::Document - include Magent::Async include Diaspora::Webhooks include ROXML @@ -24,8 +23,6 @@ class Request validate :no_pending_request, :if => :sent validate :not_friending_yourself - #before_validation :clean_link - scope :from, lambda { |person| target = (person.is_a?(User) ? person.person : person) where(:from_id => target.id) @@ -51,26 +48,10 @@ class Request ) end - - def self.send_request_accepted(user, person, aspect) - self.async.send_request_accepted!(user.id, person.id, aspect.id).commit! - end - - def self.send_request_accepted!(user_id, person_id, aspect_id) - Notifier.request_accepted(user_id, person_id, aspect_id).deliver - end - - def self.send_new_request(user, person) - self.async.send_new_request!(user.id, person.id).commit! - end - - def self.send_new_request!(user_id, person_id) - Notifier.new_request(user_id, person_id).deliver - end - def sender_handle from.diaspora_handle end + def sender_handle= sender_handle self.from = Person.first(:diaspora_handle => sender_handle) end @@ -78,6 +59,7 @@ class Request def recipient_handle to.diaspora_handle end + def recipient_handle= recipient_handle self.to = Person.first(:diaspora_handle => recipient_handle) end diff --git a/lib/diaspora/user/connecting.rb b/lib/diaspora/user/connecting.rb index fe9e8f99c6..8f990bca4b 100644 --- a/lib/diaspora/user/connecting.rb +++ b/lib/diaspora/user/connecting.rb @@ -56,22 +56,21 @@ module Diaspora end def receive_contact_request(contact_request) - Rails.logger.info("receiving contact request #{contact_request.to_json}") #response from a contact request you sent if original_request = original_request(contact_request) receive_request_acceptance(contact_request, original_request) - #this is a new contact request + #this is a new contact request elsif !request_from_me?(contact_request) if contact_request.save! self.pending_requests << contact_request self.save! - Rails.logger.info("#{self.name} has received a contact request") - Request.send_new_request(self, contact_request.from) + Rails.logger.info("event=contact_request status=received_new_request from=#{contact_request.from.diaspora_handle} to=#{self.diaspora_handle}") + Resque.enqueue(Jobs::MailRequestReceived, self.id, contact_request.from.id) end else - Rails.logger.info "#{self.name} is trying to receive a contact request from himself." + Rails.logger.info "event=contact_request status=abort from=#{contact_request.from.diaspora_handle} to=#{self.diaspora_handle} reason=self-love" return nil end contact_request @@ -80,13 +79,13 @@ module Diaspora 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.name}'s contact request has been accepted") + Rails.logger.info("event=contact_request status=received_acceptance from=#{received_request.from.diaspora_handle} to=#{self.diaspora_handle}") received_request.destroy pending_requests.delete(sent_request) sent_request.destroy self.save - Request.send_request_accepted(self, received_request.from, destination_aspect) + Resque.enqueue(Jobs::MailRequestAcceptance, self.id, received_request.from.id, destination_aspect.id) end def disconnect(bad_contact) diff --git a/spec/models/request_spec.rb b/spec/models/request_spec.rb index 2762bf2ee4..468fbdb0cb 100644 --- a/spec/models/request_spec.rb +++ b/spec/models/request_spec.rb @@ -165,48 +165,4 @@ describe Request do end end end - - context 'mailers' do - context 'sugar around contacts' do - before do - Request.should_receive(:async).and_return(Request) - @mock_request = mock() - @mock_request.should_receive(:commit!) - end - - describe '.send_request_accepted' do - it 'should make a call to push to the queue' do - Request.should_receive(:send_request_accepted!).with(user.id, person.id, aspect.id).and_return(@mock_request) - Request.send_request_accepted(user, person, aspect) - end - end - - describe '.send_new_request' do - it 'should make a call to push to the queue' do - Request.should_receive(:send_new_request!).with(user.id, person.id).and_return(@mock_request) - Request.send_new_request(user, person) - end - end - end - - context 'actual calls to mailer' do - before do - @mock_mail = mock() - @mock_mail.should_receive(:deliver) - end - describe '.send_request_accepted!' do - it 'should deliver the message' do - Notifier.should_receive(:request_accepted).and_return(@mock_mail) - Request.send_request_accepted!(user.id, person.id, aspect.id) - end - end - - describe '.send_new_request' do - it 'should deliver the message' do - Notifier.should_receive(:new_request).and_return(@mock_mail) - Request.send_new_request!(user.id, person.id) - end - end - end - end end diff --git a/spec/models/user/connecting_spec.rb b/spec/models/user/connecting_spec.rb index 2584f4fdd9..d9a6b2e077 100644 --- a/spec/models/user/connecting_spec.rb +++ b/spec/models/user/connecting_spec.rb @@ -30,14 +30,22 @@ describe Diaspora::UserModules::Connecting do context 'contact requesting' do describe '#receive_contact_request' do + before do + @r = Request.instantiate(:to => user.person, :from => person) + end + it 'adds a request to pending if it was not sent by user' do - r = Request.instantiate(:to => user.person, :from => person) - user.receive_contact_request(r) - user.reload.pending_requests.should include r + user.receive_contact_request(@r) + user.reload.pending_requests.should include @r + end + + it 'enqueues a mail job' do + Resque.should_receive(:enqueue).with(Jobs::MailRequestReceived, user.id, person.id) + user.receive_contact_request(@r) end end - describe '#receive_request_accepted' do + describe '#receive_request_acceptance' do before do @original_request = user.send_contact_request_to(user2.person, aspect) @acceptance = @original_request.reverse_for(user2) @@ -56,6 +64,10 @@ describe Diaspora::UserModules::Connecting do user.pending_requests.include?(@acceptance).should be_false Request.find(@acceptance.id).should be_nil end + it 'enqueues a mail job' do + Resque.should_receive(:enqueue).with(Jobs::MailRequestAcceptance, user.id, user2.person.id, aspect.id).once + user.receive_request(@acceptance, user2.person) + end end context 'received a contact request' do @@ -106,13 +118,6 @@ describe Diaspora::UserModules::Connecting do }.should raise_error(MongoMapper::DocumentNotValid) end - it 'should send an email on acceptance if a contact request' do - Request.should_receive(:send_request_accepted) - request = user.send_contact_request_to(user2.person, aspect) - user.receive_request(request.reverse_for(user2), user2.person) - end - - describe 'multiple users accepting/rejecting the same person' do before do @@ -151,11 +156,6 @@ describe Diaspora::UserModules::Connecting do }.should_not change(Person, :count) user2.contact_for(user.person).should be_nil end - - it 'sends an email to the receiving user' do - Request.should_receive(:send_new_request).and_return(true) - user.receive @req_xml, person_one - end end context 'Two users receiving requests from one person' do -- GitLab