Merge pull request #4277 from davexunit/feature/4069
Background actual mailing when sending invitations
This commit is contained in:
commit
07083c7076
5 changed files with 29 additions and 36 deletions
|
|
@ -58,9 +58,10 @@ class InvitationsController < ApplicationController
|
||||||
session[:invalid_email_invites] = invalid_emails
|
session[:invalid_email_invites] = invalid_emails
|
||||||
|
|
||||||
unless valid_emails.empty?
|
unless valid_emails.empty?
|
||||||
inviter = EmailInviter.new(valid_emails.join(','), current_user,
|
Workers::Mail::InviteEmail.perform_async(valid_emails.join(','),
|
||||||
params[:email_inviter])
|
current_user.id,
|
||||||
inviter.send!
|
params[:email_inviter])
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if emails.empty?
|
if emails.empty?
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,11 @@
|
||||||
|
|
||||||
module Workers
|
module Workers
|
||||||
module Mail
|
module Mail
|
||||||
class InviteUserByEmail < Base
|
class InviteEmail < Base
|
||||||
sidekiq_options queue: :mail
|
sidekiq_options queue: :mail
|
||||||
|
|
||||||
def perform(invite_id)
|
def perform(emails, inviter_id, options={})
|
||||||
invite = Invitation.find(invite_id)
|
EmailInviter.new(emails, User.find(inviter_id), options).send!
|
||||||
I18n.with_locale(invite.language) do
|
|
||||||
invite.send!
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -26,7 +26,7 @@ describe InvitationsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not create an EmailInviter' do
|
it 'does not create an EmailInviter' do
|
||||||
EmailInviter.should_not_receive(:new)
|
Workers::Mail::InviteEmail.should_not_receive(:perform_async)
|
||||||
post :create, @invite
|
post :create, @invite
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -47,10 +47,9 @@ describe InvitationsController do
|
||||||
@invite = {'email_inviter' => {'message' => "test", 'emails' => @emails}}
|
@invite = {'email_inviter' => {'message' => "test", 'emails' => @emails}}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an EmailInviter' do
|
it 'creates an InviteEmail worker' do
|
||||||
inviter = stub(:emails => [@emails], :send! => true)
|
inviter = stub(:emails => [@emails], :send! => true)
|
||||||
EmailInviter.should_receive(:new).with(@invite['email_inviter']['emails'], @user, @invite['email_inviter']).
|
Workers::Mail::InviteEmail.should_receive(:perform_async).with(@invite['email_inviter']['emails'], @user.id, @invite['email_inviter'])
|
||||||
and_return(inviter)
|
|
||||||
post :create, @invite
|
post :create, @invite
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -72,8 +71,8 @@ describe InvitationsController do
|
||||||
@invite = {'email_inviter' => {'message' => "test", 'emails' => @emails}}
|
@invite = {'email_inviter' => {'message' => "test", 'emails' => @emails}}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not create an EmailInviter' do
|
it 'does not create an InviteEmail worker' do
|
||||||
EmailInviter.should_not_receive(:new)
|
Workers::Mail::InviteEmail.should_not_receive(:perform_async)
|
||||||
post :create, @invite
|
post :create, @invite
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -98,10 +97,9 @@ describe InvitationsController do
|
||||||
@valid_emails + ',' + @invalid_emails}}
|
@valid_emails + ',' + @invalid_emails}}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an EmailInviter' do
|
it 'creates an InviteEmail worker' do
|
||||||
inviter = stub(:emails => [@emails], :send! => true)
|
inviter = stub(:emails => [@emails], :send! => true)
|
||||||
EmailInviter.should_receive(:new).with(@valid_emails, @user, @invite['email_inviter']).
|
Workers::Mail::InviteEmail.should_receive(:perform_async).with(@valid_emails, @user.id, @invite['email_inviter'])
|
||||||
and_return(inviter)
|
|
||||||
post :create, @invite
|
post :create, @invite
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
14
spec/workers/mail/invite_email_spec.rb
Normal file
14
spec/workers/mail/invite_email_spec.rb
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Workers::Mail::InviteEmail do
|
||||||
|
let(:emails) { ['foo@bar.com', 'baz@bar.com'] }
|
||||||
|
let(:message) { 'get over here!' }
|
||||||
|
let(:email_inviter) { double('EmailInviter') }
|
||||||
|
|
||||||
|
it 'creates a new email inviter' do
|
||||||
|
EmailInviter.should_receive(:new).with(emails, alice, message: message)
|
||||||
|
.and_return(email_inviter)
|
||||||
|
email_inviter.should_receive(:send!)
|
||||||
|
Workers::Mail::InviteEmail.new.perform(emails, alice, message: message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe Workers::Mail::InviteUserByEmail do
|
|
||||||
before do
|
|
||||||
@sender = alice
|
|
||||||
@email = 'bob@bob.com'
|
|
||||||
@aspect = alice.aspects.first
|
|
||||||
@message = 'invite message'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'calls invite_user with email param' do
|
|
||||||
invitation = Invitation.create(:sender => @sender, :identifier => @email, :service => "email", :aspect => @aspect, :message => @message)
|
|
||||||
invitation.should_receive(:send!)
|
|
||||||
Invitation.stub(:find).and_return(invitation)
|
|
||||||
Workers::Mail::InviteUserByEmail.new.perform(invitation.id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Loading…
Reference in a new issue