Completed
Push — master ( ac63be...fbf3ff )
by Craig
06:34
created

MailerApiTest::testSendMessageSetSubjectAndBody()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 8
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 8
loc 8
rs 9.4285
c 1
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the Zikula package.
5
 *
6
 * Copyright Zikula Foundation - http://zikula.org/
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Zikula\MailerModule\Tests\Api;
13
14
use Symfony\Component\EventDispatcher\EventDispatcher;
15
use Zikula\Bundle\CoreBundle\DynamicConfigDumper;
16
use Zikula\Bundle\CoreBundle\HttpKernel\ZikulaHttpKernelInterface;
17
use Zikula\Common\Translator\IdentityTranslator;
18
use Zikula\ExtensionsModule\Api\ApiInterface\VariableApiInterface;
19
use Zikula\MailerModule\Api\ApiInterface\MailerApiInterface;
20
use Zikula\MailerModule\Api\MailerApi;
21
use Zikula\MailerModule\Tests\Api\Fixtures\CountableMemorySpool;
22
23
/**
24
 * Class MailerApiTest
25
 * @see https://www.pmg.com/blog/integration-testing-swift-mailer/
26
 */
27
class MailerApiTest extends \PHPUnit_Framework_TestCase
28
{
29
    /**
30
     * @var MailerApiInterface
31
     */
32
    private $api;
33
34
    /**
35
     * @var CountableMemorySpool
36
     */
37
    private $mailSpool;
38
39
    /**
40
     * MailerApiTest setUp.
41
     */
42
    public function setUp()
43
    {
44
        $kernel = $this->getMockBuilder(ZikulaHttpKernelInterface::class)->getMock();
45
        $kernel->method('getLogDir')->willReturn('');
46
        $configDumper = $this->getMockBuilder(DynamicConfigDumper::class)
47
            ->disableOriginalConstructor()
48
            ->getMock();
49
        $configDumper->method('getConfiguration')->willReturn([]);
50
        $variableApi = $this->getMockBuilder(VariableApiInterface::class)->getMock();
51
        $variableApi->method('getAll')->willReturn([
52
            'charset' => 'UTF-8',
53
            'encoding' => '8bit',
54
            'html' => false,
55
            'wordwrap' => 50,
56
            'enableLogging' => false,
57
        ]);
58
        $this->mailSpool = new CountableMemorySpool();
59
        $transport = new \Swift_Transport_SpoolTransport(
60
            new \Swift_Events_SimpleEventDispatcher(),
61
            $this->mailSpool
62
        );
63
64
        $mailer = new \Swift_Mailer($transport);
65
        $this->api = new MailerApi(true, $kernel, new IdentityTranslator(), new EventDispatcher(), $configDumper, $variableApi, $mailer);
66
    }
67
68
    public function testInstance()
69
    {
70
        $this->assertInstanceOf(MailerApiInterface::class, $this->api);
71
    }
72
73
    public function testSendMessage()
74
    {
75
        $message = $this->getMessage();
76
        $message->setSubject('test subject')
77
            ->setBody('message body 45678');
78
        $this->assertTrue($this->api->sendMessage($message));
79
        $this->assertEquals(1, $this->mailSpool->count());
80
        $spooledMessage = $this->mailSpool->getMessages()[0];
81
        $this->assertArrayHasKey('[email protected]', $spooledMessage->getFrom());
82
        $this->assertArrayHasKey('[email protected]', $spooledMessage->getTo());
83
        $this->assertEquals('test subject', $spooledMessage->getSubject());
84
        $this->assertEquals('message body 45678', $spooledMessage->getBody());
85
    }
86
87
    public function testSendMultiple()
88
    {
89
        $message = $this->getMessage();
90
        for ($i = 1; $i <= 10; $i++) {
91
            $message->setSubject('message #' . $i)
92
                ->setBody('body of message #' . $i);
93
            $this->assertTrue($this->api->sendMessage($message));
94
        }
95
        $this->assertEquals(10, $this->mailSpool->count());
96
        $spooledMessage = $this->mailSpool->getMessages()[4];
97
        $this->assertEquals('message #5', $spooledMessage->getSubject());
98
        $this->assertEquals('body of message #5', $spooledMessage->getBody());
99
    }
100
101 View Code Duplication
    public function testSendMessageSetSubjectAndBody()
102
    {
103
        $message = $this->getMessage();
104
        $this->assertTrue($this->api->sendMessage($message, 'subject 789', 'body 789'));
105
        $spooledMessage = $this->mailSpool->getMessages()[0];
106
        $this->assertEquals('subject 789', $spooledMessage->getSubject());
107
        $this->assertEquals('body 789', $spooledMessage->getBody());
108
    }
109
110 View Code Duplication
    public function testSendHtml()
111
    {
112
        $message = $this->getMessage();
113
        $this->assertTrue($this->api->sendMessage($message, 'subject 123', '<strong>body 123</strong>', '', true));
114
        $spooledMessage = $this->mailSpool->getMessages()[0];
115
        $this->assertEquals('<strong>body 123</strong>', $spooledMessage->getBody());
116
        $this->assertEquals('text/html', $spooledMessage->getContentType());
117
    }
118
119 View Code Duplication
    public function testSendMultipart()
120
    {
121
        $message = $this->getMessage();
122
        $this->assertTrue($this->api->sendMessage($message, 'subject 234', '<strong>body 234</strong>', 'body 234'));
123
        $spooledMessage = $this->mailSpool->getMessages()[0];
124
        $this->assertEquals('<strong>body 234</strong>', $spooledMessage->getBody());
125
        $this->assertEquals('multipart/alternative', $spooledMessage->getContentType());
126
    }
127
128
    public function testSendWithCustomHeaders()
129
    {
130
        $message = $this->getMessage();
131
        $message->getHeaders()->addTextHeader('X-ZIKULA-CUSTOM1', '345');
132
        $this->assertTrue($this->api->sendMessage($message, 'subject 345', 'body 345', '', false, ['X-ZIKULA-CUSTOM2' => '345']));
133
        $spooledMessage = $this->mailSpool->getMessages()[0];
134
        $this->assertEquals('X-ZIKULA-CUSTOM1: 345', trim($spooledMessage->getHeaders()->get('X-ZIKULA-CUSTOM1')->toString()));
135
        $this->assertEquals('X-ZIKULA-CUSTOM2: 345', trim($spooledMessage->getHeaders()->get('X-ZIKULA-CUSTOM2')->toString()));
136
    }
137
138
    public function testSendWithAttachment()
139
    {
140
        $message = $this->getMessage();
141
        $initialChildCount = count($message->getChildren());
142
        $message->attach(\Swift_Attachment::fromPath(__DIR__ . '/Fixtures/bar.txt'));
143
        $filePath = __DIR__ . '/Fixtures/foo.txt';
144
        $this->assertTrue($this->api->sendMessage($message, 'subject 456', 'body 456', '', false, [], [$filePath]));
145
        $spooledMessage = $this->mailSpool->getMessages()[0];
146
        $children = $spooledMessage->getChildren();
147
        $this->assertEquals($initialChildCount + 2, count($children));
148
        foreach ($children as $k => $child) {
149
            $this->assertEquals('text/plain', $child->getContentType());
150
            $this->assertInstanceOf('Swift_Mime_Headers_ParameterizedHeader', $child->getHeaders()->get('Content-Disposition'));
151
        }
152
        $this->assertEquals('bar.txt', $children[0]->getHeaders()->get('Content-Disposition')->getParameter('filename'));
153
        $this->assertEquals('foo.txt', $children[1]->getHeaders()->get('Content-Disposition')->getParameter('filename'));
154
    }
155
156
    private function getMessage($from = '[email protected]', $to = '[email protected]')
157
    {
158
        $message = new \Swift_Message();
159
        $message->setFrom($from)
160
            ->setTo($to);
161
162
        return $message;
163
    }
164
}
165