mandrill_dm 1.3.10

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.
@@ -0,0 +1,752 @@
1
+ require 'spec_helper'
2
+
3
+ describe MandrillDm::Message do
4
+ def new_mail(options = {}, &blk)
5
+ Mail.new(options, &blk)
6
+ end
7
+
8
+ describe '#attachments' do
9
+ it 'takes an attachment' do
10
+ mail = new_mail(to: 'name@domain.tld', content_type: 'multipart/alternative')
11
+ mail.attachments['text.txt'] = {
12
+ mime_type: 'text/plain',
13
+ content: 'This is a test'
14
+ }
15
+
16
+ message = described_class.new(mail)
17
+ expect(message.attachments).to eq(
18
+ [{ name: 'text.txt', type: 'text/plain', content: "VGhpcyBpcyBhIHRlc3Q=\n" }]
19
+ )
20
+ end
21
+
22
+ it 'ignores inline attachments' do
23
+ mail = new_mail(to: 'name@domain.tld', content_type: 'multipart/alternative')
24
+ mail.attachments.inline['text.txt'] = {
25
+ mime_type: 'text/plain',
26
+ content: 'This is a test'
27
+ }
28
+
29
+ message = described_class.new(mail)
30
+ expect(message.attachments).to eq([])
31
+ end
32
+ end
33
+
34
+ describe '#auto_html' do
35
+ it 'takes a auto_html with true' do
36
+ mail = new_mail(auto_html: true)
37
+ message = described_class.new(mail)
38
+ expect(message.auto_html).to be true
39
+ end
40
+
41
+ it 'takes a auto_html with false' do
42
+ mail = new_mail(auto_html: false)
43
+ message = described_class.new(mail)
44
+ expect(message.auto_html).to be false
45
+ end
46
+
47
+ it 'does not take an auto_html value' do
48
+ mail = new_mail
49
+ message = described_class.new(mail)
50
+ expect(message.auto_html).to be_nil
51
+ end
52
+ end
53
+
54
+ describe '#auto_text' do
55
+ it 'takes a auto_text with true' do
56
+ mail = new_mail(auto_text: true)
57
+ message = described_class.new(mail)
58
+ expect(message.auto_text).to be true
59
+ end
60
+
61
+ it 'takes a auto_text with false' do
62
+ mail = new_mail(auto_text: false)
63
+ message = described_class.new(mail)
64
+ expect(message.auto_text).to be false
65
+ end
66
+
67
+ it 'does not take an auto_text value' do
68
+ mail = new_mail
69
+ message = described_class.new(mail)
70
+ expect(message.auto_text).to be_nil
71
+ end
72
+ end
73
+
74
+ describe '#bcc_address' do
75
+ it 'takes a bcc_address' do
76
+ mail = new_mail(bcc_address: 'bart@simpsons.com')
77
+ message = described_class.new(mail)
78
+ expect(message.bcc_address).to eq('bart@simpsons.com')
79
+ end
80
+
81
+ it 'does not take bcc_address value' do
82
+ mail = new_mail
83
+ message = described_class.new(mail)
84
+ expect(message.bcc_address).to be_nil
85
+ end
86
+ end
87
+
88
+ describe '#from_email' do
89
+ it 'takes a single email' do
90
+ mail = new_mail(from: 'from_name@domain.tld')
91
+ message = described_class.new(mail)
92
+ expect(message.from_email).to eq('from_name@domain.tld')
93
+ end
94
+
95
+ it 'takes a single email with a display name' do
96
+ mail = new_mail(from: 'John Doe <from_name@domain.tld>')
97
+ message = described_class.new(mail)
98
+ expect(message.from_email).to eq('from_name@domain.tld')
99
+ end
100
+ end
101
+
102
+ describe '#from_name' do
103
+ it 'takes a single email' do
104
+ mail = new_mail(from: 'from_name@domain.tld')
105
+ message = described_class.new(mail)
106
+ expect(message.from_name).to eq(nil)
107
+ end
108
+
109
+ it 'takes a single email with a display name' do
110
+ mail = new_mail(from: 'John Doe <from_name@domain.tld>')
111
+ message = described_class.new(mail)
112
+ expect(message.from_name).to eq('John Doe')
113
+ end
114
+ end
115
+
116
+ describe '#global_merge_vars' do
117
+ it 'takes an array of global_merge_vars' do
118
+ global_merge_vars = [{ 'name' => 'TESTVAR', 'content' => 'testcontent' }]
119
+ mail = new_mail(global_merge_vars: global_merge_vars)
120
+ message = described_class.new(mail)
121
+ expect(message.global_merge_vars).to eq(global_merge_vars)
122
+ end
123
+
124
+ it 'takes an array of multiple global_merge_vars' do
125
+ global_merge_vars = [
126
+ { 'name' => 'TESTVAR', 'content' => 'testcontent' },
127
+ { 'name' => 'TESTVAR2', 'content' => 'testcontent2' }
128
+ ]
129
+ mail = new_mail(global_merge_vars: global_merge_vars)
130
+ message = described_class.new(mail)
131
+ expect(message.global_merge_vars).to eq(global_merge_vars)
132
+ end
133
+
134
+ it 'does not use gsub to convert string into JSON' do
135
+ global_merge_vars = [
136
+ { 'name' => 'TESTVAR', 'content' => 'do you know how :async works?' },
137
+ { 'name' => 'TESTVAR2', 'content' => 'more than 10 recipients => always "true"!' }
138
+ ]
139
+ mail = new_mail(global_merge_vars: global_merge_vars)
140
+ message = described_class.new(mail)
141
+ expect(message.global_merge_vars).to eq(global_merge_vars)
142
+ end
143
+
144
+ it 'does not take global_merge_vars value' do
145
+ mail = new_mail
146
+ message = described_class.new(mail)
147
+ expect(message.global_merge_vars).to be_nil
148
+ end
149
+ end
150
+
151
+ pending '#google_analytics_domains'
152
+ pending '#google_analytics_campaign'
153
+
154
+ describe '#headers' do
155
+ let(:headers) do
156
+ {
157
+ 'Reply-To' => 'name1@domain.tld',
158
+ 'X-MC-BccAddress' => 'name1@domain.tld',
159
+ 'X-MY-CUSTOM-HEADER' => 'whatever'
160
+ }
161
+ end
162
+
163
+ let(:mail) { new_mail(headers: headers) }
164
+ subject { described_class.new(mail) }
165
+
166
+ it 'returns all headers' do
167
+ expect(subject.headers).to eq(headers)
168
+ end
169
+ end
170
+
171
+ describe '#html' do
172
+ it 'takes a non-multipart message' do
173
+ mail = new_mail(
174
+ to: 'name@domain.tld',
175
+ body: '<html><body>Hello world!</body></html>',
176
+ content_type: 'text/html'
177
+ )
178
+
179
+ message = described_class.new(mail)
180
+ expect(message.html).to eq('<html><body>Hello world!</body></html>')
181
+ end
182
+
183
+ it 'takes a multipart message' do
184
+ html_part = Mail::Part.new do
185
+ content_type 'text/html'
186
+ body '<html><body>Hello world!</body></html>'
187
+ end
188
+
189
+ text_part = Mail::Part.new do
190
+ content_type 'text/plain'
191
+ body 'Hello world!'
192
+ end
193
+
194
+ mail = new_mail(to: 'name@domain.tld', content_type: 'multipart/alternative') do |p|
195
+ p.html_part = html_part
196
+ p.text_part = text_part
197
+ end
198
+ message = described_class.new(mail)
199
+ expect(message.html).to eq('<html><body>Hello world!</body></html>')
200
+ end
201
+
202
+ it 'does not takes a text message' do
203
+ mail = new_mail(
204
+ to: 'name@domain.tld',
205
+ body: 'Hello world!',
206
+ content_type: 'text/plain'
207
+ )
208
+ message = described_class.new(mail)
209
+ expect(message.html).to eq(nil)
210
+ end
211
+
212
+ it 'does not take with the wrong content type' do
213
+ mail = new_mail(
214
+ to: 'name@domain.tld',
215
+ body: '<html><body>Hello world!</body></html>',
216
+ content_type: 'anytext/html5'
217
+ )
218
+
219
+ message = described_class.new(mail)
220
+ expect(message.html).to eq(nil)
221
+ end
222
+
223
+ it 'takes with more thing in the content type' do
224
+ mail = new_mail(
225
+ to: 'name@domain.tld',
226
+ body: '<html><body>Hello world!</body></html>',
227
+ content_type: 'text/html; charset="us-ascii"'
228
+ )
229
+
230
+ message = described_class.new(mail)
231
+ expect(message.html).to eq('<html><body>Hello world!</body></html>')
232
+ end
233
+ end
234
+
235
+ describe '#images' do
236
+ it 'takes an inline attachment' do
237
+ mail = new_mail(to: 'name@domain.tld', content_type: 'multipart/alternative')
238
+ mail.attachments.inline['text.jpg'] = {
239
+ mime_type: 'image/jpg',
240
+ content: 'This is a test'
241
+ }
242
+
243
+ message = described_class.new(mail)
244
+ expect(message.images).to eq(
245
+ [{ name: mail.attachments[0].cid,
246
+ type: 'image/jpg',
247
+ content: "VGhpcyBpcyBhIHRlc3Q=\n" }]
248
+ )
249
+ end
250
+
251
+ it 'ignores normal attachments' do
252
+ mail = new_mail(to: 'name@domain.tld', content_type: 'multipart/alternative')
253
+ mail.attachments['text.txt'] = {
254
+ mime_type: 'text/plain',
255
+ content: 'This is a test'
256
+ }
257
+
258
+ message = described_class.new(mail)
259
+ expect(message.images).to eq([])
260
+ end
261
+ end
262
+
263
+ describe '#important' do
264
+ it 'takes an important email' do
265
+ mail = new_mail(important: true)
266
+ message = described_class.new(mail)
267
+ expect(message.important).to be true
268
+ end
269
+
270
+ it 'takes a non-important email' do
271
+ mail = new_mail(important: false)
272
+ message = described_class.new(mail)
273
+ expect(message.important).to be false
274
+ end
275
+
276
+ it 'takes a default important value' do
277
+ mail = new_mail
278
+ message = described_class.new(mail)
279
+ expect(message.important).to be false
280
+ end
281
+ end
282
+
283
+ describe '#inline_css' do
284
+ it 'takes a inline_css with true' do
285
+ mail = new_mail(inline_css: true)
286
+ message = described_class.new(mail)
287
+ expect(message.inline_css).to be true
288
+ end
289
+
290
+ it 'takes a inline_css with false' do
291
+ mail = new_mail(inline_css: false)
292
+ message = described_class.new(mail)
293
+ expect(message.inline_css).to be false
294
+ end
295
+
296
+ it 'does not take an inline_css value' do
297
+ mail = new_mail
298
+ message = described_class.new(mail)
299
+ expect(message.inline_css).to be_nil
300
+ end
301
+ end
302
+
303
+ describe '#merge' do
304
+ it 'takes a merge with true' do
305
+ mail = new_mail(merge: true)
306
+ message = described_class.new(mail)
307
+ expect(message.merge).to be true
308
+ end
309
+
310
+ it 'takes a merge with false' do
311
+ mail = new_mail(merge: false)
312
+ message = described_class.new(mail)
313
+ expect(message.merge).to be false
314
+ end
315
+
316
+ it 'does not take a merge value' do
317
+ mail = new_mail
318
+ message = described_class.new(mail)
319
+ expect(message.merge).to be_nil
320
+ end
321
+ end
322
+
323
+ describe '#merge_language' do
324
+ it 'takes a merge_language' do
325
+ mail = new_mail(merge_language: 'handlebars')
326
+ message = described_class.new(mail)
327
+ expect(message.merge_language).to eq('handlebars')
328
+ end
329
+
330
+ it 'does not take merge_language value' do
331
+ mail = new_mail
332
+ message = described_class.new(mail)
333
+ expect(message.merge_language).to be_nil
334
+ end
335
+ end
336
+
337
+ describe '#merge_vars' do
338
+ it 'takes an array of merge_vars definitions' do
339
+ vars = [
340
+ { 'name' => 'MY_VAR_1', 'content' => 'foo' },
341
+ { 'name' => 'MY_VAR_2', 'content' => 'bar' }
342
+ ]
343
+ merge_vars = [{ 'rcpt' => 'a@a.de', 'vars' => vars }]
344
+ mail = new_mail(merge_vars: merge_vars)
345
+ message = described_class.new(mail)
346
+ expect(message.merge_vars).to eq(merge_vars)
347
+ end
348
+
349
+ it 'takes an array of multiple merge_vars' do
350
+ vars = [
351
+ { 'name' => 'MY_VAR_1', 'content' => 'foo' },
352
+ { 'name' => 'MY_VAR_2', 'content' => 'bar' }
353
+ ]
354
+ merge_vars = [
355
+ { 'rcpt' => 'name1@domain.tld', 'vars' => vars },
356
+ { 'rcpt' => 'name2@domain.tld', 'vars' => vars }
357
+ ]
358
+ mail = new_mail(merge_vars: merge_vars)
359
+ message = described_class.new(mail)
360
+ expect(message.merge_vars).to eq(merge_vars)
361
+ end
362
+
363
+ it 'does not use gsub to convert string into JSON' do
364
+ vars = [
365
+ { 'name' => 'MY_VAR_1', 'content' => 'do you know how :async works?' },
366
+ { 'name' => 'MY_VAR_2', 'content' => 'more than 10 recipients => always true!' }
367
+ ]
368
+ merge_vars = [{ 'rcpt' => 'a@a.de', 'vars' => vars }]
369
+ mail = new_mail(merge_vars: merge_vars)
370
+ message = described_class.new(mail)
371
+ expect(message.merge_vars).to eq(merge_vars)
372
+ end
373
+
374
+ it 'does not take merge_vars value' do
375
+ mail = new_mail
376
+ message = described_class.new(mail)
377
+ expect(message.merge_vars).to be_nil
378
+ end
379
+ end
380
+
381
+ describe '#metadata' do
382
+ it 'takes a metadata with a hash' do
383
+ mail = new_mail(metadata: { mail_internal_id: 'nice-uuid-field' })
384
+ message = described_class.new(mail)
385
+ expect(message.metadata).to eq('mail_internal_id' => 'nice-uuid-field')
386
+ end
387
+
388
+ it 'does not take metadata value' do
389
+ mail = new_mail
390
+ message = described_class.new(mail)
391
+ expect(message.metadata).to be_nil
392
+ end
393
+ end
394
+
395
+ describe '#preserve_recipients' do
396
+ it 'takes a preserve_recipients with true' do
397
+ mail = new_mail(preserve_recipients: true)
398
+ message = described_class.new(mail)
399
+ expect(message.preserve_recipients).to be true
400
+ end
401
+
402
+ it 'takes a preserve_recipients with false' do
403
+ mail = new_mail(preserve_recipients: false)
404
+ message = described_class.new(mail)
405
+ expect(message.preserve_recipients).to be false
406
+ end
407
+
408
+ it 'does not take preserve_recipients value' do
409
+ mail = new_mail
410
+ message = described_class.new(mail)
411
+ expect(message.preserve_recipients).to be_nil
412
+ end
413
+ end
414
+
415
+ pending '#recipient_metadata'
416
+
417
+ describe '#return_path_domain' do
418
+ it 'takes a return_path_domain' do
419
+ mail = new_mail(return_path_domain: 'return_path_domain.com')
420
+ message = described_class.new(mail)
421
+ expect(message.return_path_domain).to eq('return_path_domain.com')
422
+ end
423
+
424
+ it 'does not take return_path_domain value' do
425
+ mail = new_mail
426
+ message = described_class.new(mail)
427
+ expect(message.return_path_domain).to be_nil
428
+ end
429
+ end
430
+
431
+ describe '#send_at' do
432
+ it 'takes a Date and raises an ArgumentError' do
433
+ mail = new_mail(send_at: Date.new(2016))
434
+ message = described_class.new(mail)
435
+ expect { message.send_at }.to raise_error(ArgumentError)
436
+ end
437
+
438
+ it 'takes a string and returns it as is' do
439
+ mail = new_mail(send_at: '2010-01-01 12:00:00')
440
+ message = described_class.new(mail)
441
+ expect(message.send_at).to eq('2010-01-01 12:00:00')
442
+ end
443
+
444
+ it 'takes a DateTime and returns a string in UTC' do
445
+ mail = new_mail(send_at: DateTime.parse('2016-01-01 00:00:00 -0800'))
446
+ message = described_class.new(mail)
447
+ expect(message.send_at).to eq('2016-01-01 08:00:00')
448
+ end
449
+
450
+ it 'takes a Time and returns a string in UTC' do
451
+ mail = new_mail(send_at: Time.parse('2016-01-01 00:00:00 -0800'))
452
+ message = described_class.new(mail)
453
+ expect(message.send_at).to eq('2016-01-01 08:00:00')
454
+ end
455
+ end
456
+
457
+ describe '#signing_domain' do
458
+ it 'takes a signing_domain' do
459
+ mail = new_mail(signing_domain: 'signing_domain.com')
460
+ message = described_class.new(mail)
461
+ expect(message.signing_domain).to eq('signing_domain.com')
462
+ end
463
+
464
+ it 'does not take signing_domain value' do
465
+ mail = new_mail
466
+ message = described_class.new(mail)
467
+ expect(message.signing_domain).to be_nil
468
+ end
469
+ end
470
+
471
+ describe '#subaccount' do
472
+ it 'takes a subaccount' do
473
+ mail = new_mail(subaccount: 'abc123')
474
+ message = described_class.new(mail)
475
+ expect(message.subaccount).to eq('abc123')
476
+ end
477
+
478
+ it 'does not take subaccount value' do
479
+ mail = new_mail
480
+ message = described_class.new(mail)
481
+ expect(message.subaccount).to be_nil
482
+ end
483
+ end
484
+
485
+ describe '#subject' do
486
+ it 'takes a subject' do
487
+ mail = new_mail(subject: 'Test Subject')
488
+ message = described_class.new(mail)
489
+ expect(message.subject).to eq('Test Subject')
490
+ end
491
+ end
492
+
493
+ describe '#tags' do
494
+ it 'takes a tag' do
495
+ mail = new_mail(tags: 'test_tag')
496
+ message = described_class.new(mail)
497
+ expect(message.tags).to eq(['test_tag'])
498
+ end
499
+
500
+ it 'takes an array of tags' do
501
+ mail = new_mail(tags: %w[test_tag1 test_tag2])
502
+ message = described_class.new(mail)
503
+ expect(message.tags).to eq(%w[test_tag1 test_tag2])
504
+ end
505
+ end
506
+
507
+ describe '#text' do
508
+ it 'does not take a non-multipart message' do
509
+ mail = new_mail(to: 'name@domain.tld', body: 'Hello world!')
510
+ message = described_class.new(mail)
511
+ expect(message.text).to eq(nil)
512
+ end
513
+
514
+ it 'does not take with the wrong content type' do
515
+ mail = new_mail(
516
+ to: 'name@domain.tld',
517
+ body: 'Hello world!',
518
+ content_type: 'anytext/plain'
519
+ )
520
+
521
+ message = described_class.new(mail)
522
+ expect(message.text).to eq(nil)
523
+ end
524
+
525
+ it 'takes with more thing in the content type' do
526
+ mail = new_mail(
527
+ to: 'name@domain.tld',
528
+ body: 'Hello world!',
529
+ content_type: 'text/plain; charset="us-ascii"'
530
+ )
531
+
532
+ message = described_class.new(mail)
533
+ expect(message.text).to eq('Hello world!')
534
+ end
535
+
536
+ it 'takes a text message' do
537
+ mail = new_mail(
538
+ to: 'name@domain.tld',
539
+ body: 'Hello world!',
540
+ content_type: 'text/plain'
541
+ )
542
+ message = described_class.new(mail)
543
+ expect(message.text).to eq('Hello world!')
544
+ end
545
+
546
+ it 'takes a multipart message' do
547
+ html_part = Mail::Part.new do
548
+ content_type 'text/html'
549
+ body '<html><body>Hello world!</body></html>'
550
+ end
551
+
552
+ text_part = Mail::Part.new do
553
+ content_type 'text/plain'
554
+ body 'Hello world!'
555
+ end
556
+
557
+ mail = new_mail(to: 'name@domain.tld', content_type: 'multipart/alternative') do |p|
558
+ p.html_part = html_part
559
+ p.text_part = text_part
560
+ end
561
+ message = described_class.new(mail)
562
+ expect(message.text).to eq('Hello world!')
563
+ end
564
+ end
565
+
566
+ describe '#to' do
567
+ it 'takes a single email' do
568
+ mail = new_mail(to: 'name@domain.tld')
569
+ message = described_class.new(mail)
570
+ expect(message.to).to eq([{ email: 'name@domain.tld', name: nil, type: 'to' }])
571
+ end
572
+
573
+ it 'takes a single email with a display name' do
574
+ mail = new_mail(to: 'John Doe <name@domain.tld>')
575
+ message = described_class.new(mail)
576
+ expect(message.to).to eq(
577
+ [{ email: 'name@domain.tld', name: 'John Doe', type: 'to' }]
578
+ )
579
+ end
580
+
581
+ it 'takes an array of emails' do
582
+ mail = new_mail(to: ['name1@domain.tld', 'name2@domain.tld'])
583
+ message = described_class.new(mail)
584
+ expect(message.to).to eq(
585
+ [
586
+ { email: 'name1@domain.tld', name: nil, type: 'to' },
587
+ { email: 'name2@domain.tld', name: nil, type: 'to' }
588
+ ]
589
+ )
590
+ end
591
+
592
+ it 'takes an array of emails with a display names' do
593
+ mail = new_mail(
594
+ to: ['John Doe <name1@domain.tld>', 'Jane Smith <name2@domain.tld>']
595
+ )
596
+
597
+ message = described_class.new(mail)
598
+ expect(message.to).to eq(
599
+ [
600
+ { email: 'name1@domain.tld', name: 'John Doe', type: 'to' },
601
+ { email: 'name2@domain.tld', name: 'Jane Smith', type: 'to' }
602
+ ]
603
+ )
604
+ end
605
+
606
+ it 'combines to, cc, and bcc fields' do
607
+ mail = new_mail(
608
+ to: 'John Doe <name1@domain.tld>',
609
+ cc: 'Jane Smith <name2@domain.tld>',
610
+ bcc: 'Jenny Craig <name3@domain.tld>'
611
+ )
612
+
613
+ message = described_class.new(mail)
614
+ expect(message.to).to eq(
615
+ [
616
+ { email: 'name1@domain.tld', name: 'John Doe', type: 'to' },
617
+ { email: 'name2@domain.tld', name: 'Jane Smith', type: 'cc' },
618
+ { email: 'name3@domain.tld', name: 'Jenny Craig', type: 'bcc' }
619
+ ]
620
+ )
621
+ end
622
+ end
623
+
624
+ describe '#track_clicks' do
625
+ it 'takes a track_clicks with true' do
626
+ mail = new_mail(track_clicks: true)
627
+ message = described_class.new(mail)
628
+ expect(message.track_clicks).to be true
629
+ end
630
+
631
+ it 'takes a track_clicks with false' do
632
+ mail = new_mail(track_clicks: false)
633
+ message = described_class.new(mail)
634
+ expect(message.track_clicks).to be false
635
+ end
636
+
637
+ it 'does not take a track_clicks value' do
638
+ mail = new_mail
639
+ message = described_class.new(mail)
640
+ expect(message.track_clicks).to be_nil
641
+ end
642
+ end
643
+
644
+ describe '#track_opens' do
645
+ it 'takes a track_opens with true' do
646
+ mail = new_mail(track_opens: true)
647
+ message = described_class.new(mail)
648
+ expect(message.track_opens).to be true
649
+ end
650
+
651
+ it 'takes a track_opens with false' do
652
+ mail = new_mail(track_opens: false)
653
+ message = described_class.new(mail)
654
+ expect(message.track_opens).to be false
655
+ end
656
+
657
+ it 'does not take a track_opens value' do
658
+ mail = new_mail
659
+ message = described_class.new(mail)
660
+ expect(message.track_opens).to be_nil
661
+ end
662
+ end
663
+
664
+ describe '#tracking_domain' do
665
+ it 'takes a tracking_domain' do
666
+ mail = new_mail(tracking_domain: 'tracking_domain.com')
667
+ message = described_class.new(mail)
668
+ expect(message.tracking_domain).to eq('tracking_domain.com')
669
+ end
670
+
671
+ it 'does not take tracking_domain value' do
672
+ mail = new_mail
673
+ message = described_class.new(mail)
674
+ expect(message.tracking_domain).to be_nil
675
+ end
676
+ end
677
+
678
+ describe '#url_strip_qs' do
679
+ it 'takes a url_strip_qs with true' do
680
+ mail = new_mail(url_strip_qs: true)
681
+ message = described_class.new(mail)
682
+ expect(message.url_strip_qs).to be true
683
+ end
684
+
685
+ it 'takes a url_strip_qs with false' do
686
+ mail = new_mail(url_strip_qs: false)
687
+ message = described_class.new(mail)
688
+ expect(message.url_strip_qs).to be false
689
+ end
690
+
691
+ it 'does not take an url_strip_qs value' do
692
+ mail = new_mail
693
+ message = described_class.new(mail)
694
+ expect(message.url_strip_qs).to be_nil
695
+ end
696
+ end
697
+
698
+ describe '#view_content_link' do
699
+ it 'takes a view_content_link with true' do
700
+ mail = new_mail(view_content_link: true)
701
+ message = described_class.new(mail)
702
+ expect(message.view_content_link).to be true
703
+ end
704
+
705
+ it 'takes a view_content_link with false' do
706
+ mail = new_mail(view_content_link: false)
707
+ message = described_class.new(mail)
708
+ expect(message.view_content_link).to be false
709
+ end
710
+
711
+ it 'does not take view_content_link value' do
712
+ mail = new_mail
713
+ message = described_class.new(mail)
714
+ expect(message.view_content_link).to be_nil
715
+ end
716
+ end
717
+
718
+ describe '#to_json' do
719
+ it 'returns a proper JSON response for the Mandrill API' do
720
+ mail = new_mail(body: 'test',
721
+ from: 'name@domain.tld',
722
+ headers: { 'Reply-To' => 'name1@domain.tld' },
723
+ tags: 'test_tag')
724
+ message = described_class.new(mail)
725
+ expect(message.to_json).to(
726
+ include(:from_email, :from_name, :html, :subject, :to, :headers, :tags)
727
+ )
728
+ end
729
+
730
+ it 'returns a proper JSON response for the Mandrill API with attachments' do
731
+ mail = new_mail(body: 'test', from: 'name@domain.tld')
732
+ mail.attachments['text.txt'] = {
733
+ mime_type: 'text/plain',
734
+ content: 'This is a test'
735
+ }
736
+
737
+ message = described_class.new(mail)
738
+ expect(message.to_json).to(
739
+ include(:from_email, :from_name, :html, :subject, :to, :attachments)
740
+ )
741
+ end
742
+
743
+ it 'returns a proper JSON response for the Mandrill API with metadata' do
744
+ mail = new_mail(body: 'test', from: 'name@domain.tld', metadata: { foo: 'bar' })
745
+
746
+ message = described_class.new(mail)
747
+ expect(message.to_json).to(
748
+ include(:from_email, :from_name, :html, :subject, :to, :metadata)
749
+ )
750
+ end
751
+ end
752
+ end