mandrill_mailer 0.6.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -1
- data/README.md +12 -2
- data/lib/mandrill_mailer/arg_formatter.rb +119 -0
- data/lib/mandrill_mailer/core_mailer.rb +38 -73
- data/lib/mandrill_mailer/message_mailer.rb +2 -102
- data/lib/mandrill_mailer/offline.rb +10 -6
- data/lib/mandrill_mailer/template_mailer.rb +9 -97
- data/lib/mandrill_mailer/version.rb +1 -1
- data/spec/arg_formatter_spec.rb +236 -0
- data/spec/core_mailer_spec.rb +294 -38
- data/spec/message_mailer_spec.rb +12 -133
- data/spec/spec_helper.rb +2 -0
- data/spec/template_mailer_spec.rb +24 -442
- metadata +6 -3
data/spec/message_mailer_spec.rb
CHANGED
@@ -1,148 +1,27 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require 'base64'
|
3
2
|
|
4
3
|
describe MandrillMailer::MessageMailer do
|
5
|
-
let(:image_path) { '/assets/image.jpg' }
|
6
|
-
let(:default_host) { 'localhost:3000' }
|
7
4
|
let(:mailer) { described_class.new }
|
8
5
|
let(:api_key) { '1237861278' }
|
9
6
|
|
10
|
-
|
11
|
-
let(:from_email) { 'from@email.com' }
|
12
|
-
let(:from_name) { 'Example Name' }
|
13
|
-
let(:var_name) { 'USER_NAME' }
|
14
|
-
let(:var_content) { 'bobert' }
|
15
|
-
let(:var_rcpt_name) { 'USER_INFO' }
|
16
|
-
let(:var_rcpt_content) { 'boboblacksheep' }
|
17
|
-
let(:to_email) { 'bob@email.com' }
|
18
|
-
let(:to_name) { 'bob' }
|
19
|
-
let(:attachment_file) { File.read(File.expand_path('spec/support/test_image.png')) }
|
20
|
-
let(:attachment_filename) { 'test_image.png' }
|
21
|
-
let(:attachment_mimetype) { 'image/png' }
|
22
|
-
|
23
|
-
let(:image_file) { File.read(File.expand_path('spec/support/test_image.png')) }
|
24
|
-
let(:image_filename) { 'test_image.png' }
|
25
|
-
let(:image_mimetype) { 'image/png' }
|
26
|
-
|
27
|
-
let(:send_at) { Time.utc(2020, 1, 1, 8, 0) }
|
28
|
-
let(:bcc) { "bcc@email.com" }
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
let(:message_args) do
|
33
|
-
{
|
34
|
-
text: "Example text content",
|
35
|
-
html: "<p>Example HTML content</p>",
|
36
|
-
view_content_link: "http://www.nba.com",
|
37
|
-
from: from_email,
|
38
|
-
subject: "super secret",
|
39
|
-
to: {'email' => to_email, 'name' => to_name},
|
40
|
-
preserve_recipients: false,
|
41
|
-
vars: {
|
42
|
-
var_name => var_content
|
43
|
-
},
|
44
|
-
recipient_vars: [
|
45
|
-
{ to_email => { var_rcpt_name => var_rcpt_content } }
|
46
|
-
],
|
47
|
-
headers: {"Reply-To" => "support@email.com"},
|
48
|
-
bcc: bcc,
|
49
|
-
tags: ['tag1'],
|
50
|
-
subaccount: "subaccount1",
|
51
|
-
google_analytics_domains: ["http://site.com"],
|
52
|
-
google_analytics_campaign: '1237423474',
|
53
|
-
attachments: [{file: attachment_file, filename: attachment_filename, mimetype: attachment_mimetype}],
|
54
|
-
images: [{file: image_file, filename: image_filename, mimetype: image_mimetype}],
|
55
|
-
inline_css: true,
|
56
|
-
important: true,
|
57
|
-
send_at: send_at,
|
58
|
-
track_opens: false,
|
59
|
-
track_clicks: false,
|
60
|
-
url_strip_qs: false
|
61
|
-
}
|
62
|
-
end
|
63
|
-
|
64
7
|
before do
|
65
8
|
MandrillMailer.config.api_key = api_key
|
66
|
-
MandrillMailer.config.default_url_options = { host: default_host }
|
67
|
-
#MandrillMailer.config.stub(:image_path).and_return(image_path)
|
68
|
-
allow(MandrillMailer.config).to receive(:image_path).and_return(image_path)
|
69
|
-
|
70
|
-
MandrillMailer::MessageMailer.default from: from_email, from_name: from_name
|
71
9
|
end
|
72
10
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
it 'should not set the html' do
|
80
|
-
expect(subject.html).to be_nil
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'should not set the text' do
|
84
|
-
expect(subject.text).to be_nil
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
it 'should set send_at option' do
|
89
|
-
expect(subject.send_at).to eq('2020-01-01 08:00:00')
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
context "with interceptor" do
|
95
|
-
before(:each) do
|
96
|
-
@intercepted_params = {
|
97
|
-
to: { email: 'interceptedto@test.com', name: 'Mr. Interceptor' },
|
98
|
-
tags: ['intercepted-tag'],
|
99
|
-
bcc_address: 'interceptedbbc@email.com'
|
100
|
-
}
|
101
|
-
MandrillMailer.config.interceptor_params = @intercepted_params
|
102
|
-
end
|
11
|
+
describe "#deliver" do
|
12
|
+
let(:async) { double(:async) }
|
13
|
+
let(:ip_pool) { double(:ip_pool) }
|
14
|
+
let(:send_at) { double(:send_at) }
|
15
|
+
let(:message) { double(:message) }
|
103
16
|
|
104
|
-
|
105
|
-
|
106
|
-
|
17
|
+
it "calls the messages api with #send" do
|
18
|
+
mailer.async = async
|
19
|
+
mailer.ip_pool = ip_pool
|
20
|
+
mailer.send_at = send_at
|
21
|
+
mailer.message = message
|
107
22
|
|
108
|
-
|
109
|
-
|
110
|
-
expect { subject }.to raise_error(MandrillMailer::MessageMailer::InvalidInterceptorParams, "The interceptor_params config must be a Hash")
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'should produce the correct message' do
|
114
|
-
expect(subject.message.to_a - {
|
115
|
-
"text" => "Example text content",
|
116
|
-
"html" => "<p>Example HTML content</p>",
|
117
|
-
"view_content_link" => "http://www.nba.com",
|
118
|
-
"subject" => message_args[:subject],
|
119
|
-
"from_email" => from_email,
|
120
|
-
"from_name" => from_name,
|
121
|
-
"to" => @intercepted_params[:to],
|
122
|
-
"headers" => message_args[:headers],
|
123
|
-
"important" => message_args[:important],
|
124
|
-
"inline_css" => message_args[:inline_css],
|
125
|
-
"track_opens" => message_args[:track_opens],
|
126
|
-
"track_clicks" => message_args[:track_clicks],
|
127
|
-
"auto_text" => true,
|
128
|
-
"url_strip_qs" => message_args[:url_strip_qs],
|
129
|
-
"preserve_recipients" => false,
|
130
|
-
"bcc_address" => @intercepted_params[:bcc_address],
|
131
|
-
"global_merge_vars" => [{"name" => var_name, "content" => var_content}],
|
132
|
-
"merge_vars" => [{"rcpt" => to_email, "vars" => [{"name" => var_rcpt_name, "content" => var_rcpt_content}]}],
|
133
|
-
"tags" => @intercepted_params[:tags],
|
134
|
-
"metadata" => message_args[:metadata],
|
135
|
-
"subaccount" => message_args[:subaccount],
|
136
|
-
"google_analytics_domains" => message_args[:google_analytics_domains],
|
137
|
-
"google_analytics_campaign" => message_args[:google_analytics_campaign],
|
138
|
-
"attachments" => [{'type' => attachment_mimetype, 'name' => attachment_filename, 'content' => Base64.encode64(attachment_file)}],
|
139
|
-
"images" => [{'type' => image_mimetype, 'name' => image_filename, 'content' => Base64.encode64(image_file)}]
|
140
|
-
}.to_a).to eq []
|
141
|
-
|
142
|
-
end
|
143
|
-
|
23
|
+
expect_any_instance_of(Mandrill::Messages).to receive(:send).with(message, async, ip_pool, send_at)
|
24
|
+
mailer.deliver
|
144
25
|
end
|
145
26
|
end
|
146
|
-
|
147
|
-
|
148
27
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,471 +1,53 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require 'base64'
|
3
2
|
|
4
3
|
describe MandrillMailer::TemplateMailer do
|
5
|
-
let(:image_path) { '/assets/image.jpg' }
|
6
|
-
let(:default_host) { 'localhost:3000' }
|
7
4
|
let(:mailer) { described_class.new }
|
8
5
|
let(:api_key) { '1237861278' }
|
9
6
|
|
10
|
-
let(:template_content_name) {
|
11
|
-
let(:template_content_content) {
|
12
|
-
let(:from_email) { 'from@email.com' }
|
13
|
-
let(:from_name) { 'Example Name' }
|
14
|
-
let(:var_name) { 'USER_NAME' }
|
15
|
-
let(:var_content) { 'bobert' }
|
16
|
-
let(:var_rcpt_name) { 'USER_INFO' }
|
17
|
-
let(:var_rcpt_content) { 'boboblacksheep' }
|
18
|
-
let(:to_email) { 'bob@email.com' }
|
19
|
-
let(:to_name) { 'bob' }
|
20
|
-
let(:attachment_file) { File.read(File.expand_path('spec/support/test_image.png')) }
|
21
|
-
let(:attachment_filename) { 'test_image.png' }
|
22
|
-
let(:attachment_mimetype) { 'image/png' }
|
23
|
-
|
24
|
-
let(:image_file) { File.read(File.expand_path('spec/support/test_image.png')) }
|
25
|
-
let(:image_filename) { 'test_image.png' }
|
26
|
-
let(:image_mimetype) { 'image/png' }
|
27
|
-
|
28
|
-
let(:send_at) { Time.utc(2020, 1, 1, 8, 0) }
|
29
|
-
let(:bcc) { "bcc@email.com" }
|
7
|
+
let(:template_content_name) { "test_template" }
|
8
|
+
let(:template_content_content) {"some testing content"}
|
30
9
|
|
31
10
|
let(:args) do
|
32
11
|
{
|
33
|
-
from: from_email,
|
34
12
|
template: 'Email Template',
|
35
|
-
|
36
|
-
to: {'email' => to_email, 'name' => to_name},
|
37
|
-
preserve_recipients: false,
|
38
|
-
vars: {
|
39
|
-
var_name => var_content
|
40
|
-
},
|
41
|
-
recipient_vars: [
|
42
|
-
{ to_email => { var_rcpt_name => var_rcpt_content } }
|
43
|
-
],
|
44
|
-
template_content: {template_content_name => template_content_content},
|
45
|
-
headers: {"Reply-To" => "support@email.com"},
|
46
|
-
bcc: bcc,
|
47
|
-
tags: ['tag1'],
|
48
|
-
subaccount: "subaccount1",
|
49
|
-
google_analytics_domains: ["http://site.com"],
|
50
|
-
google_analytics_campaign: '1237423474',
|
51
|
-
attachments: [{file: attachment_file, filename: attachment_filename, mimetype: attachment_mimetype}],
|
52
|
-
images: [{file: image_file, filename: image_filename, mimetype: image_mimetype}],
|
53
|
-
inline_css: true,
|
54
|
-
important: true,
|
55
|
-
send_at: send_at,
|
56
|
-
track_opens: false,
|
57
|
-
track_clicks: false,
|
58
|
-
url_strip_qs: false
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
let(:message_args) do
|
64
|
-
{
|
65
|
-
text: "Example text content",
|
66
|
-
html: "<p>Example HTML content</p>",
|
67
|
-
view_content_link: "http://www.nba.com",
|
68
|
-
from: from_email,
|
69
|
-
subject: "super secret",
|
70
|
-
to: {'email' => to_email, 'name' => to_name},
|
71
|
-
preserve_recipients: false,
|
72
|
-
vars: {
|
73
|
-
var_name => var_content
|
74
|
-
},
|
75
|
-
recipient_vars: [
|
76
|
-
{ to_email => { var_rcpt_name => var_rcpt_content } }
|
77
|
-
],
|
78
|
-
headers: {"Reply-To" => "support@email.com"},
|
79
|
-
bcc: bcc,
|
80
|
-
tags: ['tag1'],
|
81
|
-
subaccount: "subaccount1",
|
82
|
-
google_analytics_domains: ["http://site.com"],
|
83
|
-
google_analytics_campaign: '1237423474',
|
84
|
-
attachments: [{file: attachment_file, filename: attachment_filename, mimetype: attachment_mimetype}],
|
85
|
-
images: [{file: image_file, filename: image_filename, mimetype: image_mimetype}],
|
86
|
-
inline_css: true,
|
87
|
-
important: true,
|
88
|
-
send_at: send_at,
|
89
|
-
track_opens: false,
|
90
|
-
track_clicks: false,
|
91
|
-
url_strip_qs: false
|
13
|
+
template_content: {template_content_name => template_content_content}
|
92
14
|
}
|
93
15
|
end
|
94
16
|
|
95
17
|
before do
|
96
18
|
MandrillMailer.config.api_key = api_key
|
97
|
-
MandrillMailer.config.default_url_options = { host: default_host }
|
98
|
-
#MandrillMailer.config.stub(:image_path).and_return(image_path)
|
99
|
-
allow(MandrillMailer.config).to receive(:image_path).and_return(image_path)
|
100
|
-
|
101
|
-
MandrillMailer::TemplateMailer.default from: from_email, from_name: from_name
|
102
|
-
end
|
103
|
-
|
104
|
-
describe '#image_path' do
|
105
|
-
subject { mailer.image_path('logo.png') }
|
106
|
-
|
107
|
-
context 'Rails exists' do
|
108
|
-
let(:image) { 'image.png' }
|
109
|
-
let(:host) { 'codeschool.com' }
|
110
|
-
let(:router) { Rails.application.routes.url_helpers }
|
111
|
-
|
112
|
-
before do
|
113
|
-
# use load instead of require since we have to reload for every test
|
114
|
-
mailer.send(:load, 'fake_rails/fake_rails.rb')
|
115
|
-
MandrillMailer.config.default_url_options[:host] = host
|
116
|
-
end
|
117
|
-
|
118
|
-
# Essentially un-requiring the fake rails class so it doesn't pollute
|
119
|
-
# the rest of the tests
|
120
|
-
after do
|
121
|
-
Rails.unload!
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'should return the image url' do
|
125
|
-
#mailer.send(:image_path, image).should eq ActionController::Base.asset_path(image)
|
126
|
-
expect(mailer.send(:image_path, image)).to eq(ActionController::Base.asset_path(image))
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context 'Rails does not exist' do
|
131
|
-
it 'should raise exception' do
|
132
|
-
expect{ subject }.to raise_error
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe '#mandrill_args' do
|
138
|
-
let(:arg_name) { 'USER_NAME' }
|
139
|
-
let(:arg_value) { 'bob' }
|
140
|
-
|
141
|
-
subject { mailer.send(:mandrill_args, {arg_name => arg_value}) }
|
142
|
-
|
143
|
-
it 'should convert the args to the correct format' do
|
144
|
-
should eq [{'name' => arg_name, 'content' => arg_value}]
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
describe '#mandrill_rcpt_args' do
|
149
|
-
let(:rcpt) { 'email@email.com' }
|
150
|
-
let(:arg_name) { 'USER_NAME' }
|
151
|
-
let(:arg_value) { 'bob' }
|
152
|
-
|
153
|
-
subject { mailer.send(:mandrill_rcpt_args, [{rcpt => {arg_name => arg_value}}]) }
|
154
|
-
|
155
|
-
it 'should convert the args to the merge_vars format' do
|
156
|
-
should eq [{'rcpt' => rcpt, 'vars' => [{'name' => arg_name, 'content' => arg_value}]}]
|
157
|
-
end
|
158
19
|
end
|
159
20
|
|
160
|
-
describe '#
|
161
|
-
it 'only returns true or false' do
|
162
|
-
expect(mailer.send(:format_boolean, 1)).to eq true
|
163
|
-
expect(mailer.send(:format_boolean, '1')).to eq true
|
164
|
-
expect(mailer.send(:format_boolean, nil)).to eq false
|
165
|
-
expect(mailer.send(:format_boolean, false)).to eq false
|
166
|
-
expect(mailer.send(:format_boolean, true)).to eq true
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
describe '#format_to_params' do
|
171
|
-
let(:email) { 'bob@email.com' }
|
172
|
-
let(:name) { 'bob' }
|
173
|
-
|
174
|
-
context 'with a single email string' do
|
175
|
-
subject { mailer.send(:format_to_params, email) }
|
176
|
-
|
177
|
-
it 'should format args to a format mandrill likes' do
|
178
|
-
should eq [{"email" => email, "name" => email}]
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
context 'with a single email string array' do
|
183
|
-
subject { mailer.send(:format_to_params, [email]) }
|
184
|
-
|
185
|
-
it 'should format args to a format mandrill likes' do
|
186
|
-
should eq [{"email" => email, "name" => email}]
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
context 'with a single email/name Hash' do
|
191
|
-
subject { mailer.send(:format_to_params, {"email" => email, "name" => name}) }
|
192
|
-
|
193
|
-
it 'should format args to a format mandrill likes' do
|
194
|
-
should eq [{"email" => email, "name" => name}]
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
context 'with a single email/name hash Array' do
|
199
|
-
subject { mailer.send(:format_to_params, [{"email" => email, "name" => name}]) }
|
200
|
-
|
201
|
-
it 'should format args to a format mandrill likes' do
|
202
|
-
should eq [{"email" => email, "name" => name}]
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
describe '#mandrill_mail' do
|
208
|
-
subject { mailer.mandrill_mail(args) }
|
209
|
-
|
210
|
-
it 'should return the current class instance' do
|
211
|
-
should eq mailer
|
212
|
-
end
|
213
|
-
|
21
|
+
describe '#mandrill_mail_handler' do
|
214
22
|
it 'should set the template name' do
|
215
|
-
|
23
|
+
mailer.mandrill_mail_handler(args)
|
24
|
+
expect(mailer.template_name).to eq 'Email Template'
|
216
25
|
end
|
217
26
|
|
218
|
-
|
219
27
|
it 'should set the template content' do
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
it 'should retain data method' do
|
224
|
-
expect(subject.data).to eq({
|
225
|
-
"key" => MandrillMailer.config.api_key,
|
226
|
-
"template_name" => subject.template_name,
|
227
|
-
"template_content" => subject.template_content,
|
228
|
-
"message" => subject.message,
|
229
|
-
"async" => subject.async,
|
230
|
-
"ip_pool" => subject.ip_pool,
|
231
|
-
"send_at" => subject.send_at
|
232
|
-
})
|
233
|
-
end
|
234
|
-
|
235
|
-
it 'should set send_at option' do
|
236
|
-
expect(subject.send_at).to eq('2020-01-01 08:00:00')
|
237
|
-
end
|
238
|
-
|
239
|
-
context "without interceptor" do
|
240
|
-
it 'should produce the correct message' do
|
241
|
-
expect(subject.message).to eq ({
|
242
|
-
"subject" => args[:subject],
|
243
|
-
"from_email" => from_email,
|
244
|
-
"from_name" => from_name,
|
245
|
-
"to" => [{'email' => to_email, 'name' => to_name}],
|
246
|
-
"headers" => args[:headers],
|
247
|
-
"important" => args[:important],
|
248
|
-
"inline_css" => args[:inline_css],
|
249
|
-
"track_opens" => args[:track_opens],
|
250
|
-
"track_clicks" => args[:track_clicks],
|
251
|
-
"auto_text" => true,
|
252
|
-
"url_strip_qs" => args[:url_strip_qs],
|
253
|
-
"preserve_recipients" => false,
|
254
|
-
"bcc_address" => args[:bcc],
|
255
|
-
"merge_language" => args[:merge_language],
|
256
|
-
"global_merge_vars" => [{"name" => var_name, "content" => var_content}],
|
257
|
-
"merge_vars" => [{"rcpt" => to_email, "vars" => [{"name" => var_rcpt_name, "content" => var_rcpt_content}]}],
|
258
|
-
"tags" => args[:tags],
|
259
|
-
"metadata" => args[:metadata],
|
260
|
-
"subaccount" => args[:subaccount],
|
261
|
-
"google_analytics_domains" => args[:google_analytics_domains],
|
262
|
-
"google_analytics_campaign" => args[:google_analytics_campaign],
|
263
|
-
"attachments" => [{'type' => attachment_mimetype, 'name' => attachment_filename, 'content' => Base64.encode64(attachment_file)}],
|
264
|
-
"images" => [{'type' => image_mimetype, 'name' => image_filename, 'content' => Base64.encode64(image_file)}]
|
265
|
-
})
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
context "with interceptor" do
|
270
|
-
before(:each) do
|
271
|
-
@intercepted_params = {
|
272
|
-
to: [{ email: 'interceptedto@test.com', name: 'Mr. Interceptor' }],
|
273
|
-
tags: ['intercepted-tag'],
|
274
|
-
bcc_address: 'interceptedbbc@email.com'
|
275
|
-
}
|
276
|
-
MandrillMailer.config.interceptor_params = @intercepted_params
|
277
|
-
end
|
278
|
-
|
279
|
-
after do
|
280
|
-
MandrillMailer.config.interceptor_params = nil
|
281
|
-
end
|
282
|
-
|
283
|
-
it "should raise an error if interceptor params is not a Hash" do
|
284
|
-
MandrillMailer.config.interceptor_params = "error"
|
285
|
-
expect { subject }.to raise_error(MandrillMailer::TemplateMailer::InvalidInterceptorParams, "The interceptor_params config must be a Hash")
|
286
|
-
end
|
287
|
-
|
288
|
-
it 'should produce the correct message' do
|
289
|
-
expect(subject.message).to eq ({
|
290
|
-
"subject" => args[:subject],
|
291
|
-
"from_email" => from_email,
|
292
|
-
"from_name" => from_name,
|
293
|
-
"to" => @intercepted_params[:to],
|
294
|
-
"headers" => args[:headers],
|
295
|
-
"important" => args[:important],
|
296
|
-
"inline_css" => args[:inline_css],
|
297
|
-
"track_opens" => args[:track_opens],
|
298
|
-
"track_clicks" => args[:track_clicks],
|
299
|
-
"auto_text" => true,
|
300
|
-
"url_strip_qs" => args[:url_strip_qs],
|
301
|
-
"preserve_recipients" => false,
|
302
|
-
"bcc_address" => @intercepted_params[:bcc_address],
|
303
|
-
"merge_language" => args[:merge_language],
|
304
|
-
"global_merge_vars" => [{"name" => var_name, "content" => var_content}],
|
305
|
-
"merge_vars" => [{"rcpt" => to_email, "vars" => [{"name" => var_rcpt_name, "content" => var_rcpt_content}]}],
|
306
|
-
"tags" => @intercepted_params[:tags],
|
307
|
-
"metadata" => args[:metadata],
|
308
|
-
"subaccount" => args[:subaccount],
|
309
|
-
"google_analytics_domains" => args[:google_analytics_domains],
|
310
|
-
"google_analytics_campaign" => args[:google_analytics_campaign],
|
311
|
-
"attachments" => [{'type' => attachment_mimetype, 'name' => attachment_filename, 'content' => Base64.encode64(attachment_file)}],
|
312
|
-
"images" => [{'type' => image_mimetype, 'name' => image_filename, 'content' => Base64.encode64(image_file)}]
|
313
|
-
})
|
314
|
-
end
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
|
-
|
319
|
-
describe 'url helpers in mailer' do
|
320
|
-
subject { mailer.send(:course_url) }
|
321
|
-
|
322
|
-
context 'Rails is defined (Rails app)' do
|
323
|
-
let(:url) { '/courses/1' }
|
324
|
-
let(:host) { 'codeschool.com' }
|
325
|
-
let(:router) { Rails.application.routes.url_helpers }
|
326
|
-
|
327
|
-
before do
|
328
|
-
# use load since we are loading multiple times
|
329
|
-
mailer.send(:load, 'fake_rails/fake_rails.rb')
|
330
|
-
MandrillMailer.config.default_url_options[:host] = host
|
331
|
-
Rails.application.routes.draw do |builder|
|
332
|
-
builder.course_url "#{url}"
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
# Essentially un-requiring the fake rails class so it doesn't pollute
|
337
|
-
# the rest of the tests
|
338
|
-
after do
|
339
|
-
Rails.unload!
|
340
|
-
end
|
341
|
-
|
342
|
-
it 'should return the correct route' do
|
343
|
-
expect(subject).to eq router.course_url(host: host)
|
344
|
-
end
|
345
|
-
|
346
|
-
context 'route helper with an argument' do
|
347
|
-
it 'should return the correct route' do
|
348
|
-
expect(subject).to eq router.course_url({id: 1, title: 'zombies'}, host: host)
|
349
|
-
end
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
context 'Rails is not defined' do
|
354
|
-
it 'should raise an exception' do
|
355
|
-
expect{subject}.to raise_error
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
describe 'defaults' do
|
361
|
-
it 'should not share between different subclasses' do
|
362
|
-
klassA = Class.new(MandrillMailer::TemplateMailer) do
|
363
|
-
default from_name: 'ClassA', merge_vars: { 'FOO' => 'Bar' }
|
364
|
-
end
|
365
|
-
klassB = Class.new(MandrillMailer::TemplateMailer) do
|
366
|
-
default from_name: 'ClassB'
|
367
|
-
end
|
368
|
-
|
369
|
-
expect(klassA.mandrill_mail({vars: {}}).message['from_name']).to eq 'ClassA'
|
370
|
-
expect(klassA.mandrill_mail({vars: {}}).message['global_merge_vars']).to include({"name"=>"FOO", "content"=>"Bar"})
|
371
|
-
expect(klassB.mandrill_mail({vars: {}}).message['from_name']).to eq 'ClassB'
|
372
|
-
expect(klassB.mandrill_mail({vars: {}}).message['global_merge_vars']).to_not include({"name"=>"FOO", "content"=>"Bar"})
|
373
|
-
end
|
374
|
-
|
375
|
-
it 'should use defaults from the parent class' do
|
376
|
-
klassA = Class.new(MandrillMailer::TemplateMailer) do
|
377
|
-
default from_name: 'ClassA', merge_vars: { 'FOO' => 'Bar' }
|
378
|
-
end
|
379
|
-
klassB = Class.new(klassA) do
|
380
|
-
end
|
381
|
-
|
382
|
-
expect(klassB.mandrill_mail({vars: {}}).message['from_name']).to eq 'ClassA'
|
383
|
-
expect(klassB.mandrill_mail({vars: {}}).message['global_merge_vars']).to include({"name"=>"FOO", "content"=>"Bar"})
|
384
|
-
end
|
385
|
-
|
386
|
-
it 'should allow overriding defaults from the parent' do
|
387
|
-
klassA = Class.new(MandrillMailer::TemplateMailer) do
|
388
|
-
default from_name: 'ClassA', merge_vars: { 'FOO' => 'Bar' }
|
389
|
-
end
|
390
|
-
klassB = Class.new(klassA) do
|
391
|
-
default from_name: 'ClassB', merge_vars: { 'FOO' => 'Boo' }
|
392
|
-
end
|
393
|
-
|
394
|
-
expect(klassB.mandrill_mail({vars: {}}).message['from_name']).to eq 'ClassB'
|
395
|
-
expect(klassB.mandrill_mail({vars: {}}).message['global_merge_vars']).to include({"name"=>"FOO", "content"=>"Boo"})
|
28
|
+
mailer.mandrill_mail_handler(args)
|
29
|
+
expect(mailer.template_content).to eq [{'name' => template_content_name, 'content' => template_content_content}]
|
396
30
|
end
|
397
31
|
end
|
398
32
|
|
399
|
-
describe
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
expect(klassA).to respond_to('test_method')
|
408
|
-
end
|
409
|
-
it 'can respond to a string' do
|
410
|
-
klassA = Class.new(MandrillMailer::TemplateMailer) do
|
411
|
-
def test_method
|
412
|
-
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
|
-
expect(klassA).to respond_to('test_method')
|
417
|
-
end
|
418
|
-
end
|
419
|
-
|
420
|
-
describe "#from" do
|
421
|
-
subject { mailer.mandrill_mail(args) }
|
422
|
-
|
423
|
-
it "returns the from email" do
|
424
|
-
expect(subject.from).to eq from_email
|
425
|
-
end
|
426
|
-
end
|
427
|
-
|
428
|
-
describe "#to" do
|
429
|
-
subject { mailer.mandrill_mail(args) }
|
430
|
-
|
431
|
-
it "returns the to email data" do
|
432
|
-
expect(subject.to).to eq [{"email" => to_email, "name" => to_name}]
|
433
|
-
end
|
434
|
-
end
|
435
|
-
|
436
|
-
describe '#to=' do
|
437
|
-
subject { mailer.mandrill_mail(args) }
|
438
|
-
|
439
|
-
it "updates the to email data" do
|
440
|
-
subject.to = 'bob@example.com'
|
441
|
-
expect(subject.to).to eq [{"email" => "bob@example.com", "name" => "bob@example.com"}]
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
|
-
describe "#bcc" do
|
446
|
-
subject { mailer.mandrill_mail(args) }
|
447
|
-
|
448
|
-
it "returns the bcc email/s" do
|
449
|
-
expect(subject.bcc).to eq bcc
|
450
|
-
end
|
451
|
-
end
|
452
|
-
|
453
|
-
describe "#vars" do
|
454
|
-
subject { mailer.mandrill_mail(args) }
|
455
|
-
|
456
|
-
it "returns the vars" do
|
457
|
-
expect(subject.message["global_merge_vars"].first.values).to include(var_name)
|
458
|
-
expect(subject.message["global_merge_vars"].first.values).to include(var_content)
|
459
|
-
end
|
33
|
+
describe "#deliver" do
|
34
|
+
let(:async) { double(:async) }
|
35
|
+
let(:ip_pool) { double(:ip_pool) }
|
36
|
+
let(:send_at) { double(:send_at) }
|
37
|
+
let(:message) { double(:message) }
|
38
|
+
let(:template_name) { double(:template_name) }
|
39
|
+
let(:template_content) { double(:template_content) }
|
460
40
|
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
41
|
+
it "calls the messages api with #send_template" do
|
42
|
+
mailer.async = async
|
43
|
+
mailer.ip_pool = ip_pool
|
44
|
+
mailer.send_at = send_at
|
45
|
+
mailer.message = message
|
46
|
+
mailer.template_content = template_content
|
47
|
+
mailer.template_name = template_name
|
465
48
|
|
466
|
-
|
467
|
-
|
468
|
-
end
|
49
|
+
expect_any_instance_of(Mandrill::Messages).to receive(:send_template).with(template_name, template_content, message, async, ip_pool, send_at)
|
50
|
+
mailer.deliver
|
469
51
|
end
|
470
52
|
end
|
471
53
|
end
|