mailgun-ruby 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +30 -8
- data/.rubocop.yml +64 -4
- data/Gemfile +3 -1
- data/README.md +1 -1
- data/Rakefile +5 -8
- data/docs/AnalyticsTags.md +63 -0
- data/lib/mailgun/address.rb +5 -5
- data/lib/mailgun/chains.rb +2 -3
- data/lib/mailgun/client.rb +56 -56
- data/lib/mailgun/domains/domains.rb +11 -10
- data/lib/mailgun/events/events.rb +4 -3
- data/lib/mailgun/exceptions/exceptions.rb +12 -15
- data/lib/mailgun/helpers/api_version_checker.rb +6 -1
- data/lib/mailgun/lists/opt_in_handler.rb +6 -10
- data/lib/mailgun/logs/logs.rb +4 -2
- data/lib/mailgun/messages/batch_message.rb +10 -10
- data/lib/mailgun/messages/message_builder.rb +40 -56
- data/lib/mailgun/metrics/metrics.rb +12 -6
- data/lib/mailgun/response.rb +12 -10
- data/lib/mailgun/subaccounts/subaccounts.rb +13 -8
- data/lib/mailgun/suppressions.rb +36 -43
- data/lib/mailgun/tags/analytics_tags.rb +37 -2
- data/lib/mailgun/tags/tags.rb +29 -19
- data/lib/mailgun/templates/templates.rb +40 -29
- data/lib/mailgun/version.rb +3 -1
- data/lib/mailgun/webhooks/webhooks.rb +22 -19
- data/lib/mailgun-ruby.rb +2 -0
- data/lib/mailgun.rb +4 -4
- data/lib/railgun/attachment.rb +12 -19
- data/lib/railgun/errors.rb +2 -3
- data/lib/railgun/mailer.rb +37 -41
- data/lib/railgun/railtie.rb +2 -0
- data/lib/railgun.rb +2 -0
- data/mailgun.gemspec +15 -11
- data/spec/integration/analytics_tags_spec.rb +54 -0
- data/spec/integration/bounces_spec.rb +12 -11
- data/spec/integration/campaign_spec.rb +20 -18
- data/spec/integration/complaints_spec.rb +8 -6
- data/spec/integration/domains_spec.rb +12 -18
- data/spec/integration/email_validation_spec.rb +35 -34
- data/spec/integration/events_spec.rb +8 -8
- data/spec/integration/list_members_spec.rb +27 -26
- data/spec/integration/list_spec.rb +22 -21
- data/spec/integration/logs_spec.rb +49 -47
- data/spec/integration/mailer_spec.rb +7 -3
- data/spec/integration/mailgun_spec.rb +85 -92
- data/spec/integration/metrics_spec.rb +137 -131
- data/spec/integration/routes_spec.rb +41 -40
- data/spec/integration/stats_spec.rb +4 -2
- data/spec/integration/subaccounts_spec.rb +9 -10
- data/spec/integration/suppressions_spec.rb +222 -44
- data/spec/integration/templates_spec.rb +14 -12
- data/spec/integration/unsubscribes_spec.rb +8 -6
- data/spec/integration/webhook_spec.rb +18 -12
- data/spec/spec_helper.rb +15 -8
- data/spec/unit/client_spec.rb +424 -0
- data/spec/unit/connection/test_client.rb +108 -55
- data/spec/unit/events/events_spec.rb +48 -29
- data/spec/unit/exceptions/exceptions_spec.rb +8 -7
- data/spec/unit/helpers/api_version_checker_spec.rb +206 -0
- data/spec/unit/lists/opt_in_handler_spec.rb +11 -7
- data/spec/unit/mailgun_spec.rb +71 -68
- data/spec/unit/messages/batch_message_spec.rb +37 -36
- data/spec/unit/messages/message_builder_spec.rb +170 -169
- data/spec/unit/railgun/content_type_spec.rb +31 -30
- data/spec/unit/railgun/mailer_spec.rb +62 -59
- data/spec/unit/response_spec.rb +225 -0
- data/vcr_cassettes/For_the_suppressions_handling_class/creates_a_single_bounce.yml +55 -0
- data/vcr_cassettes/analytics_tags.yml +187 -0
- data/vcr_cassettes/suppressions.yml +1053 -170
- metadata +95 -29
- data/.rubocop_todo.yml +0 -22
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'stringio'
|
|
3
5
|
|
|
4
6
|
describe 'MessageBuilder attribute readers' do
|
|
5
|
-
it '
|
|
6
|
-
@mb_obj = Mailgun::MessageBuilder.new
|
|
7
|
+
it 'is readable' do
|
|
8
|
+
@mb_obj = Mailgun::MessageBuilder.new
|
|
7
9
|
|
|
8
10
|
expect(@mb_obj).to respond_to(:message)
|
|
9
11
|
expect(@mb_obj).to respond_to(:counters)
|
|
@@ -11,9 +13,8 @@ describe 'MessageBuilder attribute readers' do
|
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
describe 'The instantiation of MessageBuilder' do
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
@mb_obj = Mailgun::MessageBuilder.new()
|
|
16
|
+
before do
|
|
17
|
+
@mb_obj = Mailgun::MessageBuilder.new
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
it 'contains counters, which should be of type hash and contain several important counters' do
|
|
@@ -36,10 +37,10 @@ describe 'The instantiation of MessageBuilder' do
|
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
describe 'The method add_recipient' do
|
|
39
|
-
before
|
|
40
|
+
before do
|
|
40
41
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
41
42
|
@address = 'jane@example.com'
|
|
42
|
-
@variables = {'first' => 'Jane', 'last' => 'Doe'}
|
|
43
|
+
@variables = { 'first' => 'Jane', 'last' => 'Doe' }
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
it 'adds a "to" recipient type to the message body and counter is incremented' do
|
|
@@ -55,7 +56,7 @@ describe 'The method add_recipient' do
|
|
|
55
56
|
recipient_type = :to
|
|
56
57
|
@mb_obj.add_recipient(recipient_type, @address, {})
|
|
57
58
|
|
|
58
|
-
expect(@mb_obj.message[recipient_type][0]).to eq(
|
|
59
|
+
expect(@mb_obj.message[recipient_type][0]).to eq(@address.to_s)
|
|
59
60
|
expect(@mb_obj.counters[:recipients][recipient_type]).to eq(1)
|
|
60
61
|
end
|
|
61
62
|
end
|
|
@@ -81,7 +82,7 @@ describe 'The method add_recipient' do
|
|
|
81
82
|
@mb_obj.add_recipient(recipient_type, @address, @variables)
|
|
82
83
|
|
|
83
84
|
expect(@mb_obj.message[recipient_type]).to eq("'#{@variables['first']} #{@variables['last']}' <#{@address}>")
|
|
84
|
-
@mb_obj.counters[:recipients].each_value{|value| expect(value).to eq(0)}
|
|
85
|
+
@mb_obj.counters[:recipients].each_value { |value| expect(value).to eq(0) }
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
it 'ensures a random recipient type is added to the message body and counters are not incremented' do
|
|
@@ -89,31 +90,37 @@ describe 'The method add_recipient' do
|
|
|
89
90
|
@mb_obj.add_recipient(recipient_type, @address, @variables)
|
|
90
91
|
|
|
91
92
|
expect(@mb_obj.message[recipient_type][0]).to eq("'#{@variables['first']} #{@variables['last']}' <#{@address}>")
|
|
92
|
-
@mb_obj.counters[:recipients].each_value{|value| expect(value).to eq(0)}
|
|
93
|
+
@mb_obj.counters[:recipients].each_value { |value| expect(value).to eq(0) }
|
|
93
94
|
end
|
|
95
|
+
|
|
94
96
|
it 'adds too many to recipients and raises an exception.' do
|
|
95
97
|
recipient_type = :to
|
|
96
98
|
|
|
97
|
-
expect
|
|
99
|
+
expect do
|
|
98
100
|
1001.times do
|
|
99
101
|
@mb_obj.add_recipient(recipient_type, @address, @variables)
|
|
100
|
-
|
|
102
|
+
end
|
|
103
|
+
end.to raise_error(Mailgun::ParameterError)
|
|
101
104
|
end
|
|
105
|
+
|
|
102
106
|
it 'adds too many cc recipients and raises an exception.' do
|
|
103
107
|
recipient_type = :cc
|
|
104
108
|
|
|
105
|
-
expect
|
|
109
|
+
expect do
|
|
106
110
|
1001.times do
|
|
107
111
|
@mb_obj.add_recipient(recipient_type, @address, @variables)
|
|
108
|
-
|
|
112
|
+
end
|
|
113
|
+
end.to raise_error(Mailgun::ParameterError)
|
|
109
114
|
end
|
|
115
|
+
|
|
110
116
|
it 'adds too many bcc recipients and raises an exception.' do
|
|
111
117
|
recipient_type = :bcc
|
|
112
118
|
|
|
113
|
-
expect
|
|
119
|
+
expect do
|
|
114
120
|
1001.times do
|
|
115
121
|
@mb_obj.add_recipient(recipient_type, @address, @variables)
|
|
116
|
-
|
|
122
|
+
end
|
|
123
|
+
end.to raise_error(Mailgun::ParameterError)
|
|
117
124
|
end
|
|
118
125
|
end
|
|
119
126
|
|
|
@@ -126,7 +133,7 @@ describe 'The method set_subject' do
|
|
|
126
133
|
end
|
|
127
134
|
|
|
128
135
|
describe 'The method subject' do
|
|
129
|
-
before
|
|
136
|
+
before do
|
|
130
137
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
131
138
|
end
|
|
132
139
|
|
|
@@ -163,18 +170,21 @@ describe 'The method set_text_body' do
|
|
|
163
170
|
end
|
|
164
171
|
|
|
165
172
|
describe 'The method body_text' do
|
|
166
|
-
before
|
|
173
|
+
before do
|
|
167
174
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
168
175
|
end
|
|
176
|
+
|
|
169
177
|
it 'sets the body_text to blank if called and no parameters are provided' do
|
|
170
178
|
@mb_obj.body_text
|
|
171
179
|
@mb_obj.message[:text] = ''
|
|
172
180
|
end
|
|
181
|
+
|
|
173
182
|
it 'sets the message text if called with the body_text parameter' do
|
|
174
183
|
the_text = 'Don\'t mess with Texas!'
|
|
175
184
|
@mb_obj.body_text(the_text)
|
|
176
185
|
@mb_obj.message[:text] = the_text
|
|
177
186
|
end
|
|
187
|
+
|
|
178
188
|
it 'ensures no duplicate text bodies can exist and last setter is stored' do
|
|
179
189
|
the_first_text = 'Mess with Texas!'
|
|
180
190
|
the_second_text = 'Don\'t mess with Texas!'
|
|
@@ -195,7 +205,6 @@ describe 'The method amp_html' do
|
|
|
195
205
|
expect(@mb_obj.message['amp-html']).to eq(the_text)
|
|
196
206
|
end
|
|
197
207
|
end
|
|
198
|
-
|
|
199
208
|
|
|
200
209
|
describe 'The method set_from_address' do
|
|
201
210
|
it 'warns of set_from_address deprecation' do
|
|
@@ -206,7 +215,7 @@ describe 'The method set_from_address' do
|
|
|
206
215
|
end
|
|
207
216
|
|
|
208
217
|
describe 'The method from' do
|
|
209
|
-
before
|
|
218
|
+
before do
|
|
210
219
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
211
220
|
end
|
|
212
221
|
|
|
@@ -221,7 +230,7 @@ describe 'The method from' do
|
|
|
221
230
|
the_from_address = 'test@mailgun.com'
|
|
222
231
|
the_first_name = 'Magilla'
|
|
223
232
|
the_last_name = 'Gorilla'
|
|
224
|
-
@mb_obj.from(the_from_address, {'first' => the_first_name, 'last' => the_last_name})
|
|
233
|
+
@mb_obj.from(the_from_address, { 'first' => the_first_name, 'last' => the_last_name })
|
|
225
234
|
|
|
226
235
|
expect(@mb_obj.message[:from]).to eq(["'#{the_first_name} #{the_last_name}' <#{the_from_address}>"])
|
|
227
236
|
end
|
|
@@ -229,7 +238,7 @@ describe 'The method from' do
|
|
|
229
238
|
it 'sets the from address with full name metadata' do
|
|
230
239
|
the_from_address = 'test@mailgun.com'
|
|
231
240
|
full_name = 'Magilla Gorilla'
|
|
232
|
-
@mb_obj.from(the_from_address, {'full_name' => full_name})
|
|
241
|
+
@mb_obj.from(the_from_address, { 'full_name' => full_name })
|
|
233
242
|
|
|
234
243
|
expect(@mb_obj.message[:from]).to eq(["'#{full_name}' <#{the_from_address}>"])
|
|
235
244
|
end
|
|
@@ -238,29 +247,29 @@ describe 'The method from' do
|
|
|
238
247
|
the_from_address = 'test@mailgun.com'
|
|
239
248
|
full_name = 'Magilla Gorilla'
|
|
240
249
|
first_name = 'Magilla'
|
|
241
|
-
expect{@mb_obj.from(the_from_address, {'full_name' => full_name, 'first' => first_name})}.to raise_error(Mailgun::ParameterError)
|
|
250
|
+
expect { @mb_obj.from(the_from_address, { 'full_name' => full_name, 'first' => first_name }) }.to raise_error(Mailgun::ParameterError)
|
|
242
251
|
end
|
|
243
252
|
end
|
|
244
253
|
|
|
245
254
|
describe 'The method add_attachment' do
|
|
246
|
-
before
|
|
255
|
+
before do
|
|
247
256
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
248
257
|
end
|
|
249
|
-
it 'adds a few file paths to the message object' do
|
|
250
258
|
|
|
251
|
-
|
|
252
|
-
|
|
259
|
+
it 'adds a few file paths to the message object' do
|
|
260
|
+
file1 = "#{File.dirname(__FILE__)}/sample_data/mailgun_icon.png"
|
|
261
|
+
file2 = "#{File.dirname(__FILE__)}/sample_data/rackspace_logo.jpg"
|
|
253
262
|
|
|
254
263
|
file_paths = [file1, file2]
|
|
255
264
|
|
|
256
|
-
file_paths.each {|item| @mb_obj.add_attachment(item)}
|
|
265
|
+
file_paths.each { |item| @mb_obj.add_attachment(item) }
|
|
257
266
|
|
|
258
267
|
expect(@mb_obj.message[:attachment].length).to eq(2)
|
|
259
268
|
end
|
|
260
269
|
|
|
261
270
|
it 'adds file-like objects to the message object' do
|
|
262
271
|
io = StringIO.new
|
|
263
|
-
io << File.binread(File.dirname(__FILE__)
|
|
272
|
+
io << File.binread("#{File.dirname(__FILE__)}/sample_data/mailgun_icon.png")
|
|
264
273
|
|
|
265
274
|
@mb_obj.add_attachment io, 'cool_attachment.png'
|
|
266
275
|
|
|
@@ -271,7 +280,7 @@ describe 'The method add_attachment' do
|
|
|
271
280
|
|
|
272
281
|
context 'when attachment has unknown type' do
|
|
273
282
|
it 'sets content type application/octet-stream for attachment' do
|
|
274
|
-
file = File.dirname(__FILE__)
|
|
283
|
+
file = "#{File.dirname(__FILE__)}/sample_data/unknown.type"
|
|
275
284
|
|
|
276
285
|
@mb_obj.add_attachment(file)
|
|
277
286
|
|
|
@@ -281,23 +290,24 @@ describe 'The method add_attachment' do
|
|
|
281
290
|
end
|
|
282
291
|
|
|
283
292
|
describe 'The method add_inline_image' do
|
|
284
|
-
before
|
|
293
|
+
before do
|
|
285
294
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
286
295
|
end
|
|
296
|
+
|
|
287
297
|
it 'adds a few file paths to the message object' do
|
|
288
|
-
file1 = File.dirname(__FILE__)
|
|
289
|
-
file2 = File.dirname(__FILE__)
|
|
298
|
+
file1 = "#{File.dirname(__FILE__)}/sample_data/mailgun_icon.png"
|
|
299
|
+
file2 = "#{File.dirname(__FILE__)}/sample_data/rackspace_logo.jpg"
|
|
290
300
|
|
|
291
301
|
file_paths = [file1, file2]
|
|
292
302
|
|
|
293
|
-
file_paths.each {|item| @mb_obj.add_inline_image(item)}
|
|
303
|
+
file_paths.each { |item| @mb_obj.add_inline_image(item) }
|
|
294
304
|
|
|
295
305
|
expect(@mb_obj.message[:inline].length).to eq(2)
|
|
296
306
|
end
|
|
297
307
|
end
|
|
298
308
|
|
|
299
309
|
describe 'The method list_unsubscribe' do
|
|
300
|
-
before
|
|
310
|
+
before do
|
|
301
311
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
302
312
|
end
|
|
303
313
|
|
|
@@ -313,7 +323,7 @@ describe 'The method list_unsubscribe' do
|
|
|
313
323
|
end
|
|
314
324
|
|
|
315
325
|
it 'sets the message list_unsubscribe if called with many list_unsubscribe parameters' do
|
|
316
|
-
unsubscribe_to = %w
|
|
326
|
+
unsubscribe_to = %w[http://example.com/stop-hassle mailto:stop-hassle@example.com]
|
|
317
327
|
@mb_obj.list_unsubscribe(*unsubscribe_to)
|
|
318
328
|
expect(@mb_obj.message['h:List-Unsubscribe']).to eq(
|
|
319
329
|
unsubscribe_to.map { |var| "<#{var}>" }.join(',')
|
|
@@ -321,207 +331,195 @@ describe 'The method list_unsubscribe' do
|
|
|
321
331
|
end
|
|
322
332
|
end
|
|
323
333
|
|
|
324
|
-
describe 'The method set_test_mode' do
|
|
325
|
-
it 'warns of set_test_mode deprecation' do
|
|
326
|
-
@mb_obj = Mailgun::MessageBuilder.new
|
|
327
|
-
expect(@mb_obj).to receive :warn
|
|
328
|
-
@mb_obj.set_test_mode 'Yes'
|
|
329
|
-
end
|
|
330
|
-
end
|
|
331
|
-
|
|
332
334
|
describe 'The method test_mode' do
|
|
333
|
-
before
|
|
335
|
+
before do
|
|
334
336
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
335
337
|
end
|
|
338
|
+
|
|
336
339
|
it 'turns on test mode with boolean true' do
|
|
337
340
|
@mb_obj.test_mode(true)
|
|
338
341
|
|
|
339
|
-
expect(@mb_obj.message[
|
|
342
|
+
expect(@mb_obj.message['o:testmode'][0]).to eq('yes')
|
|
340
343
|
end
|
|
344
|
+
|
|
341
345
|
it 'turns on test mode with string true' do
|
|
342
|
-
@mb_obj.test_mode(
|
|
346
|
+
@mb_obj.test_mode('true')
|
|
343
347
|
|
|
344
|
-
expect(@mb_obj.message[
|
|
348
|
+
expect(@mb_obj.message['o:testmode'][0]).to eq('yes')
|
|
345
349
|
end
|
|
350
|
+
|
|
346
351
|
it 'turns off test mode with boolean false' do
|
|
347
352
|
@mb_obj.test_mode(false)
|
|
348
353
|
|
|
349
|
-
expect(@mb_obj.message[
|
|
354
|
+
expect(@mb_obj.message['o:testmode'][0]).to eq('no')
|
|
350
355
|
end
|
|
356
|
+
|
|
351
357
|
it 'turns off test mode with string false' do
|
|
352
|
-
@mb_obj.test_mode(
|
|
358
|
+
@mb_obj.test_mode('false')
|
|
353
359
|
|
|
354
|
-
expect(@mb_obj.message[
|
|
360
|
+
expect(@mb_obj.message['o:testmode'][0]).to eq('no')
|
|
355
361
|
end
|
|
362
|
+
|
|
356
363
|
it 'does not allow multiple values' do
|
|
357
|
-
@mb_obj.test_mode(
|
|
358
|
-
@mb_obj.test_mode(
|
|
359
|
-
@mb_obj.test_mode(
|
|
364
|
+
@mb_obj.test_mode('false')
|
|
365
|
+
@mb_obj.test_mode('true')
|
|
366
|
+
@mb_obj.test_mode('false')
|
|
360
367
|
|
|
361
|
-
expect(@mb_obj.message[
|
|
362
|
-
expect(@mb_obj.message[
|
|
363
|
-
end
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
describe 'The method set_dkim' do
|
|
367
|
-
it 'warns of set_dkim deprecation' do
|
|
368
|
-
@mb_obj = Mailgun::MessageBuilder.new
|
|
369
|
-
expect(@mb_obj).to receive :warn
|
|
370
|
-
@mb_obj.set_dkim 'Yes'
|
|
368
|
+
expect(@mb_obj.message['o:testmode'].length).to eq(1)
|
|
369
|
+
expect(@mb_obj.message['o:testmode'][0]).to eq('no')
|
|
371
370
|
end
|
|
372
371
|
end
|
|
373
372
|
|
|
374
373
|
describe 'The method dkim' do
|
|
375
|
-
before
|
|
374
|
+
before do
|
|
376
375
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
377
376
|
end
|
|
377
|
+
|
|
378
378
|
it 'turns on dkim with boolean true' do
|
|
379
379
|
@mb_obj.dkim(true)
|
|
380
380
|
|
|
381
|
-
expect(@mb_obj.message[
|
|
381
|
+
expect(@mb_obj.message['o:dkim'][0]).to eq('yes')
|
|
382
382
|
end
|
|
383
|
+
|
|
383
384
|
it 'turns on dkim with string true' do
|
|
384
|
-
@mb_obj.dkim(
|
|
385
|
+
@mb_obj.dkim('true')
|
|
385
386
|
|
|
386
|
-
expect(@mb_obj.message[
|
|
387
|
+
expect(@mb_obj.message['o:dkim'][0]).to eq('yes')
|
|
387
388
|
end
|
|
389
|
+
|
|
388
390
|
it 'turns off dkim with boolean false' do
|
|
389
391
|
@mb_obj.dkim(false)
|
|
390
392
|
|
|
391
|
-
expect(@mb_obj.message[
|
|
393
|
+
expect(@mb_obj.message['o:dkim'][0]).to eq('no')
|
|
392
394
|
end
|
|
395
|
+
|
|
393
396
|
it 'turns off dkim with string false' do
|
|
394
|
-
@mb_obj.dkim(
|
|
397
|
+
@mb_obj.dkim('false')
|
|
395
398
|
|
|
396
|
-
expect(@mb_obj.message[
|
|
399
|
+
expect(@mb_obj.message['o:dkim'][0]).to eq('no')
|
|
397
400
|
end
|
|
401
|
+
|
|
398
402
|
it 'does not allow multiple values' do
|
|
399
|
-
@mb_obj.dkim(
|
|
400
|
-
@mb_obj.dkim(
|
|
401
|
-
@mb_obj.dkim(
|
|
403
|
+
@mb_obj.dkim('false')
|
|
404
|
+
@mb_obj.dkim('true')
|
|
405
|
+
@mb_obj.dkim('false')
|
|
402
406
|
|
|
403
|
-
expect(@mb_obj.message[
|
|
404
|
-
expect(@mb_obj.message[
|
|
407
|
+
expect(@mb_obj.message['o:dkim'].length).to eq(1)
|
|
408
|
+
expect(@mb_obj.message['o:dkim'][0]).to eq('no')
|
|
405
409
|
end
|
|
406
410
|
end
|
|
407
411
|
|
|
408
412
|
describe 'The method add_campaign_id' do
|
|
409
|
-
before
|
|
413
|
+
before do
|
|
410
414
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
411
415
|
end
|
|
416
|
+
|
|
412
417
|
it 'adds a campaign ID to the message' do
|
|
413
418
|
@mb_obj.add_campaign_id('My-Campaign-Id-1')
|
|
414
419
|
|
|
415
|
-
expect(@mb_obj.message[
|
|
420
|
+
expect(@mb_obj.message['o:campaign'][0]).to eq('My-Campaign-Id-1')
|
|
416
421
|
end
|
|
422
|
+
|
|
417
423
|
it 'adds a few more campaign IDs to the message' do
|
|
418
424
|
@mb_obj.add_campaign_id('My-Campaign-Id-1')
|
|
419
425
|
@mb_obj.add_campaign_id('My-Campaign-Id-2')
|
|
420
426
|
@mb_obj.add_campaign_id('My-Campaign-Id-3')
|
|
421
427
|
|
|
422
|
-
expect(@mb_obj.message[
|
|
423
|
-
expect(@mb_obj.message[
|
|
424
|
-
expect(@mb_obj.message[
|
|
428
|
+
expect(@mb_obj.message['o:campaign'][0]).to eq('My-Campaign-Id-1')
|
|
429
|
+
expect(@mb_obj.message['o:campaign'][1]).to eq('My-Campaign-Id-2')
|
|
430
|
+
expect(@mb_obj.message['o:campaign'][2]).to eq('My-Campaign-Id-3')
|
|
425
431
|
end
|
|
432
|
+
|
|
426
433
|
it 'adds too many campaign IDs to the message' do
|
|
427
|
-
expect
|
|
434
|
+
expect do
|
|
428
435
|
10.times do
|
|
429
436
|
@mb_obj.add_campaign_id('Test-Campaign-ID')
|
|
430
|
-
|
|
437
|
+
end
|
|
438
|
+
end.to raise_error(Mailgun::ParameterError)
|
|
431
439
|
end
|
|
432
440
|
end
|
|
433
441
|
|
|
434
442
|
describe 'The method add_tag' do
|
|
435
|
-
before
|
|
443
|
+
before do
|
|
436
444
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
437
445
|
end
|
|
446
|
+
|
|
438
447
|
it 'adds a tag to the message' do
|
|
439
448
|
@mb_obj.add_tag('My-Tag-1')
|
|
440
449
|
|
|
441
|
-
expect(@mb_obj.message[
|
|
450
|
+
expect(@mb_obj.message['o:tag'][0]).to eq('My-Tag-1')
|
|
442
451
|
end
|
|
452
|
+
|
|
443
453
|
it 'adds a few more tags to the message' do
|
|
444
454
|
@mb_obj.add_tag('My-Tag-1')
|
|
445
455
|
@mb_obj.add_tag('My-Tag-2')
|
|
446
456
|
@mb_obj.add_tag('My-Tag-3')
|
|
447
457
|
|
|
448
|
-
expect(@mb_obj.message[
|
|
449
|
-
expect(@mb_obj.message[
|
|
450
|
-
expect(@mb_obj.message[
|
|
458
|
+
expect(@mb_obj.message['o:tag'][0]).to eq('My-Tag-1')
|
|
459
|
+
expect(@mb_obj.message['o:tag'][1]).to eq('My-Tag-2')
|
|
460
|
+
expect(@mb_obj.message['o:tag'][2]).to eq('My-Tag-3')
|
|
451
461
|
end
|
|
462
|
+
|
|
452
463
|
it 'adds too many tags to the message' do
|
|
453
|
-
expect
|
|
464
|
+
expect do
|
|
454
465
|
12.times do
|
|
455
466
|
@mb_obj.add_tag('My-Tag')
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
end
|
|
459
|
-
|
|
460
|
-
describe 'The method set_open_tracking' do
|
|
461
|
-
it 'warns of set_open_tracking deprecation' do
|
|
462
|
-
@mb_obj = Mailgun::MessageBuilder.new
|
|
463
|
-
expect(@mb_obj).to receive :warn
|
|
464
|
-
@mb_obj.set_open_tracking 'Yes'
|
|
467
|
+
end
|
|
468
|
+
end.to raise_error(Mailgun::ParameterError)
|
|
465
469
|
end
|
|
466
470
|
end
|
|
467
471
|
|
|
468
472
|
describe 'The method track_opens' do
|
|
469
|
-
before
|
|
473
|
+
before do
|
|
470
474
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
471
475
|
end
|
|
476
|
+
|
|
472
477
|
it 'enables/disables open tracking on a per message basis.' do
|
|
473
478
|
@mb_obj.track_opens('Yes')
|
|
474
479
|
|
|
475
|
-
expect(@mb_obj.message[
|
|
476
|
-
expect(@mb_obj.message[
|
|
480
|
+
expect(@mb_obj.message['o:tracking-opens']).to eq('yes')
|
|
481
|
+
expect(@mb_obj.message['o:tracking']).to eq(['yes'])
|
|
477
482
|
|
|
478
483
|
@mb_obj.track_opens('No')
|
|
479
484
|
|
|
480
|
-
expect(@mb_obj.message[
|
|
485
|
+
expect(@mb_obj.message['o:tracking-opens']).to eq('no')
|
|
481
486
|
|
|
482
487
|
@mb_obj.track_opens(true)
|
|
483
488
|
|
|
484
|
-
expect(@mb_obj.message[
|
|
489
|
+
expect(@mb_obj.message['o:tracking-opens']).to eq('yes')
|
|
485
490
|
|
|
486
491
|
@mb_obj.track_opens(false)
|
|
487
492
|
|
|
488
|
-
expect(@mb_obj.message[
|
|
489
|
-
end
|
|
490
|
-
end
|
|
491
|
-
|
|
492
|
-
describe 'The method set_click_tracking' do
|
|
493
|
-
it 'warns of set_click_tracking deprecation' do
|
|
494
|
-
@mb_obj = Mailgun::MessageBuilder.new
|
|
495
|
-
expect(@mb_obj).to receive :warn
|
|
496
|
-
@mb_obj.set_click_tracking 'Yes'
|
|
493
|
+
expect(@mb_obj.message['o:tracking-opens']).to eq('no')
|
|
497
494
|
end
|
|
498
495
|
end
|
|
499
496
|
|
|
500
497
|
describe 'The method track_clicks' do
|
|
501
|
-
before
|
|
498
|
+
before do
|
|
502
499
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
503
500
|
end
|
|
501
|
+
|
|
504
502
|
it 'enables/disables click tracking on a per message basis.' do
|
|
505
503
|
@mb_obj.track_clicks('Yes')
|
|
506
504
|
|
|
507
|
-
expect(@mb_obj.message[
|
|
508
|
-
expect(@mb_obj.message[
|
|
505
|
+
expect(@mb_obj.message['o:tracking-clicks']).to eq('yes')
|
|
506
|
+
expect(@mb_obj.message['o:tracking']).to eq(['yes'])
|
|
509
507
|
|
|
510
508
|
@mb_obj.track_clicks('No')
|
|
511
509
|
|
|
512
|
-
expect(@mb_obj.message[
|
|
510
|
+
expect(@mb_obj.message['o:tracking-clicks']).to eq('no')
|
|
513
511
|
|
|
514
512
|
@mb_obj.track_clicks(true)
|
|
515
513
|
|
|
516
|
-
expect(@mb_obj.message[
|
|
514
|
+
expect(@mb_obj.message['o:tracking-clicks']).to eq('yes')
|
|
517
515
|
|
|
518
516
|
@mb_obj.track_clicks(false)
|
|
519
517
|
|
|
520
|
-
expect(@mb_obj.message[
|
|
518
|
+
expect(@mb_obj.message['o:tracking-clicks']).to eq('no')
|
|
521
519
|
|
|
522
520
|
@mb_obj.track_clicks('html')
|
|
523
521
|
|
|
524
|
-
expect(@mb_obj.message[
|
|
522
|
+
expect(@mb_obj.message['o:tracking-clicks']).to eq('html')
|
|
525
523
|
end
|
|
526
524
|
|
|
527
525
|
context 'when unexpected value is provided' do
|
|
@@ -532,22 +530,15 @@ describe 'The method track_clicks' do
|
|
|
532
530
|
end
|
|
533
531
|
end
|
|
534
532
|
|
|
535
|
-
describe 'The method set_delivery_time' do
|
|
536
|
-
it 'warns of set_delivery_time deprecation' do
|
|
537
|
-
@mb_obj = Mailgun::MessageBuilder.new
|
|
538
|
-
expect(@mb_obj).to receive :warn
|
|
539
|
-
@mb_obj.set_delivery_time 'October 25, 2013 10:00PM CST'
|
|
540
|
-
end
|
|
541
|
-
end
|
|
542
|
-
|
|
543
533
|
describe 'The method deliver_at' do
|
|
544
|
-
before
|
|
534
|
+
before do
|
|
545
535
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
546
536
|
end
|
|
537
|
+
|
|
547
538
|
it 'defines a time/date to deliver a message in RFC2822 format.' do
|
|
548
539
|
@mb_obj.deliver_at('October 25, 2013 10:00PM CST')
|
|
549
540
|
|
|
550
|
-
expect(@mb_obj.message[
|
|
541
|
+
expect(@mb_obj.message['o:deliverytime'][0]).to eq('Fri, 25 Oct 2013 22:00:00 -0600')
|
|
551
542
|
end
|
|
552
543
|
end
|
|
553
544
|
|
|
@@ -560,52 +551,57 @@ describe 'The method set_custom_data' do
|
|
|
560
551
|
end
|
|
561
552
|
|
|
562
553
|
describe 'The method header' do
|
|
563
|
-
before
|
|
554
|
+
before do
|
|
564
555
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
565
556
|
end
|
|
557
|
+
|
|
566
558
|
it 'accepts valid JSON and appends as data to the message.' do
|
|
567
559
|
@mb_obj.header('my-data', '{"key":"value"}')
|
|
568
560
|
|
|
569
|
-
expect(@mb_obj.message[
|
|
570
|
-
expect(@mb_obj.message[
|
|
561
|
+
expect(@mb_obj.message['h:my-data']).to be_a(String)
|
|
562
|
+
expect(@mb_obj.message['h:my-data'].to_s).to eq('{"key":"value"}')
|
|
571
563
|
end
|
|
572
564
|
end
|
|
573
565
|
|
|
574
566
|
describe 'The method variable' do
|
|
575
|
-
before
|
|
567
|
+
before do
|
|
576
568
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
577
569
|
end
|
|
570
|
+
|
|
578
571
|
it 'accepts valid JSON and stores it as message[param].' do
|
|
579
572
|
@mb_obj.variable('my-data', '{"key":"value"}')
|
|
580
573
|
|
|
581
|
-
expect(@mb_obj.message[
|
|
582
|
-
expect(@mb_obj.message[
|
|
574
|
+
expect(@mb_obj.message['v:my-data']).to be_a(String)
|
|
575
|
+
expect(@mb_obj.message['v:my-data'].to_s).to eq('{"key":"value"}')
|
|
583
576
|
end
|
|
577
|
+
|
|
584
578
|
it 'accepts a hash and appends as data to the message.' do
|
|
585
|
-
data = {'key' => 'value'}
|
|
579
|
+
data = { 'key' => 'value' }
|
|
586
580
|
@mb_obj.variable('my-data', data)
|
|
587
581
|
|
|
588
|
-
expect(@mb_obj.message[
|
|
589
|
-
expect(@mb_obj.message[
|
|
582
|
+
expect(@mb_obj.message['v:my-data']).to be_a(String)
|
|
583
|
+
expect(@mb_obj.message['v:my-data'].to_s).to eq('{"key":"value"}')
|
|
590
584
|
end
|
|
585
|
+
|
|
591
586
|
it 'accepts string values' do
|
|
592
587
|
data = 'String Value.'
|
|
593
588
|
|
|
594
589
|
@mb_obj.variable('my-data', data)
|
|
595
590
|
|
|
596
|
-
expect(@mb_obj.message[
|
|
597
|
-
expect(@mb_obj.message[
|
|
591
|
+
expect(@mb_obj.message['v:my-data']).to be_a(String)
|
|
592
|
+
expect(@mb_obj.message['v:my-data'].to_s).to eq('String Value.')
|
|
598
593
|
end
|
|
599
594
|
end
|
|
600
595
|
|
|
601
596
|
describe 'The method add_custom_parameter' do
|
|
602
|
-
before
|
|
597
|
+
before do
|
|
603
598
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
604
599
|
end
|
|
600
|
+
|
|
605
601
|
it 'adds an undefined parameter to the message.' do
|
|
606
602
|
@mb_obj.add_custom_parameter('h:my-sweet-header', 'datagoeshere')
|
|
607
603
|
|
|
608
|
-
expect(@mb_obj.message[
|
|
604
|
+
expect(@mb_obj.message['h:my-sweet-header'][0]).to eq('datagoeshere')
|
|
609
605
|
end
|
|
610
606
|
end
|
|
611
607
|
|
|
@@ -618,35 +614,39 @@ describe 'The method set_message_id' do
|
|
|
618
614
|
end
|
|
619
615
|
|
|
620
616
|
describe 'The method message_id' do
|
|
621
|
-
before
|
|
617
|
+
before do
|
|
622
618
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
623
619
|
@the_message_id = '<20141014000000.11111.11111@example.com>'
|
|
624
620
|
end
|
|
621
|
+
|
|
625
622
|
it 'correctly sets the Message-Id header' do
|
|
626
623
|
@mb_obj.message_id(@the_message_id)
|
|
627
624
|
|
|
628
625
|
expect(@mb_obj.message['h:Message-Id']).to eq(@the_message_id)
|
|
629
626
|
end
|
|
627
|
+
|
|
630
628
|
it 'correctly clears the Message-Id header when passed nil' do
|
|
631
629
|
@mb_obj.message_id(nil)
|
|
632
630
|
|
|
633
|
-
expect(@mb_obj.message.
|
|
631
|
+
expect(@mb_obj.message.key?('h:Message-Id')).to be(false)
|
|
634
632
|
end
|
|
633
|
+
|
|
635
634
|
it 'correctly sets the Message-Id header when passed an empty string' do
|
|
636
635
|
@mb_obj.message_id(@the_message_id)
|
|
637
636
|
|
|
638
|
-
expect(@mb_obj.message.
|
|
637
|
+
expect(@mb_obj.message.key?('h:Message-Id')).to be(true)
|
|
639
638
|
|
|
640
639
|
@mb_obj.message_id('')
|
|
641
640
|
|
|
642
|
-
expect(@mb_obj.message.
|
|
641
|
+
expect(@mb_obj.message.key?('h:Message-Id')).to be(false)
|
|
643
642
|
end
|
|
644
643
|
end
|
|
645
644
|
|
|
646
645
|
describe 'The method template' do
|
|
647
|
-
before
|
|
646
|
+
before do
|
|
648
647
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
649
648
|
end
|
|
649
|
+
|
|
650
650
|
context 'when template name is passed' do
|
|
651
651
|
it 'sets `template` to the message' do
|
|
652
652
|
template_name = 'template.name'
|
|
@@ -658,33 +658,34 @@ describe 'The method template' do
|
|
|
658
658
|
|
|
659
659
|
context 'when multiple values are passed' do
|
|
660
660
|
it 'sets the last value as message template' do
|
|
661
|
-
|
|
662
|
-
|
|
661
|
+
template_name1 = 'template.name_1'
|
|
662
|
+
template_name2 = 'template.name_2'
|
|
663
663
|
|
|
664
|
-
@mb_obj.template(
|
|
665
|
-
@mb_obj.template(
|
|
664
|
+
@mb_obj.template(template_name1)
|
|
665
|
+
@mb_obj.template(template_name2)
|
|
666
666
|
|
|
667
|
-
expect(@mb_obj.message['template']).to eq(
|
|
667
|
+
expect(@mb_obj.message['template']).to eq(template_name2)
|
|
668
668
|
end
|
|
669
669
|
end
|
|
670
670
|
|
|
671
671
|
context 'when template name is not passed' do
|
|
672
|
-
it '
|
|
672
|
+
it 'deletes `template` key from the message' do
|
|
673
673
|
@mb_obj.template('template.name')
|
|
674
674
|
|
|
675
|
-
expect(@mb_obj.message.
|
|
675
|
+
expect(@mb_obj.message.key?('template')).to be(true)
|
|
676
676
|
|
|
677
677
|
@mb_obj.template
|
|
678
678
|
|
|
679
|
-
expect(@mb_obj.message.
|
|
679
|
+
expect(@mb_obj.message.key?('template')).to be(false)
|
|
680
680
|
end
|
|
681
681
|
end
|
|
682
682
|
end
|
|
683
683
|
|
|
684
684
|
describe 'The method template_version' do
|
|
685
|
-
before
|
|
685
|
+
before do
|
|
686
686
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
687
687
|
end
|
|
688
|
+
|
|
688
689
|
context 'when template version is passed' do
|
|
689
690
|
it 'adds `t:version` key value to the message' do
|
|
690
691
|
version = 'version_1'
|
|
@@ -696,49 +697,49 @@ describe 'The method template_version' do
|
|
|
696
697
|
|
|
697
698
|
context 'when multiple values are passed' do
|
|
698
699
|
it 'adds the last value as `t:version` key value to the message' do
|
|
699
|
-
|
|
700
|
-
|
|
700
|
+
version1 = 'version_1'
|
|
701
|
+
version2 = 'version_2'
|
|
701
702
|
|
|
702
|
-
@mb_obj.template_version(
|
|
703
|
-
@mb_obj.template_version(
|
|
703
|
+
@mb_obj.template_version(version1)
|
|
704
|
+
@mb_obj.template_version(version2)
|
|
704
705
|
|
|
705
|
-
expect(@mb_obj.message['t:version']).to eq(
|
|
706
|
+
expect(@mb_obj.message['t:version']).to eq(version2)
|
|
706
707
|
end
|
|
707
708
|
end
|
|
708
709
|
|
|
709
710
|
context 'when version is not passed' do
|
|
710
|
-
it '
|
|
711
|
+
it 'deletes `t:version` key from the message' do
|
|
711
712
|
@mb_obj.template_version('version')
|
|
712
713
|
|
|
713
|
-
expect(@mb_obj.message.
|
|
714
|
+
expect(@mb_obj.message.key?('t:version')).to be(true)
|
|
714
715
|
|
|
715
716
|
@mb_obj.template_version
|
|
716
717
|
|
|
717
|
-
expect(@mb_obj.message.
|
|
718
|
+
expect(@mb_obj.message.key?('t:version')).to be(false)
|
|
718
719
|
end
|
|
719
720
|
end
|
|
720
721
|
end
|
|
721
722
|
|
|
722
723
|
describe 'The method template_text' do
|
|
723
|
-
before
|
|
724
|
+
before do
|
|
724
725
|
@mb_obj = Mailgun::MessageBuilder.new
|
|
725
726
|
end
|
|
726
727
|
|
|
727
728
|
it 'enables/disables rendering in the text part of the message in case of template sending' do
|
|
728
729
|
@mb_obj.template_text('Yes')
|
|
729
730
|
|
|
730
|
-
expect(@mb_obj.message[
|
|
731
|
+
expect(@mb_obj.message['t:text']).to eq('yes')
|
|
731
732
|
|
|
732
733
|
@mb_obj.template_text('No')
|
|
733
734
|
|
|
734
|
-
expect(@mb_obj.message[
|
|
735
|
+
expect(@mb_obj.message['t:text']).to eq('no')
|
|
735
736
|
|
|
736
737
|
@mb_obj.template_text(true)
|
|
737
738
|
|
|
738
|
-
expect(@mb_obj.message[
|
|
739
|
+
expect(@mb_obj.message['t:text']).to eq('yes')
|
|
739
740
|
|
|
740
741
|
@mb_obj.template_text(false)
|
|
741
742
|
|
|
742
|
-
expect(@mb_obj.message[
|
|
743
|
+
expect(@mb_obj.message['t:text']).to eq('no')
|
|
743
744
|
end
|
|
744
745
|
end
|