Completed
Push — master ( 85dea1...7e6628 )
by Jacob
02:09
created

ArchangelTest::testAddCCMultiple()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 9

Duplication

Lines 13
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 13
loc 13
rs 9.4285
cc 1
eloc 9
nc 1
nop 0
1
<?php
2
3
namespace Jacobemerick\Archangel;
4
5
use Monolog\Logger;
6
use Monolog\Handler\TestHandler;
7
use PHPUnit_Framework_TestCase;
8
use ReflectionClass;
9
10
class ArchangelTest extends PHPUnit_Framework_TestCase
11
{
12
13
    public function testIsInstanceOfArchangel()
14
    {
15
        $archangel = new Archangel();
16
17
        $this->assertInstanceOf('Jacobemerick\Archangel\Archangel', $archangel);
18
    }
19
20
    public function testIsLoggerAwareInterface()
21
    {
22
        $archangel = new Archangel();
23
24
        $this->assertInstanceOf('Psr\Log\LoggerAwareInterface', $archangel);
25
    }
26
27
    public function testConstructSetsDefaultMailer()
28
    {
29
        $archangel = new Archangel();
30
        $mailer = sprintf('PHP/%s', phpversion());
31
        $headers = array('X-Mailer' => $mailer);
32
33
        $this->assertAttributeEquals($headers, 'headers', $archangel);
34
    }
35
36
    public function testConstructOverridesMailer()
37
    {
38
        $archangel = new Archangel('AwesomeMailer');
39
        $headers = array('X-Mailer' => 'AwesomeMailer');
40
41
        $this->assertAttributeEquals($headers, 'headers', $archangel);
42
    }
43
44
    public function testConstructSetsNullLogger()
45
    {
46
        $archangel = new Archangel();
47
48
        $this->assertAttributeInstanceOf('Psr\Log\NullLogger', 'logger', $archangel);
49
    }
50
51
    public function testConstructSetsBoundaries()
52
    {
53
        $archangel = new Archangel();
54
        $expectedBoundaryMixed = sprintf('PHP-mixed-%s', uniqid());
55
        $expectedBoundaryAlternative = sprintf('PHP-alternative-%s', uniqid());
56
57
        $this->assertAttributeEquals($expectedBoundaryMixed, 'boundaryMixed', $archangel);
58
        $this->assertAttributeEquals($expectedBoundaryAlternative, 'boundaryAlternative', $archangel);
59
    }
60
61
    public function testSetLogger()
62
    {
63
        $logger = $this->getMock('Psr\Log\LoggerInterface');
64
        $archangel = new Archangel();
65
        $archangel->setLogger($logger);
66
67
        $this->assertAttributeSame($logger, 'logger', $archangel);
68
    }
69
70
    public function testAddTo()
71
    {
72
        $archangel = new Archangel();
73
        $archangel->addTo('[email protected]');
74
75
        $this->assertAttributeContains('[email protected]', 'toAddresses', $archangel);
76
    }
77
78
    public function testAddToMultiple()
79
    {
80
        $archangel = new Archangel();
81
        $archangel->addTo('[email protected]');
82
        $archangel->addTo('[email protected]');
83
84
        $this->assertAttributeContains('[email protected]', 'toAddresses', $archangel);
85
        $this->assertAttributeContains('[email protected]', 'toAddresses', $archangel);
86
    }
87
88
    public function testAddToWithTitle()
89
    {
90
        $archangel = new Archangel();
91
        $archangel->addTo('[email protected]', 'Mr. Test Alot');
92
93
        $this->assertAttributeContains('"Mr. Test Alot" <[email protected]>', 'toAddresses', $archangel);
94
    }
95
96
    public function testAddCC()
97
    {
98
        $archangel = new Archangel();
99
        $archangel->addCC('[email protected]');
100
        $headersProperty = $this->getProtectedProperty('headers');
101
        $headers = $headersProperty->getValue($archangel);
102
103
        $this->assertArraySubset(
104
            array('CC' => array('[email protected]')),
105
            $headers
106
        );
107
    }
108
109 View Code Duplication
    public function testAddCCMultiple()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
110
    {
111
        $archangel = new Archangel();
112
        $archangel->addCC('[email protected]');
113
        $archangel->addCC('[email protected]');
114
        $headersProperty = $this->getProtectedProperty('headers');
115
        $headers = $headersProperty->getValue($archangel);
116
117
        $this->assertArraySubset(
118
            array('CC' => array('[email protected]', '[email protected]')),
119
            $headers
120
        );
121
    }
122
123
    public function testAddCCWithTitle()
124
    {
125
        $archangel = new Archangel();
126
        $archangel->addCC('[email protected]', 'Mr. Test Alot');
127
        $headersProperty = $this->getProtectedProperty('headers');
128
        $headers = $headersProperty->getValue($archangel);
129
130
        $this->assertArraySubset(
131
            array('CC' => array('"Mr. Test Alot" <[email protected]>')),
132
            $headers
133
        );
134
    }
135
136
    public function testAddBCC()
137
    {
138
        $archangel = new Archangel();
139
        $archangel->addBCC('[email protected]');
140
        $headersProperty = $this->getProtectedProperty('headers');
141
        $headers = $headersProperty->getValue($archangel);
142
143
        $this->assertArraySubset(
144
            array('BCC' => array('[email protected]')),
145
            $headers
146
        );
147
    }
148
149 View Code Duplication
    public function testAddBCCMultiple()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
150
    {
151
        $archangel = new Archangel();
152
        $archangel->addBCC('[email protected]');
153
        $archangel->addBCC('[email protected]');
154
        $headersProperty = $this->getProtectedProperty('headers');
155
        $headers = $headersProperty->getValue($archangel);
156
157
        $this->assertArraySubset(
158
            array('BCC' => array('[email protected]', '[email protected]')),
159
            $headers
160
        );
161
    }
162
163
    public function testAddBCCWithTitle()
164
    {
165
        $archangel = new Archangel();
166
        $archangel->addBCC('[email protected]', 'Mr. Test Alot');
167
        $headersProperty = $this->getProtectedProperty('headers');
168
        $headers = $headersProperty->getValue($archangel);
169
170
        $this->assertArraySubset(
171
            array('BCC' => array('"Mr. Test Alot" <[email protected]>')),
172
            $headers
173
        );
174
    }
175
176
    public function testSetFrom()
177
    {
178
        $archangel = new Archangel();
179
        $archangel->setFrom('[email protected]');
180
        $headersProperty = $this->getProtectedProperty('headers');
181
        $headers = $headersProperty->getValue($archangel);
182
183
        $this->assertArraySubset(array('From' => '[email protected]'), $headers);
184
    }
185
186 View Code Duplication
    public function testSetFromMultiple()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
187
    {
188
        $archangel = new Archangel();
189
        $archangel->setFrom('[email protected]');
190
        $archangel->setFrom('[email protected]');
191
        $headersProperty = $this->getProtectedProperty('headers');
192
        $headers = $headersProperty->getValue($archangel);
193
194
        $this->assertArraySubset(array('From' => '[email protected]'), $headers);
195
        $this->assertNotContains('[email protected]', $headers);
196
    }
197
198
    public function testSetFromWithTitle()
199
    {
200
        $archangel = new Archangel();
201
        $archangel->setFrom('[email protected]', 'Mr. Test Alot');
202
        $headersProperty = $this->getProtectedProperty('headers');
203
        $headers = $headersProperty->getValue($archangel);
204
205
        $this->assertArraySubset(array('From' => '"Mr. Test Alot" <[email protected]>'), $headers);
206
    }
207
208
    public function testSetReplyTo()
209
    {
210
        $archangel = new Archangel();
211
        $archangel->setReplyTo('[email protected]');
212
        $headersProperty = $this->getProtectedProperty('headers');
213
        $headers = $headersProperty->getValue($archangel);
214
215
        $this->assertArraySubset(array('Reply-To' => '[email protected]'), $headers);
216
    }
217
218 View Code Duplication
    public function testSetReplyToMultiple()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
219
    {
220
        $archangel = new Archangel();
221
        $archangel->setReplyTo('[email protected]');
222
        $archangel->setReplyTo('[email protected]');
223
        $headersProperty = $this->getProtectedProperty('headers');
224
        $headers = $headersProperty->getValue($archangel);
225
226
        $this->assertArraySubset(array('Reply-To' => '[email protected]'), $headers);
227
        $this->assertNotContains('[email protected]', $headers);
228
    }
229
230
    public function testSetReplyToWithTitle()
231
    {
232
        $archangel = new Archangel();
233
        $archangel->setReplyTo('[email protected]', 'Mr. Test Alot');
234
        $headersProperty = $this->getProtectedProperty('headers');
235
        $headers = $headersProperty->getValue($archangel);
236
237
        $this->assertArraySubset(array('Reply-To' => '"Mr. Test Alot" <[email protected]>'), $headers);
238
    }
239
240 View Code Duplication
    public function testFormatEmailAddress()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
241
    {
242
        $archangel = new Archangel();
243
        $formatMethod = $this->getProtectedMethod('formatEmailAddress');
244
        $formattedEmail = $formatMethod->invokeArgs($archangel, array('[email protected]', ''));
245
246
        $this->assertEquals('[email protected]', $formattedEmail);
247
    }
248
249 View Code Duplication
    public function testFormatEmailAddressWithTitle()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
250
    {
251
        $archangel = new Archangel();
252
        $formatMethod = $this->getProtectedMethod('formatEmailAddress');
253
        $formattedEmail = $formatMethod->invokeArgs($archangel, array('[email protected]', 'Mr. Test Alot'));
254
255
        $this->assertEquals('"Mr. Test Alot" <[email protected]>', $formattedEmail);
256
    }
257
258
    public function testSetSubject()
259
    {
260
        $archangel = new Archangel();
261
        $archangel->setSubject('Test Subject');
262
263
        $this->assertAttributeEquals('Test Subject', 'subject', $archangel);
264
    }
265
266
    public function testSetPlainMessage()
267
    {
268
        $archangel = new Archangel();
269
        $archangel->setPlainMessage('Plain text message');
270
271
        $this->assertAttributeEquals('Plain text message', 'plainMessage', $archangel);
272
    }
273
274
    public function testSetHTMLMessage()
275
    {
276
        $archangel = new Archangel();
277
        $archangel->setHTMLMessage('<p>An HTML message.</p>');
278
279
        $this->assertAttributeEquals('<p>An HTML message.</p>', 'htmlMessage', $archangel);
280
    }
281
282 View Code Duplication
    public function testAddAttachment()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
283
    {
284
        $archangel = new Archangel();
285
        $archangel->addAttachment('path', 'type');
286
287
        $this->assertAttributeContains(
288
            array('path' => 'path', 'type' => 'type', 'title' => ''),
289
            'attachments',
290
            $archangel
291
        );
292
    }
293
294
    public function testAddAttachmentMultiple()
295
    {
296
        $archangel = new Archangel();
297
        $archangel->addAttachment('pathOne', 'typeOne');
298
        $archangel->addAttachment('pathTwo', 'typeTwo');
299
300
        $this->assertAttributeContains(
301
            array('path' => 'pathOne', 'type' => 'typeOne', 'title' => ''),
302
            'attachments',
303
            $archangel
304
        );
305
        $this->assertAttributeContains(
306
            array('path' => 'pathTwo', 'type' => 'typeTwo', 'title' => ''),
307
            'attachments',
308
            $archangel
309
        );
310
    }
311
312 View Code Duplication
    public function testAddAttachmentWithTitle()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
313
    {
314
        $archangel = new Archangel();
315
        $archangel->addAttachment('path', 'type', 'title');
316
317
        $this->assertAttributeContains(
318
            array('path' => 'path', 'type' => 'type', 'title' => 'title'),
319
            'attachments',
320
            $archangel
321
        );
322
    }
323
324
    public function testSend()
325
    {
326
        $archangel = new Archangel();
327
        $archangel->addTo('[email protected]');
328
        $archangel->setSubject('Test Subject');
329
        $archangel->setPlainMessage('Plain text message');
330
        $response = $archangel->send();
331
332
        $expectedResponse = array(
333
            'to' => '[email protected]',
334
            'subject' => 'Test Subject',
335
            'message' => 'Plain text message',
336
            'headers' => 'X-Mailer: PHP/6.0.0',
337
        );
338
339
        $this->assertEquals($expectedResponse, $response);
340
    }
341
342
    public function testSendFailure()
343
    {
344
        $archangel = new Archangel();
345
        $response = $archangel->send();
346
347
        $this->assertFalse($response);
348
    }
349
350
    /**
351
     * @dataProvider dataCheckRequiredFields
352
     */
353
    public function testCheckRequiredFields(
354
        $expectedResult,
355
        $toAddresses,
356
        $subject,
357
        $plainMessage,
358
        $htmlMessage,
359
        $attachments
360
    ) {
361
        $archangel = new Archangel();
362
363
        if (!empty($toAddresses)) {
364
            $toAddressesProperty = $this->getProtectedProperty('toAddresses');
365
            $toAddressesProperty->setValue($archangel, $toAddresses);
366
        }
367
368
        if (!empty($subject)) {
369
            $subjectProperty = $this->getProtectedProperty('subject');
370
            $subjectProperty->setValue($archangel, $subject);
371
        }
372
373
        if (!empty($plainMessage)) {
374
            $plainMessageProperty = $this->getProtectedProperty('plainMessage');
375
            $plainMessageProperty->setValue($archangel, $plainMessage);
376
        }
377
378
        if (!empty($htmlMessage)) {
379
            $htmlMessageProperty = $this->getProtectedProperty('htmlMessage');
380
            $htmlMessageProperty->setValue($archangel, $htmlMessage);
381
        }
382
383
        if (!empty($attachments)) {
384
            $attachmentsProperty = $this->getProtectedProperty('attachments');
385
            $attachmentsProperty->setValue($archangel, $attachments);
386
        }
387
388
        $checkMethod = $this->getProtectedMethod('checkRequiredFields');
389
        $isValid = $checkMethod->invoke($archangel);
390
391
        if ($expectedResult == true) {
392
            $this->assertTrue($isValid);
393
            return;
394
        }
395
        $this->assertNotTrue($isValid);
396
    }
397
398
    public function dataCheckRequiredFields()
399
    {
400
        return array(
401
            array(
402
                'expectedResult' => false,
403
                'toAddresses' => array(),
404
                'subject' => '',
405
                'plainMessage' => '',
406
                'htmlMessage' => '',
407
                'attachments' => array(),
408
            ),
409
            array(
410
                'expectedResult' => false,
411
                'toAddresses' => array('[email protected]'),
412
                'subject' => '',
413
                'plainMessage' => '',
414
                'htmlMessage' => '',
415
                'attachments' => array(),
416
            ),
417
            array(
418
                'expectedResult' => false,
419
                'toAddresses' => array('[email protected]'),
420
                'subject' => 'Test Subject',
421
                'plainMessage' => '',
422
                'htmlMessage' => '',
423
                'attachments' => array(),
424
            ),
425
            array(
426
                'expectedResult' => false,
427
                'toAddresses' => array(),
428
                'subject' => 'Test Subject',
429
                'plainMessage' => '',
430
                'htmlMessage' => '',
431
                'attachments' => array(),
432
            ),
433
            array(
434
                'expectedResult' => false,
435
                'toAddresses' => array(),
436
                'subject' => 'Test Subject',
437
                'plainMessage' => 'Plain text message',
438
                'htmlMessage' => '',
439
                'attachments' => array(),
440
            ),
441
            array(
442
                'expectedResult' => true,
443
                'toAddresses' => array('[email protected]'),
444
                'subject' => 'Test Subject',
445
                'plainMessage' => 'Plain text message',
446
                'htmlMessage' => '',
447
                'attachments' => array(),
448
            ),
449
            array(
450
                'expectedResult' => true,
451
                'toAddresses' => array('[email protected]'),
452
                'subject' => 'Test Subject',
453
                'plainMessage' => '',
454
                'htmlMessage' => '<p>An HTML message.</p>',
455
                'attachments' => array(),
456
            ),
457
            array(
458
                'expectedResult' => true,
459
                'toAddresses' => array('[email protected]'),
460
                'subject' => 'Test Subject',
461
                'plainMessage' => '',
462
                'htmlMessage' => '',
463
                'attachments' => array(
464
                    array('path' => 'path', 'type' => 'type'),
465
                ),
466
            ),
467
            array(
468
                'expectedResult' => true,
469
                'toAddresses' => array('[email protected]'),
470
                'subject' => 'Test Subject',
471
                'plainMessage' => 'Plain text message',
472
                'htmlMessage' => '<p>An HTML message.</p>',
473
                'attachments' => array(
474
                    array('path' => 'path', 'type' => 'type'),
475
                ),
476
            ),
477
       );
478
    }
479
 
480 View Code Duplication
    public function testBuildTo()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
481
    {
482
        $archangel = new Archangel();
483
        $addressesProperty = $this->getProtectedProperty('toAddresses');
484
        $addressesProperty->setValue($archangel, array('[email protected]'));
485
        $buildMethod = $this->getProtectedMethod('buildTo');
486
        $toAddresses = $buildMethod->invoke($archangel);
487
488
        $this->assertEquals('[email protected]', $toAddresses);
489
    }
490
491 View Code Duplication
    public function testBuildToMultiple()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
492
    {
493
        $archangel = new Archangel();
494
        $addressesProperty = $this->getProtectedProperty('toAddresses');
495
        $addressesProperty->setValue($archangel, array('[email protected]', '[email protected]'));
496
        $buildMethod = $this->getProtectedMethod('buildTo');
497
        $toAddresses = $buildMethod->invoke($archangel);
498
499
        $this->assertEquals('[email protected], [email protected]', $toAddresses);
500
    }
501
502 View Code Duplication
    public function testBuildPlainMessageHeader()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
503
    {
504
        $expectedMessageHeader = array(
505
            'Content-Type: text/plain; charset="iso-8859"',
506
            'Content-Transfer-Encoding: 7bit',
507
            '',
508
        );
509
510
        $archangel = new Archangel();
511
        $buildMethod = $this->getProtectedMethod('buildPlainMessageHeader');
512
        $messageHeader = $buildMethod->invoke($archangel);
513
514
        $this->assertEquals($expectedMessageHeader, $messageHeader);
515
    }
516
517 View Code Duplication
    public function testBuildHtmlMessageHeader()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
518
    {
519
        $expectedMessageHeader = array(
520
            'Content-Type: text/html; charset="iso-8859-1"',
521
            'Content-Transfer-Encoding: 7bit',
522
            '',
523
        );
524
525
        $archangel = new Archangel();
526
        $buildMethod = $this->getProtectedMethod('buildHtmlMessageHeader');
527
        $messageHeader = $buildMethod->invoke($archangel);
528
529
        $this->assertEquals($expectedMessageHeader, $messageHeader);
530
    }
531
532
    /**
533
     * @dataProvider dataBuildHeaders
534
     */
535
    public function testBuildHeaders(
536
        $expectedHeaders,
537
        $headers,
538
        $attachments,
539
        $plainMessage,
540
        $htmlMessage
541
    ) {
542
        $archangel = new Archangel();
543
        $headersProperty = $this->getProtectedProperty('headers');
544
        $headersProperty->setValue($archangel, $headers);
545
546
        if (!empty($attachments)) {
547
            $attachmentsProperty = $this->getProtectedProperty('attachments');
548
            $attachmentsProperty->setValue($archangel, $attachments);
549
        }
550
551
        if (!empty($plainMessage)) {
552
            $plainMessageProperty = $this->getProtectedProperty('plainMessage');
553
            $plainMessageProperty->setValue($archangel, $plainMessage);
554
        }
555
556
        if (!empty($htmlMessage)) {
557
            $htmlMessageProperty = $this->getProtectedProperty('htmlMessage');
558
            $htmlMessageProperty->setValue($archangel, $htmlMessage);
559
        }
560
561
        $buildHeadersMethod = $this->getProtectedMethod('buildHeaders');
562
        $builtHeaders = $buildHeadersMethod->invoke($archangel);
563
564
        $this->assertEquals($expectedHeaders, $builtHeaders);
565
    }
566
567
    public function dataBuildHeaders()
568
    {
569
        return array(
570
            array(
571
                'expectedHeaders' =>
572
                    "From: [email protected]\r\n" .
573
                    "X-Mailer: PHP/6.0.0",
574
                'headers' => array(
575
                    'From' => '[email protected]',
576
                    'X-Mailer' => sprintf('PHP/%s', phpversion())
577
                ),
578
                'attachments' => null,
579
                'plainMessage' => true,
580
                'htmlMessage' => null,
581
            ),
582
            array(
583
                'expectedHeaders' =>
584
                    "CC: [email protected], [email protected]\r\n" .
585
                    "From: [email protected]\r\n" .
586
                    "X-Mailer: PHP/6.0.0",
587
                'headers' => array(
588
                    'CC' => array('[email protected]', '[email protected]'),
589
                    'From' => '[email protected]',
590
                    'X-Mailer' => sprintf('PHP/%s', phpversion())
591
                ),
592
                'attachments' => null,
593
                'plainMessage' => true,
594
                'htmlMessage' => null,
595
            ),
596
            array(
597
                'expectedHeaders' =>
598
                    "BCC: [email protected], [email protected]\r\n" .
599
                    "From: [email protected]\r\n" .
600
                    "X-Mailer: PHP/6.0.0",
601
                'headers' => array(
602
                    'BCC' => array('[email protected]', '[email protected]'),
603
                    'From' => '[email protected]',
604
                    'X-Mailer' => sprintf('PHP/%s', phpversion())
605
                ),
606
                'attachments' => null,
607
                'plainMessage' => true,
608
                'htmlMessage' => null,
609
            ),
610
            array(
611
                'expectedHeaders' =>
612
                    "From: [email protected]\r\n" .
613
                    "X-Mailer: PHP/6.0.0\r\n" .
614
                    "Content-Type: multipart/mixed; boundary=\"PHP-mixed-1234567890123\"",
615
                'headers' => array(
616
                    'From' => '[email protected]',
617
                    'X-Mailer' => sprintf('PHP/%s', phpversion())
618
                ),
619
                'attachments' => true,
620
                'plainMessage' => true,
621
                'htmlMessage' => null,
622
            ),
623
            array(
624
                'expectedHeaders' =>
625
                    "From: [email protected]\r\n" .
626
                    "X-Mailer: PHP/6.0.0\r\n" .
627
                    "Content-Type: multipart/alternative; boundary=\"PHP-alternative-1234567890123\"",
628
                'headers' => array(
629
                    'From' => '[email protected]',
630
                    'X-Mailer' => sprintf('PHP/%s', phpversion())
631
                ),
632
                'attachments' => null,
633
                'plainMessage' => true,
634
                'htmlMessage' => true,
635
            ),
636
            array(
637
                'expectedHeaders' =>
638
                    "From: [email protected]\r\n" .
639
                    "X-Mailer: PHP/6.0.0\r\n" .
640
                    "Content-type: text/html; charset=\"iso-8859-1\"",
641
                'headers' => array(
642
                    'From' => '[email protected]',
643
                    'X-Mailer' => sprintf('PHP/%s', phpversion())
644
                ),
645
                'attachments' => null,
646
                'plainMessage' => null,
647
                'htmlMessage' => true,
648
            ),
649
        );
650
    }
651
652
    public function testBuildAttachmentContent()
653
    {
654
        $textContent = 'Dummy Content';
655
        $expectedContent = chunk_split(base64_encode($textContent));
656
657
        $path = __DIR__ . '/test.txt';
658
        $handle = fopen($path, 'w');
659
        fwrite($handle, $textContent);
660
        fclose($handle);
661
662
        $archangel = new Archangel();
663
        $buildMethod = $this->getProtectedMethod('buildAttachmentContent');
664
        $content = $buildMethod->invokeArgs($archangel, array($path));
665
666
        unlink($path);
667
        $this->assertEquals($expectedContent, $content);
668
    }
669
670
    protected function getProtectedProperty($property)
671
    {
672
        $reflectedArchangel = new ReflectionClass('Jacobemerick\Archangel\Archangel');
673
        $reflectedProperty = $reflectedArchangel->getProperty($property);
674
        $reflectedProperty->setAccessible(true);
675
676
        return $reflectedProperty;
677
    }
678
679
    protected function getProtectedMethod($method)
680
    {
681
        $reflectedArchangel = new ReflectionClass('Jacobemerick\Archangel\Archangel');
682
        $reflectedMethod = $reflectedArchangel->getMethod($method);
683
        $reflectedMethod->setAccessible(true);
684
685
        return $reflectedMethod;
686
    }
687
}
688