Test Setup Failed
Push — master ( 210134...c17796 )
by Damian
03:18
created

tests/php/Control/Email/EmailTest.php (1 issue)

1
<?php
2
3
namespace SilverStripe\Control\Tests\Email;
4
5
use PHPUnit_Framework_MockObject_MockObject;
6
use SilverStripe\Control\Email\Email;
7
use SilverStripe\Control\Email\Mailer;
8
use SilverStripe\Control\Email\SwiftMailer;
9
use SilverStripe\Control\Tests\Email\EmailTest\EmailSubClass;
10
use SilverStripe\Core\Injector\Injector;
11
use SilverStripe\Core\Manifest\ModuleResourceLoader;
12
use SilverStripe\Dev\SapphireTest;
13
use SilverStripe\Dev\TestMailer;
14
use SilverStripe\ORM\FieldType\DBDatetime;
15
use SilverStripe\Security\Member;
16
use SilverStripe\View\SSViewer;
17
use Swift_Attachment;
18
use Swift_Mailer;
19
use Swift_Message;
20
use Swift_NullTransport;
21
use Swift_RfcComplianceException;
22
23
class EmailTest extends SapphireTest
24
{
25
26
    public function testAddAttachment()
27
    {
28
        $email = new Email();
29
30
        $email->addAttachment(__DIR__ . '/EmailTest/attachment.txt', null, 'text/plain');
31
32
        $children = $email->getSwiftMessage()->getChildren();
33
        $this->assertCount(1, $children);
34
35
        /** @var Swift_Attachment $child */
36
        $child = reset($children);
37
38
        $this->assertInstanceOf(Swift_Attachment::class, $child);
39
        $this->assertEquals('text/plain', $child->getContentType());
40
        $this->assertEquals('attachment.txt', $child->getFilename());
41
    }
42
43
    public function testAddAttachmentFromData()
44
    {
45
        $email = new Email();
46
47
        $email->addAttachmentFromData('foo bar', 'foo.txt', 'text/plain');
48
        $children = $email->getSwiftMessage()->getChildren();
49
50
        $this->assertCount(1, $children);
51
52
        /** @var Swift_Attachment $child */
53
        $child = reset($children);
54
55
        $this->assertInstanceOf(Swift_Attachment::class, $child);
56
        $this->assertEquals('foo bar', $child->getBody());
57
        $this->assertEquals('text/plain', $child->getContentType());
58
        $this->assertEquals('foo.txt', $child->getFilename());
59
    }
60
61
    public function testValidEmailAddress()
62
    {
63
        $validEmails = array('[email protected]', '[email protected]');
64
        $invalidEmails = array('foo.bar@', '@example.com', 'foo@');
65
66
        foreach ($validEmails as $email) {
67
            $this->assertTrue(Email::is_valid_address($email));
68
        }
69
70
        foreach ($invalidEmails as $email) {
71
            $this->assertFalse(Email::is_valid_address($email));
72
        }
73
    }
74
75
    public function testObfuscate()
76
    {
77
        $emailAddress = '[email protected]';
78
79
        $direction = Email::obfuscate($emailAddress, 'direction');
80
        $visible = Email::obfuscate($emailAddress, 'visible');
81
        $hex = Email::obfuscate($emailAddress, 'hex');
82
83
        $this->assertEquals('<span class="codedirection">moc.elpmaxe@1-tset</span>', $direction);
84
        $this->assertEquals('test [dash] 1 [at] example [dot] com', $visible);
85
        $this->assertEquals(
86
            '&#x74;&#x65;&#x73;&#x74;&#x2d;&#x31;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;',
87
            $hex
88
        );
89
    }
90
91
    public function testSendPlain()
92
    {
93
        $email = $this->makeEmailMock('Test send plain');
94
95
        // email should not call render if a body is supplied
96
        $email->expects($this->never())->method('renderWith');
0 ignored issues
show
The method expects() does not exist on SilverStripe\Control\Email\Email. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

96
        $email->/** @scrutinizer ignore-call */ 
97
                expects($this->never())->method('renderWith');
Loading history...
97
        $successful = $email->sendPlain();
98
99
        $this->assertTrue($successful);
100
        $this->assertEmpty($email->getFailedRecipients());
101
102
        /** @var TestMailer $mailer */
103
        $mailer = Injector::inst()->get(Mailer::class);
104
        $sentMail = $mailer->findEmail('[email protected]');
105
106
        $this->assertTrue(is_array($sentMail));
107
108
        $this->assertEquals('[email protected]', $sentMail['To']);
109
        $this->assertEquals('[email protected]', $sentMail['From']);
110
        $this->assertEquals('Test send plain', $sentMail['Subject']);
111
        $this->assertEquals('Body for Test send plain', $sentMail['Content']);
112
113
        $this->assertCount(1, $sentMail['AttachedFiles']);
114
        $child = reset($sentMail['AttachedFiles']);
115
        $this->assertEquals('text/plain', $child['mimetype']);
116
        $this->assertEquals('attachment.txt', $child['filename']);
117
        $this->assertEquals('Hello, I\'m a text document.', $child['contents']);
118
    }
119
120
    public function testSend()
121
    {
122
        /** @var Email|PHPUnit_Framework_MockObject_MockObject $email */
123
        $email = $this->makeEmailMock('Test send HTML');
124
125
        // email should not call render if a body is supplied
126
        $email->expects($this->never())->method('renderWith');
127
        $successful = $email->send();
128
129
        $this->assertTrue($successful);
130
        $this->assertEmpty($email->getFailedRecipients());
131
132
        /** @var TestMailer $mailer */
133
        $mailer = Injector::inst()->get(Mailer::class);
134
        $sentMail = $mailer->findEmail('[email protected]');
135
136
        $this->assertTrue(is_array($sentMail));
137
138
        $this->assertEquals('[email protected]', $sentMail['To']);
139
        $this->assertEquals('[email protected]', $sentMail['From']);
140
        $this->assertEquals('Test send HTML', $sentMail['Subject']);
141
        $this->assertEquals('Body for Test send HTML', $sentMail['Content']);
142
143
        $this->assertCount(1, $sentMail['AttachedFiles']);
144
        $child = reset($sentMail['AttachedFiles']);
145
        $this->assertEquals('text/plain', $child['mimetype']);
146
        $this->assertEquals('attachment.txt', $child['filename']);
147
        $this->assertEquals('Hello, I\'m a text document.', $child['contents']);
148
    }
149
150
    public function testRenderedSend()
151
    {
152
        /** @var Email|PHPUnit_Framework_MockObject_MockObject $email */
153
        $email = $this->getMockBuilder(Email::class)
154
            ->enableProxyingToOriginalMethods()
155
            ->getMock();
156
        $email->setFrom('[email protected]');
157
        $email->setTo('[email protected]');
158
        $email->setData(array(
159
            'EmailContent' => 'test',
160
        ));
161
        $this->assertFalse($email->hasPlainPart());
162
        $this->assertEmpty($email->getBody());
163
        // these seem to fail for some reason :/
164
        //$email->expects($this->once())->method('render');
165
        //$email->expects($this->once())->method('generatePlainPartFromBody');
166
        $email->send();
167
        $this->assertTrue($email->hasPlainPart());
168
        $this->assertNotEmpty($email->getBody());
169
    }
170
171
    public function testRenderedSendSubclass()
172
    {
173
        // Include dev theme
174
        SSViewer::set_themes([
175
            'silverstripe/framework:/tests/php/Control/Email/EmailTest',
176
            '$default',
177
        ]);
178
179
        /** @var Email|PHPUnit_Framework_MockObject_MockObject $email */
180
        $email = $this->getMockBuilder(EmailSubClass::class)
181
            ->enableProxyingToOriginalMethods()
182
            ->getMock();
183
        $email->setFrom('[email protected]');
184
        $email->setTo('[email protected]');
185
        $email->setData(array(
186
            'EmailContent' => 'test',
187
        ));
188
        $this->assertFalse($email->hasPlainPart());
189
        $this->assertEmpty($email->getBody());
190
        $email->send();
191
        $this->assertTrue($email->hasPlainPart());
192
        $this->assertNotEmpty($email->getBody());
193
        $this->assertContains('<h1>Email Sub-class</h1>', $email->getBody());
194
    }
195
196
    public function testConsturctor()
197
    {
198
        $email = new Email(
199
            '[email protected]',
200
            '[email protected]',
201
            'subject',
202
            'body',
203
            '[email protected]',
204
            '[email protected]',
205
            '[email protected]'
206
        );
207
208
        $this->assertCount(1, $email->getFrom());
209
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
210
        $this->assertCount(1, $email->getTo());
211
        $this->assertContains('[email protected]', array_keys($email->getTo()));
212
        $this->assertEquals('subject', $email->getSubject());
213
        $this->assertEquals('body', $email->getBody());
214
        $this->assertCount(1, $email->getCC());
215
        $this->assertContains('[email protected]', array_keys($email->getCC()));
216
        $this->assertCount(1, $email->getBCC());
217
        $this->assertContains('[email protected]', array_keys($email->getBCC()));
218
        $this->assertEquals('[email protected]', $email->getReturnPath());
219
    }
220
221
    public function testGetSwiftMessage()
222
    {
223
        $email = new Email(
224
            '[email protected]',
225
            '[email protected]',
226
            'subject',
227
            'body',
228
            '[email protected]',
229
            '[email protected]',
230
            '[email protected]'
231
        );
232
        $swiftMessage = $email->getSwiftMessage();
233
234
        $this->assertInstanceOf(Swift_Message::class, $swiftMessage);
235
236
        $this->assertCount(1, $swiftMessage->getFrom());
237
        $this->assertContains('[email protected]', array_keys($swiftMessage->getFrom()));
238
        $this->assertCount(1, $swiftMessage->getTo());
239
        $this->assertContains('[email protected]', array_keys($swiftMessage->getTo()));
240
        $this->assertEquals('subject', $swiftMessage->getSubject());
241
        $this->assertEquals('body', $swiftMessage->getBody());
242
        $this->assertCount(1, $swiftMessage->getCC());
243
        $this->assertContains('[email protected]', array_keys($swiftMessage->getCc()));
244
        $this->assertCount(1, $swiftMessage->getBCC());
245
        $this->assertContains('[email protected]', array_keys($swiftMessage->getBcc()));
246
        $this->assertEquals('[email protected]', $swiftMessage->getReturnPath());
247
    }
248
249
    public function testSetSwiftMessage()
250
    {
251
        Email::config()->update('admin_email', '[email protected]');
252
        DBDatetime::set_mock_now('2017-01-01 07:00:00');
253
        $email = new Email();
254
        $swiftMessage = new Swift_Message();
255
        $email->setSwiftMessage($swiftMessage);
256
        $this->assertCount(1, $email->getFrom());
257
        $this->assertContains('[email protected]', array_keys($swiftMessage->getFrom()));
258
        $this->assertEquals(strtotime('2017-01-01 07:00:00'), $swiftMessage->getDate());
259
        $this->assertEquals($swiftMessage, $email->getSwiftMessage());
260
261
        // check from field is retained
262
        $swiftMessage = new Swift_Message();
263
        $swiftMessage->setFrom('[email protected]');
264
        $email->setSwiftMessage($swiftMessage);
265
        $this->assertCount(1, $email->getFrom());
266
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
267
    }
268
269
    public function testAdminEmailApplied()
270
    {
271
        Email::config()->update('admin_email', '[email protected]');
272
        $email = new Email();
273
274
        $this->assertCount(1, $email->getFrom());
275
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
276
    }
277
278
    public function testGetFrom()
279
    {
280
        $email = new Email('[email protected]');
281
        $this->assertCount(1, $email->getFrom());
282
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
283
    }
284
285
    public function testSetFrom()
286
    {
287
        $email = new Email('[email protected]');
288
        $this->assertCount(1, $email->getFrom());
289
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
290
        $email->setFrom('[email protected]');
291
        $this->assertCount(1, $email->getFrom());
292
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
293
    }
294
295
    public function testAddFrom()
296
    {
297
        $email = new Email('[email protected]');
298
        $this->assertCount(1, $email->getFrom());
299
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
300
        $email->addFrom('[email protected]');
301
        $this->assertCount(2, $email->getFrom());
302
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
303
        $this->assertContains('[email protected]', array_keys($email->getFrom()));
304
    }
305
306
    public function testSetGetSender()
307
    {
308
        $email = new Email();
309
        $this->assertEmpty($email->getSender());
310
        $email->setSender('[email protected]', 'Silver Stripe');
311
        $this->assertEquals(array('[email protected]' => 'Silver Stripe'), $email->getSender());
312
    }
313
314
    public function testSetGetReturnPath()
315
    {
316
        $email = new Email();
317
        $this->assertEmpty($email->getReturnPath());
318
        $email->setReturnPath('[email protected]');
319
        $this->assertEquals('[email protected]', $email->getReturnPath());
320
    }
321
322
    public function testSetGetTo()
323
    {
324
        $email = new Email('[email protected]', '[email protected]');
325
        $this->assertCount(1, $email->getTo());
326
        $this->assertContains('[email protected]', array_keys($email->getTo()));
327
        $email->setTo('[email protected]', 'Silver Stripe');
328
        $this->assertEquals(array('[email protected]' => 'Silver Stripe'), $email->getTo());
329
    }
330
331
    public function testAddTo()
332
    {
333
        $email = new Email('[email protected]', '[email protected]');
334
        $this->assertCount(1, $email->getTo());
335
        $this->assertContains('[email protected]', array_keys($email->getTo()));
336
        $email->addTo('[email protected]');
337
        $this->assertCount(2, $email->getTo());
338
        $this->assertContains('[email protected]', array_keys($email->getTo()));
339
        $this->assertContains('[email protected]', array_keys($email->getTo()));
340
    }
341
342
    public function testSetGetCC()
343
    {
344
        $email = new Email('[email protected]', '[email protected]', 'subject', 'body', '[email protected]');
345
        $this->assertCount(1, $email->getCC());
346
        $this->assertContains('[email protected]', array_keys($email->getCC()));
347
        $email->setCC('[email protected]', 'Silver Stripe');
348
        $this->assertEquals(array('[email protected]' => 'Silver Stripe'), $email->getCC());
349
    }
350
351
    public function testAddCC()
352
    {
353
        $email = new Email('[email protected]', '[email protected]', 'subject', 'body', '[email protected]');
354
        $this->assertCount(1, $email->getCC());
355
        $this->assertContains('[email protected]', array_keys($email->getCC()));
356
        $email->addCC('[email protected]', 'Silver Stripe');
357
        $this->assertCount(2, $email->getCC());
358
        $this->assertContains('[email protected]', array_keys($email->getCC()));
359
        $this->assertContains('[email protected]', array_keys($email->getCC()));
360
    }
361
362
    public function testSetGetBCC()
363
    {
364
        $email = new Email(
365
            '[email protected]',
366
            '[email protected]',
367
            'subject',
368
            'body',
369
            '[email protected]',
370
            '[email protected]'
371
        );
372
        $this->assertCount(1, $email->getBCC());
373
        $this->assertContains('[email protected]', array_keys($email->getBCC()));
374
        $email->setBCC('[email protected]', 'Silver Stripe');
375
        $this->assertEquals(array('[email protected]' => 'Silver Stripe'), $email->getBCC());
376
    }
377
378
    public function testAddBCC()
379
    {
380
        $email = new Email(
381
            '[email protected]',
382
            '[email protected]',
383
            'subject',
384
            'body',
385
            '[email protected]',
386
            '[email protected]'
387
        );
388
        $this->assertCount(1, $email->getBCC());
389
        $this->assertContains('[email protected]', array_keys($email->getBCC()));
390
        $email->addBCC('[email protected]', 'Silver Stripe');
391
        $this->assertCount(2, $email->getBCC());
392
        $this->assertContains('[email protected]', array_keys($email->getBCC()));
393
        $this->assertContains('[email protected]', array_keys($email->getBCC()));
394
    }
395
396
    public function testReplyTo()
397
    {
398
        $email = new Email();
399
        $this->assertEmpty($email->getReplyTo());
400
        $email->setReplyTo('[email protected]', 'Silver Stripe');
401
        $this->assertEquals(array('[email protected]' => 'Silver Stripe'), $email->getReplyTo());
402
        $email->addReplyTo('[email protected]');
403
        $this->assertCount(2, $email->getReplyTo());
404
        $this->assertContains('[email protected]', array_keys($email->getReplyTo()));
405
        $this->assertContains('[email protected]', array_keys($email->getReplyTo()));
406
    }
407
408
    public function testSubject()
409
    {
410
        $email = new Email('[email protected]', '[email protected]', 'subject');
411
        $this->assertEquals('subject', $email->getSubject());
412
        $email->setSubject('new subject');
413
        $this->assertEquals('new subject', $email->getSubject());
414
    }
415
416
    public function testPriority()
417
    {
418
        $email = new Email();
419
        $this->assertEquals(3, $email->getPriority());
420
        $email->setPriority(5);
421
        $this->assertEquals(5, $email->getPriority());
422
    }
423
424
    public function testData()
425
    {
426
        $email = new Email();
427
        $this->assertEmpty($email->getData());
428
        $email->setData(array(
429
            'Title' => 'My Title',
430
        ));
431
        $this->assertCount(1, $email->getData());
432
        $this->assertEquals(array('Title' => 'My Title'), $email->getData());
433
434
        $email->addData('Content', 'My content');
435
        $this->assertCount(2, $email->getData());
436
        $this->assertEquals(array(
437
            'Title' => 'My Title',
438
            'Content' => 'My content',
439
        ), $email->getData());
440
        $email->removeData('Title');
441
        $this->assertEquals(array('Content' => 'My content'), $email->getData());
442
    }
443
444
    public function testDataWithViewableData()
445
    {
446
        $member = new Member();
447
        $member->FirstName = 'First Name';
448
        $email = new Email();
449
        $this->assertEmpty($email->getData());
450
        $email->setData($member);
451
        $this->assertEquals($member, $email->getData());
452
        $email->addData('Test', 'Test value');
453
        $this->assertEquals('Test value', $email->getData()->Test);
454
        $email->removeData('Test');
455
        $this->assertNull($email->getData()->Test);
456
    }
457
458
    public function testBody()
459
    {
460
        $email = new Email();
461
        $this->assertEmpty($email->getBody());
462
        $email->setBody('<h1>Title</h1>');
463
        $this->assertEquals('<h1>Title</h1>', $email->getBody());
464
    }
465
466
    public function testHTMLTemplate()
467
    {
468
        // Include dev theme
469
        SSViewer::set_themes([
470
            'silverstripe/framework:/tests/php/Control/Email/EmailTest',
471
            '$default',
472
        ]);
473
474
        // Find template on disk
475
        $emailTemplate = ModuleResourceLoader::singleton()->resolveResource(
476
            'silverstripe/framework:templates/SilverStripe/Control/Email/Email.ss'
477
        );
478
        $subClassTemplate = ModuleResourceLoader::singleton()->resolveResource(
479
            'silverstripe/framework:tests/php/Control/Email/EmailTest/templates/'
480
            . str_replace('\\', '/', EmailSubClass::class)
481
            .'.ss'
482
        );
483
        $this->assertTrue($emailTemplate->exists());
484
        $this->assertTrue($subClassTemplate->exists());
485
486
        // Check template is auto-found
487
        $email = new Email();
488
        $this->assertEquals($emailTemplate->getPath(), $email->getHTMLTemplate());
489
        $email->setHTMLTemplate('MyTemplate');
490
        $this->assertEquals('MyTemplate', $email->getHTMLTemplate());
491
492
        // Check subclass template is found
493
        $email2 = new EmailSubClass();
494
        $this->assertEquals($subClassTemplate->getPath(), $email2->getHTMLTemplate());
495
        $email->setHTMLTemplate('MyTemplate');
496
        $this->assertEquals('MyTemplate', $email->getHTMLTemplate());
497
    }
498
499
    public function testPlainTemplate()
500
    {
501
        $email = new Email();
502
        $this->assertEmpty($email->getPlainTemplate());
503
        $email->setPlainTemplate('MyTemplate');
504
        $this->assertEquals('MyTemplate', $email->getPlainTemplate());
505
    }
506
507
    public function testGetFailedRecipients()
508
    {
509
        $mailer = new SwiftMailer();
510
        /** @var Swift_NullTransport|PHPUnit_Framework_MockObject_MockObject $transport */
511
        $transport = $this->getMockBuilder(Swift_NullTransport::class)->getMock();
512
        $transport->expects($this->once())
513
            ->method('send')
514
            ->willThrowException(new Swift_RfcComplianceException('Bad email'));
515
        $mailer->setSwiftMailer(new Swift_Mailer($transport));
516
        $email = new Email();
517
        $email->setTo('[email protected]');
518
        $email->setFrom('[email protected]');
519
        $mailer->send($email);
520
        $this->assertCount(1, $email->getFailedRecipients());
521
    }
522
523
    public function testIsEmail()
524
    {
525
        $this->assertTrue((new Email)->IsEmail());
526
    }
527
528
    public function testRenderAgain()
529
    {
530
        $email = new Email();
531
        $email->setData(array(
532
            'EmailContent' => 'my content',
533
        ));
534
        $email->render();
535
        $this->assertContains('my content', $email->getBody());
536
        $children = $email->getSwiftMessage()->getChildren();
537
        $this->assertCount(1, $children);
538
        $plainPart = reset($children);
539
        $this->assertEquals('my content', $plainPart->getBody());
540
541
        // ensure repeat renders don't add multiple plain parts
542
        $email->render();
543
        $this->assertCount(1, $email->getSwiftMessage()->getChildren());
544
    }
545
546
    public function testRenderPlainOnly()
547
    {
548
        $email = new Email();
549
        $email->setData(array(
550
            'EmailContent' => 'test content',
551
        ));
552
        $email->render(true);
553
        $this->assertEquals('text/plain', $email->getSwiftMessage()->getContentType());
554
        $this->assertEmpty($email->getSwiftMessage()->getChildren());
555
    }
556
557
    public function testHasPlainPart()
558
    {
559
        $email = new Email();
560
        $email->setData(array(
561
            'EmailContent' => 'test',
562
        ));
563
        //emails are assumed to be HTML by default
564
        $this->assertFalse($email->hasPlainPart());
565
        //make sure plain attachments aren't picked up as a plain part
566
        $email->addAttachmentFromData('data', 'attachent.txt', 'text/plain');
567
        $this->assertFalse($email->hasPlainPart());
568
        $email->getSwiftMessage()->addPart('plain', 'text/plain');
569
        $this->assertTrue($email->hasPlainPart());
570
    }
571
572
    public function testGeneratePlainPartFromBody()
573
    {
574
        $email = new Email();
575
        $email->setBody('<h1>Test</h1>');
576
        $this->assertEmpty($email->getSwiftMessage()->getChildren());
577
        $email->generatePlainPartFromBody();
578
        $children = $email->getSwiftMessage()->getChildren();
579
        $this->assertCount(1, $children);
580
        $plainPart = reset($children);
581
        $this->assertContains('Test', $plainPart->getBody());
582
        $this->assertNotContains('<h1>Test</h1>', $plainPart->getBody());
583
    }
584
585
    public function testMultipleEmailSends()
586
    {
587
        $email = new Email();
588
        $email->setData(array(
589
            'EmailContent' => 'Test',
590
        ));
591
        $this->assertEmpty($email->getBody());
592
        $this->assertEmpty($email->getSwiftMessage()->getChildren());
593
        $email->send();
594
        $this->assertContains('Test', $email->getBody());
595
        $this->assertCount(1, $email->getSwiftMessage()->getChildren());
596
        $children = $email->getSwiftMessage()->getChildren();
597
        /** @var \Swift_MimePart $plainPart */
598
        $plainPart = reset($children);
599
        $this->assertContains('Test', $plainPart->getBody());
600
601
602
        //send again
603
        $email->send();
604
        $this->assertContains('Test', $email->getBody());
605
        $this->assertCount(1, $email->getSwiftMessage()->getChildren());
606
        $children = $email->getSwiftMessage()->getChildren();
607
        /** @var \Swift_MimePart $plainPart */
608
        $plainPart = reset($children);
609
        $this->assertContains('Test', $plainPart->getBody());
610
    }
611
612
    /**
613
     * @return PHPUnit_Framework_MockObject_MockObject|Email
614
     */
615
    protected function makeEmailMock($subject)
616
    {
617
        /** @var Email|PHPUnit_Framework_MockObject_MockObject $email */
618
        $email = $this->getMockBuilder(Email::class)
619
            ->enableProxyingToOriginalMethods()
620
            ->getMock();
621
622
        $email->setFrom('[email protected]');
623
        $email->setTo('[email protected]');
624
        $email->setSubject($subject);
625
        $email->setBody("Body for {$subject}");
626
        $email->setCC('[email protected]');
627
        $email->setBCC('[email protected]');
628
        $email->addAttachment(__DIR__ . '/EmailTest/attachment.txt', null, 'text/plain');
629
        return $email;
630
    }
631
}
632