forked from zapnap/resque_mailer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
resque_mailer_spec.rb
110 lines (91 loc) · 3.26 KB
/
resque_mailer_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
class FakeResque
def self.enqueue(*args); end
end
class Rails3Mailer < ActionMailer::Base
include Resque::Mailer
default :from => "from@example.org", :subject => "Subject"
MAIL_PARAMS = { :to => "crafty@example.org" }
def test_mail(*params)
Resque::Mailer.success!
mail(*params)
end
end
class PriorityMailer < Rails3Mailer
self.queue = 'priority_mailer'
end
describe Resque::Mailer do
let(:resque) { FakeResque }
before do
Resque::Mailer.default_queue_target = resque
Resque::Mailer.stub(:success!)
Rails3Mailer.stub(:current_env => :test)
end
describe "resque" do
it "allows overriding of the default queue target (for testing)" do
Resque::Mailer.default_queue_target = FakeResque
Rails3Mailer.resque.should == FakeResque
end
end
describe "queue" do
it "defaults to the 'mailer' queue" do
Rails3Mailer.queue.should == "mailer"
end
it "allows overriding of the default queue name" do
Resque::Mailer.default_queue_name = "postal"
Rails3Mailer.queue.should == "postal"
end
it "allows overriding of the local queue name" do
PriorityMailer.queue.should == "priority_mailer"
end
end
describe '#deliver' do
before(:all) do
@delivery = lambda {
Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).deliver
}
end
it 'should not deliver the email synchronously' do
lambda { @delivery.call }.should_not change(ActionMailer::Base.deliveries, :size)
end
it 'should place the deliver action on the Resque "mailer" queue' do
resque.should_receive(:enqueue).with(Rails3Mailer, :test_mail, Rails3Mailer::MAIL_PARAMS)
@delivery.call
end
context "when current env is excluded" do
it 'should not deliver through Resque for excluded environments' do
Resque::Mailer.stub(:excluded_environments => [:custom])
Rails3Mailer.should_receive(:current_env).and_return(:custom)
resque.should_not_receive(:enqueue)
@delivery.call
end
end
it 'should not invoke the method body more than once' do
Resque::Mailer.should_not_receive(:success!)
Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).deliver
end
end
describe '#deliver!' do
it 'should deliver the email synchronously' do
lambda { Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).deliver! }.should change(ActionMailer::Base.deliveries, :size).by(1)
end
end
describe 'perform' do
it 'should perform a queued mailer job' do
lambda {
Rails3Mailer.perform(:test_mail, Rails3Mailer::MAIL_PARAMS)
}.should change(ActionMailer::Base.deliveries, :size).by(1)
end
end
describe 'original mail methods' do
it 'should be preserved' do
Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).subject.should == 'Subject'
Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).from.should include('from@example.org')
Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).to.should include('crafty@example.org')
end
it 'should require execution of the method body prior to queueing' do
Resque::Mailer.should_receive(:success!).once
Rails3Mailer.test_mail(Rails3Mailer::MAIL_PARAMS).subject
end
end
end