Completed
Push — master ( 6e9dcf...450d1d )
by Dominik
05:20
created

AzineTwigSwiftMailerTest   A

Complexity

Total Complexity 22

Size/Duplication

Total Lines 392
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 12
Bugs 2 Features 3
Metric Value
wmc 22
c 12
b 2
f 3
lcom 1
cbo 3
dl 0
loc 392
rs 10

15 Methods

Rating   Name   Duplication   Size   Complexity  
A getUserMock() 0 8 1
A getMockSetup() 0 52 1
A returnOne() 0 3 1
A returnOneValidateCampaignUrls() 0 10 1
A returnZeroWithFailedAddress() 0 4 1
B renderBlockCallback() 0 16 5
A generateCallback() 0 13 4
A testSendSingleEmail() 0 18 1
A testSendSingleEmailFails() 0 65 1
B testSendEmailWithEmailLocaleAndAttachments() 0 40 1
B testSendEmailWithEmailLocaleAndInexistentAttachment() 0 80 1
B testSendEmailWithOutEmailLocaleAndNoAttachment() 0 30 1
A testSendConfirmationEmailMessage() 0 4 1
A testSendResettingEmailMessage() 0 4 1
A prepareForSendTest() 0 18 1
1
<?php
2
namespace Azine\EmailBundle\Tests\Services;
3
4
use Azine\EmailBundle\Services\AzineTemplateProvider;
5
use Azine\EmailBundle\DependencyInjection\AzineEmailExtension;
6
use Azine\EmailBundle\Services\AzineTwigSwiftMailer;
7
8
class AzineTwigSwiftMailerTest extends \PHPUnit_Framework_TestCase
9
{
10
    private function getMockSetup($sendCallback)
11
    {
12
        $mocks['mailer'] = $this->getMockBuilder("\Swift_Mailer")->disableOriginalConstructor()->getMock();
0 ignored issues
show
Coding Style Comprehensibility introduced by
$mocks was never initialized. Although not strictly required by PHP, it is generally a good practice to add $mocks = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
13
        $mocks['mailer']->expects($this->once())->method('send')->will($this->returnCallback($sendCallback));
14
        $mocks['router'] = $this->getMockBuilder("Symfony\Component\Routing\Generator\UrlGeneratorInterface")->disableOriginalConstructor()->getMock();
15
        $mocks['twig'] = $this->getMockBuilder("\Twig_Environment")->disableOriginalConstructor()->getMock();
16
        $mocks['baseTemplateMock'] = $this->getMockBuilder("\Twig_Template")->disableOriginalConstructor()->setMethods(array('renderBlock'))->getMockForAbstractClass();
17
        $mocks['twig']->expects($this->once())->method('loadTemplate')->will($this->returnValue($mocks['baseTemplateMock']));
18
19
        $mocks['logger'] = $this->getMockBuilder("Monolog\Logger")->disableOriginalConstructor()->getMock();
20
21
        $mocks['translator'] = $this->getMockBuilder("Symfony\Bundle\FrameworkBundle\Translation\Translator")->disableOriginalConstructor()->getMock();
22
        $mocks['translator']->expects($this->any())->method('trans')->will($this->returnValue("azine.translation.mock"));
23
24
        $imagesDir = realpath(__DIR__."/../../Resources/htmlTemplateImages/");
25
        $mocks['templateProvider'] = new AzineTemplateProvider($mocks['router'], $mocks['translator'], array(	AzineEmailExtension::ALLOWED_IMAGES_FOLDERS => array($imagesDir),
26
                                                                                                                AzineEmailExtension::TEMPLATE_IMAGE_DIR => $imagesDir,
27
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
28
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
29
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
30
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
31
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
32
                                                                                                                ));
33
        $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
34
35
        $mocks['entityManager'] = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
36
        $mocks['parameters'] = array(	AzineEmailExtension::NO_REPLY => array(
37
                                                                                AzineEmailExtension::NO_REPLY_EMAIL_ADDRESS => '[email protected]',
38
                                                                                AzineEmailExtension::NO_REPLY_EMAIL_NAME => 'no-reply-name'),
39
                                        AzineTemplateProvider::CONTENT_ITEMS => array(
40
                                                                                        0 => array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('notification' => array('title' => 'some title', 'created' => new \DateTime('2 hours ago'), 'content' => "some content"))),
41
                                                                                        1 => array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('notification' => array('title' => 'some other title', 'created' => new \DateTime('1 hours ago'), 'content' => "some other content")))
42
                                                                                    ),
43
                                        'logo_png' => $imagesDir."/logo.png",
44
                                        'noFile_png' => $imagesDir."/../../../unallowedFolder/logo.png",
45
                                        'not_allowed_png' => $imagesDir."/inexistentFile.png",
46
                                    );
47
        $requestContext = $this->getMockBuilder("Symfony\Component\Routing\RequestContext")->disableOriginalConstructor()->getMock();
48
        $requestContext->expects($this->once())->method("getHost")->will($this->returnValue("azine.test.host"));
49
        $mocks['router']->expects($this->once())->method('getContext')->will($this->returnValue($requestContext));
50
51
        $mocks['trackingCodeImgBuilder'] = $this->getMockBuilder("Azine\EmailBundle\Services\AzineEmailOpenTrackingCodeBuilder")->setConstructorArgs(array("https://www.google-analytics.com/?tid=blabla", array(AzineEmailExtension::ALLOWED_IMAGES_FOLDERS => array($imagesDir),
52
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
53
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
54
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
55
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
56
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
57
            )))->getMock();
58
        $mocks['trackingCodeImgBuilder']->expects($this->any())->method('getTrackingImgCode')->will($this->returnValue("<img src='https://www.google-analytics.com/?tid=blabla&utm_medium=email' style='border:0' alt='' />"));
59
60
        return $mocks;
61
    }
62
63
    public function returnOne(\Swift_Mime_Message $message, &$failedRecipients = null){
64
        return 1;
65
    }
66
67
    public function returnOneValidateCampaignUrls(\Swift_Mime_Message $message, &$failedRecipients = null){
68
        $body = $message->getBody();
69
70
        // has a email-tracking-image at the end
71
        $this->assertContains("<img src='https://www.google-analytics.com/?tid=blabla", $body, "Email open tracking image not found.");
72
73
        // links have tracking-parameters
74
        $this->assertContains("&utm_medium=email", $body, "Email links are expected to have tracking parameters attached.");
75
        return 1;
76
    }
77
78
    public function returnZeroWithFailedAddress(\Swift_Mime_Message $message, &$failedRecipients = null){
79
        $failedRecipients[] = $message->getTo();
80
        return 0;
81
    }
82
83
    /**
84
     * @return \FOS\UserBundle\Model\UserInterface
85
     */
86
    private function getUserMock()
87
    {
88
        $user = $this->getMockBuilder("FOS\UserBundle\Model\UserInterface")->disableOriginalConstructor()->getMock();
89
        $user->expects($this->once())->method('getEmail')->will($this->returnValue("[email protected]"));
90
        $user->expects($this->any())->method('getConfirmationToken')->will($this->returnValue("aptrqi3o4pte:::token:::zfpguhask5jx0a9xukp"));
91
92
        return $user;
93
    }
94
95
    public function renderBlockCallback($name, $context = array(), $blocks = array())
96
    {
97
        if ($name == 'subject') {
98
            return "a subject";
99
        } elseif ($name == 'body_html') {
100
            $generatedImage = "";
101
            if (array_key_exists("embededUsedGeneratedImage", $context)) {
102
                $generatedImage = "<img src='".$context['embededUsedGeneratedImage']."' alt='generatedImage'>";
103
            }
104
105
            return  "<html><body><h1>a html body</h1>$generatedImage<a href='http://some.url.com/' ><img src='".$context['logo_png']."' alt='logo'></a><p>with a paragraph and <a href='https://foo.bar.com/index.php?q=4'>links</a>.</p></body><html>";
106
        } elseif ($name == 'body_text') {
107
            return "a text body \n \n with new lines.";
108
        }
109
        throw new \Exception("un-known block : '$name'");
110
    }
111
112
    public function generateCallback($name, $parameters = array(), $referenceType = self::ABSOLUTE_PATH)
113
    {
114
        if ($name == 'fos_user_registration_confirm') {
115
            return "http://azine.bundle.com/confirmation/url/".$parameters['token'];
116
117
        } elseif ($name == 'fos_user_resetting_reset') {
118
            return "http://azine.bundle.com/resetting/url/".$parameters['token'];
119
120
        } elseif ($name == 'azine_email_serve_template_image') {
121
            return "http://azine.bundle.com/image/url/logo.png";
122
        }
123
        throw new \Exception("un-expected route for url-generation : '$name'");
124
    }
125
126
    public function testSendSingleEmail()
127
    {
128
        $mocks = $this->getMockSetup(array($this, 'returnOneValidateCampaignUrls'));
129
        $mocks['baseTemplateMock']->expects($this->exactly(2))->method('renderBlock')->will($this->returnCallback(array($this, 'renderBlockCallback')));
130
        $mocks['translator']->expects($this->once())->method('getLocale')->will($this->returnValue("en"));
131
        $mocks['router']->expects($this->exactly(12))->method('generate')->will($this->returnCallback(array($this, 'generateCallback')));
132
133
        $azineMailer = new AzineTwigSwiftMailer($mocks['mailer'], $mocks['router'], $mocks['twig'], $mocks['logger'], $mocks['translator'], $mocks['templateProvider'], $mocks['entityManager'], $mocks['trackingCodeImgBuilder'], $mocks['parameters']);
134
135
        $to = "[email protected]";
136
        $toName = "ToName";
137
        $params = array("aKey" => "aValue", 'contentItems' => array(array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('someOtherKey' => 'someOtherValue'))));
138
        $template = AzineTemplateProvider::NEWSLETTER_TEMPLATE.".txt.twig";
139
        $emailLocale = "en";
140
        $subject = "custom subject";
141
        $azineMailer->sendSingleEmail($to, $toName, $subject, $params, $template, $emailLocale);
142
143
    }
144
145
    public function testSendSingleEmailFails()
146
    {
147
        $mocks = array();
148
        $mocks['mailer'] = $this->getMockBuilder("\Swift_Mailer")->disableOriginalConstructor()->getMock();
149
        $mocks['mailer']->expects($this->once())->method('send')->will($this->returnCallback(array($this, 'returnZeroWithFailedAddress')));
150
        $mocks['router'] = $this->getMockBuilder("Symfony\Component\Routing\Generator\UrlGeneratorInterface")->disableOriginalConstructor()->getMock();
151
        $mocks['twig'] = $this->getMockBuilder("\Twig_Environment")->disableOriginalConstructor()->getMock();
152
        $mocks['baseTemplateMock'] = $this->getMockBuilder("\Twig_Template")->disableOriginalConstructor()->setMethods(array('renderBlock'))->getMockForAbstractClass();
153
        $mocks['twig']->expects($this->once())->method('loadTemplate')->will($this->returnValue($mocks['baseTemplateMock']));
154
155
        $mocks['logger'] = $this->getMockBuilder("Monolog\Logger")->disableOriginalConstructor()->getMock();
156
157
        $mocks['translator'] = $this->getMockBuilder("Symfony\Bundle\FrameworkBundle\Translation\Translator")->disableOriginalConstructor()->getMock();
158
        $mocks['translator']->expects($this->any())->method('trans')->will($this->returnValue("azine.translation.mock"));
159
160
        $imagesDir = realpath(__DIR__."/../../Resources/htmlTemplateImages/");
161
        $mocks['templateProvider'] = new AzineTemplateProvider($mocks['router'], $mocks['translator'], array(	AzineEmailExtension::ALLOWED_IMAGES_FOLDERS => array($imagesDir),
162
            AzineEmailExtension::TEMPLATE_IMAGE_DIR => $imagesDir,
163
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
164
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
165
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
166
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
167
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
168
        ));
169
        $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
170
171
        $mocks['entityManager'] = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
172
        $mocks['parameters'] = array(	AzineEmailExtension::NO_REPLY => array(
173
            AzineEmailExtension::NO_REPLY_EMAIL_ADDRESS => '[email protected]',
174
            AzineEmailExtension::NO_REPLY_EMAIL_NAME => 'no-reply-name'),
175
            AzineTemplateProvider::CONTENT_ITEMS => array(
176
                0 => array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('notification' => array('title' => 'some title', 'created' => new \DateTime('2 hours ago'), 'content' => "some content"))),
177
                1 => array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('notification' => array('title' => 'some other title', 'created' => new \DateTime('1 hours ago'), 'content' => "some other content")))
178
            ),
179
            'logo_png' => $imagesDir."/logo.png",
180
            'noFile_png' => $imagesDir."/../../../unallowedFolder/logo.png",
181
            'not_allowed_png' => $imagesDir."/inexistentFile.png",
182
        );
183
        $requestContext = $this->getMockBuilder("Symfony\Component\Routing\RequestContext")->disableOriginalConstructor()->getMock();
184
        $requestContext->expects($this->once())->method("getHost")->will($this->returnValue("azine.test.host"));
185
        $mocks['router']->expects($this->once())->method('getContext')->will($this->returnValue($requestContext));
186
187
        $mocks['trackingCodeImgBuilder'] = $this->getMockBuilder("Azine\EmailBundle\Services\AzineEmailOpenTrackingCodeBuilder")->setConstructorArgs(array("https://www.google-analytics.com/?tid=blabla", array(AzineEmailExtension::ALLOWED_IMAGES_FOLDERS => array($imagesDir),
188
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
189
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
190
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
191
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
192
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
193
        )))->getMock();
194
195
        $mocks['baseTemplateMock']->expects($this->exactly(2))->method('renderBlock')->will($this->returnCallback(array($this, 'renderBlockCallback')));
196
        $mocks['translator']->expects($this->once())->method('getLocale')->will($this->returnValue("en"));
197
        //$mocks['router']->expects($this->exactly(12))->method('generate')->will($this->returnCallback(array($this, 'generateCallback')));
198
199
        $azineMailer = new AzineTwigSwiftMailer($mocks['mailer'], $mocks['router'], $mocks['twig'], $mocks['logger'], $mocks['translator'], $mocks['templateProvider'], $mocks['entityManager'], $mocks['trackingCodeImgBuilder'], $mocks['parameters']);
200
201
        $to = "[email protected]";
202
        $toName = "ToName";
203
        $params = array("aKey" => "aValue", 'contentItems' => array(array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('someOtherKey' => 'someOtherValue'))));
204
        $template = AzineTemplateProvider::NEWSLETTER_TEMPLATE.".txt.twig";
205
        $emailLocale = "en";
206
        $subject = "custom subject";
207
        $result = $azineMailer->sendSingleEmail($to, $toName, $subject, $params, $template, $emailLocale);
208
        $this->assertFalse($result, "expected send to fail");
209
    }
210
211
    public function testSendEmailWithEmailLocaleAndAttachments()
212
    {
213
        $mocks = $this->getMockSetup(array($this, 'returnOne'));
214
        $mocks['baseTemplateMock']->expects($this->exactly(2))->method('renderBlock')->will($this->returnCallback(array($this, 'renderBlockCallback')));
215
        $mocks['translator']->expects($this->once())->method('getLocale')->will($this->returnValue("en"));
216
        $mocks['router']->expects($this->exactly(6))->method('generate')->will($this->returnCallback(array($this, 'generateCallback')));
217
218
        $azineMailer = new AzineTwigSwiftMailer($mocks['mailer'], $mocks['router'], $mocks['twig'], $mocks['logger'], $mocks['translator'], $mocks['templateProvider'], $mocks['entityManager'], $mocks['trackingCodeImgBuilder'], $mocks['parameters']);
219
220
        $failedRecipients = array();
221
        $from = "[email protected]";
222
        $fromName = "FromName";
223
        $to = "[email protected]";
224
        $toName = "ToName";
225
        $cc = "[email protected]";
226
        $ccName = "CcName";
227
        $bcc = "[email protected]";
228
        $bccName = "BccName";
229
        $replyTo = "[email protected]";
230
        $replyToName = "ReplyToName";
231
        $subject = "some dummy test subject";
232
        $params = array();
233
        $generatedImage = imagecreate(100, 100);
234
        $background_color = imagecolorallocate($generatedImage, 0, 0, 0);
0 ignored issues
show
Unused Code introduced by
$background_color is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
235
        $text_color = imagecolorallocate($generatedImage, 233, 14, 91);
236
        imagestring($generatedImage, 1, 5, 5,  "A Simple Text String", $text_color);
237
        $template = AzineTemplateProvider::NEWSLETTER_TEMPLATE.".txt.twig";
238
239
        // embed a regular file, a generated file and an invalid file
240
        $params['embededUnusedFile'] = __FILE__;
241
        $params['embededUnusedGeneratedFile'] = $generatedImage;
242
        $params['embededUsedGeneratedImage'] = $generatedImage;
243
        $params['embededUnusedInexistentFile'] = __FILE__."not.existent.jpg";
244
245
        // attach a regular file and a generated file
246
        $attachments = array('regularFile' => __FILE__, 'generatedFile' => $generatedImage, "fileWithVeryShortName.replacement.txt" => __DIR__."/a.b");
247
        $emailLocale = "en";
248
249
        $azineMailer->sendEmail($failedRecipients, $subject, $from, $fromName, $to, $toName, $cc, $ccName, $bcc, $bccName, $replyTo, $replyToName, $params, $template, $attachments, $emailLocale);
250
    }
251
252
    /**
253
     * @expectedException  Symfony\Component\HttpFoundation\File\Exception\FileException
254
     */
255
    public function testSendEmailWithEmailLocaleAndInexistentAttachment()
256
    {
257
        $mocks['mailer'] = $this->getMockBuilder("\Swift_Mailer")->disableOriginalConstructor()->getMock();
0 ignored issues
show
Coding Style Comprehensibility introduced by
$mocks was never initialized. Although not strictly required by PHP, it is generally a good practice to add $mocks = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
258
        $mocks['mailer']->expects($this->never())->method('send');
259
260
        $mocks['router'] = $this->getMockBuilder("Symfony\Component\Routing\Generator\UrlGeneratorInterface")->disableOriginalConstructor()->getMock();
261
        $mocks['twig'] = $this->getMockBuilder("\Twig_Environment")->disableOriginalConstructor()->getMock();
262
        $mocks['baseTemplateMock'] = $this->getMockBuilder("\Twig_Template")->disableOriginalConstructor()->setMethods(array('renderBlock'))->getMockForAbstractClass();
263
        $mocks['twig']->expects($this->once())->method('loadTemplate')->will($this->returnValue($mocks['baseTemplateMock']));
264
265
        $mocks['logger'] = $this->getMockBuilder("Monolog\Logger")->disableOriginalConstructor()->getMock();
266
267
        $mocks['translator'] = $this->getMockBuilder("Symfony\Bundle\FrameworkBundle\Translation\Translator")->disableOriginalConstructor()->getMock();
268
        $mocks['translator']->expects($this->any())->method('trans')->will($this->returnValue("azine.translation.mock"));
269
270
        $imagesDir = realpath(__DIR__."/../../Resources/htmlTemplateImages/");
271
        $mocks['templateProvider'] = new AzineTemplateProvider($mocks['router'], $mocks['translator'], array(	AzineEmailExtension::ALLOWED_IMAGES_FOLDERS => array($imagesDir),
272
                                                                                                                AzineEmailExtension::TEMPLATE_IMAGE_DIR => $imagesDir,
273
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
274
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
275
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
276
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
277
                                                                                                                AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
278
                                                                                                            ));
279
        $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
280
281
        $mocks['entityManager'] = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
282
        $mocks['parameters'] = array(	AzineEmailExtension::NO_REPLY => array(
283
                                                                                AzineEmailExtension::NO_REPLY_EMAIL_ADDRESS => '[email protected]',
284
                                                                                AzineEmailExtension::NO_REPLY_EMAIL_NAME => 'no-reply-name'),
285
                                        AzineTemplateProvider::CONTENT_ITEMS => array(
286
                                                                                        0 => array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('notification' => array('title' => 'some title', 'created' => new \DateTime('2 hours ago'), 'content' => "some content"))),
287
                                                                                        1 => array(AzineTemplateProvider::CONTENT_ITEM_MESSAGE_TEMPLATE => array('notification' => array('title' => 'some other title', 'created' => new \DateTime('1 hours ago'), 'content' => "some other content")))
288
                                                                                    ),
289
                                        'logo_png' => $imagesDir."/logo.png",
290
                                        'noFile_png' => $imagesDir."/../../../unallowedFolder/logo.png",
291
                                        'not_allowed_png' => $imagesDir."/inexistentFile.png",
292
                                    );
293
        $requestContext = $this->getMockBuilder("Symfony\Component\Routing\RequestContext")->disableOriginalConstructor()->getMock();
294
        $requestContext->expects($this->once())->method("getHost")->will($this->returnValue("azine.test.host"));
295
        $mocks['router']->expects($this->once())->method('getContext')->will($this->returnValue($requestContext));
296
        $mocks['baseTemplateMock']->expects($this->exactly(2))->method('renderBlock')->will($this->returnCallback(array($this, 'renderBlockCallback')));
297
        $mocks['translator']->expects($this->once())->method('getLocale')->will($this->returnValue("en"));
298
        $mocks['router']->expects($this->never())->method('generate');
299
300
        $mocks['trackingCodeImgBuilder'] = $this->getMockBuilder("Azine\EmailBundle\Services\AzineEmailOpenTrackingCodeBuilder")->setConstructorArgs(array("http://www.google-analytics.com/?", array(AzineEmailExtension::ALLOWED_IMAGES_FOLDERS => array($imagesDir),
301
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
302
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
303
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
304
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
305
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
306
        )))->getMock();
307
308
309
        $azineMailer = new AzineTwigSwiftMailer($mocks['mailer'], $mocks['router'], $mocks['twig'], $mocks['logger'], $mocks['translator'], $mocks['templateProvider'], $mocks['entityManager'], $mocks['trackingCodeImgBuilder'], $mocks['parameters']);
310
311
        $failedRecipients = array();
312
        $from = "[email protected]";
313
        $fromName = "FromName";
314
        $to = "[email protected]";
315
        $toName = "ToName";
316
        $cc = "[email protected]";
317
        $ccName = "CcName";
318
        $bcc = "[email protected]";
319
        $bccName = "BccName";
320
        $replyTo = "[email protected]";
321
        $replyToName = "ReplyToName";
322
        $subject = "some dummy test subject";
323
        $params = array();
324
        $template = AzineTemplateProvider::NEWSLETTER_TEMPLATE.".txt.twig";
325
326
        // embed an inexistent file
327
        $params['embededUnusedInexistentFile'] = __FILE__."not.existent.jpg";
328
329
        // attach an inexistent file
330
        $attachments = array(__FILE__."not.existent.jpg");
331
        $emailLocale = "en";
332
333
        $azineMailer->sendEmail($failedRecipients, $subject, $from, $fromName, $to, $toName, $cc, $ccName, $bcc, $bccName, $replyTo, $replyToName, $params, $template, $attachments, $emailLocale);
334
    }
335
336
    public function testSendEmailWithOutEmailLocaleAndNoAttachment()
337
    {
338
        $mocks = $this->getMockSetup(array($this, 'returnOne'));
339
        $mocks['baseTemplateMock']->expects($this->exactly(2))->method('renderBlock')->will($this->returnCallback(array($this, 'renderBlockCallback')));
340
        $mocks['translator']->expects($this->once())->method('getLocale')->will($this->returnValue("en"));
341
        $mocks['router']->expects($this->exactly(0))->method('generate')->will($this->returnCallback(array($this, 'generateCallback')));
342
343
        $azineMailer = new AzineTwigSwiftMailer($mocks['mailer'], $mocks['router'], $mocks['twig'], $mocks['logger'], $mocks['translator'], $mocks['templateProvider'], $mocks['entityManager'], $mocks['trackingCodeImgBuilder'], $mocks['parameters']);
344
345
        $failedRecipients = array();
346
        $from = "[email protected]";
347
        $fromName = "FromName";
348
        $to = "[email protected]";
349
        $toName = "ToName";
350
        $cc = "[email protected]";
351
        $ccName = "CcName";
352
        $bcc = "[email protected]";
353
        $bccName = "BccName";
354
        $replyTo = "[email protected]";
355
        $replyToName = "ReplyToName";
356
        $subject = "some dummy test subject";
357
        $params = array();
358
        $template = AzineTemplateProvider::BASE_TEMPLATE.".txt.twig";
359
        $attachments = array();
360
        $emailLocale = null;
361
362
        $sentCount = $azineMailer->sendEmail($failedRecipients, $subject, $from, $fromName, $to, $toName, $cc, $ccName, $bcc, $bccName, $replyTo, $replyToName, $params, $template, $attachments, $emailLocale);
363
364
        $this->assertEquals(1, $sentCount, "One email should have been sent.");
365
    }
366
367
    public function testSendConfirmationEmailMessage(){
368
        $azineMailer = $this->prepareForSendTest(AzineTemplateProvider::FOS_USER_REGISTRATION_TEMPLATE);
369
        $azineMailer->sendConfirmationEmailMessage($this->getUserMock());
370
    }
371
372
    public function testSendResettingEmailMessage(){
373
        $azineMailer = $this->prepareForSendTest(AzineTemplateProvider::FOS_USER_PWD_RESETTING_TEMPLATE);
374
        $azineMailer->sendResettingEmailMessage($user);
0 ignored issues
show
Bug introduced by
The variable $user does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
375
    }
376
377
    /**
378
     * @param $templateBaseId
379
     * @return AzineTwigSwiftMailer
380
     */
381
    private function prepareForSendTest($templateBaseId){
382
        $mocks = $this->getMockSetup();
383
384
        // as the subject from FOS-templates is embeded in the twig-template, the render-block is called 3 instead of only 2 times
385
        $mocks['baseTemplateMock']->expects($this->exactly(3))->method('renderBlock')->will($this->returnCallback(array($this, 'renderBlockCallback')));
386
387
        $mocks['parameters']['template'] = array();
388
        $mocks['parameters']['template']['confirmation'] = $templateBaseId.".txt.twig";
389
        $mocks['parameters']['from_email'] = array();
390
        $mocks['parameters']['from_email']['confirmation'] = '[email protected]';
391
392
        $mocks['router']->expects($this->once())->method('generate')->will($this->returnCallback(array($this, 'generateCallback')));
393
394
        $mocks['translator']->expects($this->exactly(2))->method('getLocale')->will($this->returnValue("en"));
395
396
        $azineMailer = new AzineTwigSwiftMailer($mocks['mailer'], $mocks['router'], $mocks['twig'], $mocks['logger'], $mocks['translator'], $mocks['templateProvider'], $mocks['entityManager'], $mocks['parameters']);
0 ignored issues
show
Bug introduced by
The call to AzineTwigSwiftMailer::__construct() misses a required argument $parameters.

This check looks for function calls that miss required arguments.

Loading history...
397
        return $azineMailer;
398
    }
399
}
400