Completed
Push — master ( b4d027...527e5c )
by Dominik
04:01
created

renderResponseCallback()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 13
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 8.8571
c 0
b 0
f 0
cc 6
eloc 11
nc 6
nop 2
1
<?php
2
namespace Azine\EmailBundle\Tests\Controller;
3
use Azine\EmailBundle\DependencyInjection\AzineEmailExtension;
4
use Azine\EmailBundle\Services\AzineEmailTwigExtension;
5
use Azine\EmailBundle\Tests\FindInFileUtil;
6
use Azine\EmailBundle\Services\AzineTemplateProvider;
7
use Azine\EmailBundle\Entity\SentEmail;
8
use Azine\EmailBundle\Controller\AzineEmailTemplateController;
9
use Symfony\Component\DependencyInjection\ContainerInterface;
10
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
11
use Symfony\Component\HttpFoundation\ParameterBag;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\HttpFoundation\Response;
14
use Symfony\Component\HttpFoundation\Session\Session;
15
use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage;
16
use Symfony\Component\Routing\RequestContext;
17
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
18
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
19
/**
20
 *
21
 * @author d.businger
22
 *
23
 */
24
class AzineEmailTemplateControllerTest extends WebTestCase
25
{
26
    /**
27
     * delete all files from spool-folder
28
     */
29
    protected function setUp()
30
    {
31
    }
32
    public function renderResponseCallback($template, $params)
33
    {
34
        if ($template == "AzineEmailBundle:Webview:index.html.twig") {
35
            return new Response("indexPage-html :".print_r($params, true));
36
        } elseif ($template == "AzineEmailBundle:Webview:mail.not.available.html.twig") {
37
            return new Response("mail.not.available.html.twig :".print_r($params, true));
38
        } elseif ($template == AzineTemplateProvider::NEWSLETTER_TEMPLATE.".html.twig") {
39
            return new Response("newsletter-html <a href='http://testurl.com/'>bla</a>&nbsp;<a href='http://testurl.com/with/?param=1'>with param</a>:".print_r($params, true));
40
        } elseif ($template == AzineTemplateProvider::NEWSLETTER_TEMPLATE.".txt.twig") {
41
            return new Response("newsletter-text bla\n\n some url with param http://testurl.com/with/?param=1 in plain-text:".print_r($params, true));
42
        } else if($template == "A")
43
        throw new \Exception("unexpected template $template");
44
    }
45
    public function testIndexAction()
46
    {
47
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->setMethods(array('get'))->getMock();
48
        $requestMock->expects($this->once())->method('get')->will($this->returnValue("[email protected]"));
49
        $webViewServiceMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineWebViewService")->disableOriginalConstructor()->getMock();
50
        $webViewServiceMock->expects($this->once())->method("getTemplatesForWebPreView")->will($this->returnValue(array(
51
                array(	'url' 			=> "azine_email_web_preview/newsletter",
52
                        'description'	=> "Newsletter Template",
53
                        'formats' 		=> array('html','txt'),
54
                        'templateId'	=> AzineTemplateProvider::NEWSLETTER_TEMPLATE,
55
                ),
56
                array(	'url' 			=> "azine_email_web_preview/notifications",
57
                        'description'	=> "Notifications Template",
58
                        'formats' 		=> array('html','txt'),
59
                        'templateId'	=> AzineTemplateProvider::NOTIFICATIONS_TEMPLATE,
60
                ),
61
        )));
62
        $webViewServiceMock->expects($this->once())->method("getTestMailAccounts")->will($this->returnValue(array(
63
                array('accountDescription' => "Gmail", 'accountEmail' => "[email protected]" ),
64
                array('accountDescription' => "GMX", 'accountEmail' => "[email protected]" ),
65
        )));
66
        $twigMock = $this->getMockBuilder("Symfony\Bundle\TwigBundle\TwigEngine")->disableOriginalConstructor()->getMock();
67
        $twigMock->expects($this->once())->method("renderResponse")->will($this->returnCallback(array($this, 'renderResponseCallback')));
68
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
69
        $containerMock->expects($this->exactly(3))->method("get")->will($this->returnValueMap(array(
70
                array('request', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $requestMock),
71
                array('azine_email_web_view_service', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $webViewServiceMock),
72
                array('templating', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $twigMock)
73
        )));
74
        $controller = new AzineEmailTemplateController();
75
        $controller->setContainer($containerMock);
76
        $controller->indexAction( $requestMock );
77
    }
78
    public function testWebPreViewAction()
79
    {
80
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->setMethods(array('getLocale'))->getMock();
81
        $requestMock->expects($this->exactly(3))->method("getLocale")->will($this->returnValue("en"));
82
        $requestMock->query = new ParameterBag();
83
        $webViewServiceMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineWebViewService")->disableOriginalConstructor()->getMock();
84
        $webViewServiceMock->expects($this->exactly(3))->method("getDummyVarsFor")->will($this->returnValue(array()));
85
        $twigMock = $this->getMockBuilder("Symfony\Bundle\TwigBundle\TwigEngine")->disableOriginalConstructor()->getMock();
86
        $twigMock->expects($this->exactly(3))->method("renderResponse")->will($this->returnCallback(array($this, 'renderResponseCallback')));
87
        $emailVars = array();
88
        $templateProviderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
89
        $templateProviderMock->expects($this->exactly(3))->method('addTemplateVariablesFor')->will($this->returnValue($emailVars));
90
        $templateProviderMock->expects($this->exactly(3))->method('makeImagePathsWebRelative')->will($this->returnValue($emailVars));
91
        $templateProviderMock->expects($this->exactly(3))->method('addTemplateSnippetsWithImagesFor')->will($this->returnValue($emailVars));
92
        $templateProviderMock->expects($this->exactly(3))->method('getCampaignParamsFor')->will($this->returnValue(array("utm_campaign" => "name", "utm_medium" => "medium")));
93
        $trackingCodeBuilderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineEmailOpenTrackingCodeBuilder")->setConstructorArgs(array("http://www.google-analytics.com/?", array(
94
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_NAME=> "utm_campaign",
95
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_TERM => "utm_term",
96
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_SOURCE => "utm_source",
97
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_MEDIUM => "utm_medium",
98
            AzineEmailExtension::TRACKING_PARAM_CAMPAIGN_CONTENT => "utm_content",
99
        )))->getMock();
100
        $trackingCodeBuilderMock->expects($this->exactly(3))->method('getTrackingImgCode')->will($this->returnValue("http://www.google-analytics.com/?"));
101
        $azineEmailTwigExtension = $this->getMockBuilder("Azine\EmailBundle\Services\AzineEmailTwigExtension")->disableOriginalConstructor()->getMock();
102
        $azineEmailTwigExtension->expects($this->exactly(3))->method("addCampaignParamsToAllUrls")->will($this->returnArgument(0));
103
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
104
        $containerMock->expects($this->exactly(24))->method("get")->will($this->returnValueMap(array(
105
                array('request', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $requestMock),
106
                array('azine_email_web_view_service', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $webViewServiceMock),
107
                array('templating', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $twigMock),
108
                array('azine_email_template_provider', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $templateProviderMock),
109
                array('azine_email_email_open_tracking_code_builder', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $trackingCodeBuilderMock),
110
                array('azine.email.bundle.twig.filters', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $azineEmailTwigExtension),
111
        )));
112
        $containerMock->expects($this->exactly(3))->method("getParameter")->with("azine_email_no_reply")->will($this->returnValue(array('email' => "[email protected]", 'name' => 'no-reply-name')));
113
        $controller = new AzineEmailTemplateController();
114
        $controller->setContainer($containerMock);
115
        $controller->webPreViewAction($requestMock, AzineTemplateProvider::NEWSLETTER_TEMPLATE);
116
        $controller->webPreViewAction($requestMock, AzineTemplateProvider::NEWSLETTER_TEMPLATE, "html");
117
        $response = $controller->webPreViewAction($requestMock, AzineTemplateProvider::NEWSLETTER_TEMPLATE, "txt");
118
        $this->assertEquals("text/plain", $response->headers->get("Content-Type"));
119
        $this->assertNotContains("<!doctype", $response->getContent());
120
    }
121
    public function testWebViewAction_User_access_allowed()
122
    {
123
        $token = "fdasdfasfafsadf";
124
        $twigMock = $this->getMockBuilder("Symfony\Bundle\TwigBundle\TwigEngine")->disableOriginalConstructor()->getMock();
125
        $twigMock->expects($this->once())->method("renderResponse")->will($this->returnCallback(array($this, 'renderResponseCallback')));
126
        $userMail = "[email protected]";
127
        $userMock = $this->getMockBuilder('FOS\UserBundle\Model\User')->getMock();
128
        $userMock->expects($this->once())->method("getEmail")->will($this->returnValue($userMail));
129
        $sentEmail = new SentEmail();
130
        $sentEmail->setRecipients(array($userMail));
131
        $sentEmail->setSent(new \DateTime("2 weeks ago"));
132
        $sentEmail->setTemplate(AzineTemplateProvider::NEWSLETTER_TEMPLATE);
133
        $sentEmail->setVariables(array());
134
        $sentEmail->setToken($token);
135
        $repositoryMock = $this->getMockBuilder("Azine\EmailBundle\Entity\Repositories\SentEmailRepository")->disableOriginalConstructor()->setMethods(array('findOneByToken'))->getMock();
136
        $repositoryMock->expects($this->once())->method("findOneByToken")->will($this->returnValue($sentEmail));
137
        $doctrineManagerMock = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
138
        $doctrineManagerRegistryMock = $this->getMockBuilder("Doctrine\Common\Persistence\ManagerRegistry")->disableOriginalConstructor()->getMock();
139
        $doctrineManagerRegistryMock->expects($this->once())->method('getRepository')->with('AzineEmailBundle:SentEmail')->will($this->returnValue($repositoryMock));
140
        $doctrineManagerRegistryMock->expects($this->once())->method('getManager')->will($this->returnValue($this->returnValue($doctrineManagerMock)));
141
        $securityTokenMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\TokenInterface")->disableOriginalConstructor()->getMock();
142
        $securityTokenMock->expects($this->exactly(2))->method('getUser')->will($this->returnValue($userMock));
143
        $tokenStorageMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage")->disableOriginalConstructor()->getMock();
144
        $tokenStorageMock->expects($this->once())->method('getToken')->will($this->returnValue($securityTokenMock));
145
        $templateProviderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
146
        $templateProviderMock->expects($this->once())->method('getWebViewTokenId')->will($this->returnValue("tokenId"));
147
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
148
        $containerMock->expects($this->exactly(5))->method("get")->will($this->returnValueMap(array(
149
                array('azine_email_template_provider', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $templateProviderMock),
150
                array('templating', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $twigMock),
151
                array('doctrine', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $doctrineManagerRegistryMock),
152
                array('security.token_storage', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $tokenStorageMock),
153
        )));
154
        $containerMock->expects($this->once())->method("has")->with('security.token_storage')->will($this->returnValue(true));
155
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
156
        $controller = new AzineEmailTemplateController();
157
        $controller->setContainer($containerMock);
158
        $controller->webViewAction($requestMock, $token);
159
    }
160
    public function testWebViewAction_Anonymous_access_allowed()
161
    {
162
        $token = "fdasdfasfafsadf";
163
        $twigMock = $this->getMockBuilder("Symfony\Bundle\TwigBundle\TwigEngine")->disableOriginalConstructor()->getMock();
164
        $twigMock->expects($this->once())->method("renderResponse")->will($this->returnCallback(array($this, 'renderResponseCallback')));
165
        $sentEmail = new SentEmail();
166
        $sentEmail->setSent(new \DateTime("2 weeks ago"));
167
        $sentEmail->setTemplate(AzineTemplateProvider::NEWSLETTER_TEMPLATE);
168
        $sentEmail->setVariables(array());
169
        $sentEmail->setToken($token);
170
        $repositoryMock = $this->getMockBuilder("Azine\EmailBundle\Entity\Repositories\SentEmailRepository")->disableOriginalConstructor()->setMethods(array('findOneByToken'))->getMock();
171
        $repositoryMock->expects($this->once())->method("findOneByToken")->will($this->returnValue($sentEmail));
172
        $doctrineManagerMock = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
173
        $doctrineManagerRegistryMock = $this->getMockBuilder("Doctrine\Common\Persistence\ManagerRegistry")->disableOriginalConstructor()->getMock();
174
        $doctrineManagerRegistryMock->expects($this->once())->method('getRepository')->with('AzineEmailBundle:SentEmail')->will($this->returnValue($repositoryMock));
175
        $doctrineManagerRegistryMock->expects($this->once())->method('getManager')->will($this->returnValue($this->returnValue($doctrineManagerMock)));
176
        $securityTokenMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\TokenInterface")->disableOriginalConstructor()->getMock();
177
        $securityTokenMock->expects($this->never())->method('getUser');
178
        $tokenStorageMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage")->disableOriginalConstructor()->getMock();
179
        $tokenStorageMock->expects($this->never())->method('getToken');
180
        $templateProviderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
181
        $templateProviderMock->expects($this->once())->method('getWebViewTokenId')->will($this->returnValue("tokenId"));
182
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
183
        $containerMock->expects($this->exactly(4))->method("get")->will($this->returnValueMap(array(
184
                array('azine_email_template_provider', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $templateProviderMock),
185
                array('templating', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $twigMock),
186
                array('doctrine', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $doctrineManagerRegistryMock),
187
                array('security.token_storage', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $tokenStorageMock),
188
        )));
189
        $containerMock->expects($this->never())->method("has");
190
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
191
        $controller = new AzineEmailTemplateController();
192
        $controller->setContainer($containerMock);
193
        $controller->webViewAction($requestMock, $token);
194
    }
195
    /**
196
     * @expectedException Symfony\Component\Security\Core\Exception\AccessDeniedException
197
     */
198
    public function testWebViewAction_User_access_denied()
199
    {
200
        $token = "fdasdfasfafsadf";
201
        $userMail = "[email protected]";
202
        $userMock = $this->getMockBuilder('FOS\UserBundle\Model\User')->getMock();
203
        $userMock->expects($this->once())->method("getEmail")->will($this->returnValue($userMail));
204
        $sentEmail = new SentEmail();
205
        $sentEmail->setRecipients(array("[email protected]"));
206
        $sentEmail->setSent(new \DateTime("2 weeks ago"));
207
        $sentEmail->setTemplate(AzineTemplateProvider::NEWSLETTER_TEMPLATE);
208
        $sentEmail->setVariables(array());
209
        $sentEmail->setToken($token);
210
        $repositoryMock = $this->getMockBuilder("Azine\EmailBundle\Entity\Repositories\SentEmailRepository")->disableOriginalConstructor()->setMethods(array('findOneByToken'))->getMock();
211
        $repositoryMock->expects($this->once())->method("findOneByToken")->will($this->returnValue($sentEmail));
212
        $doctrineManagerMock = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
0 ignored issues
show
Unused Code introduced by
$doctrineManagerMock 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...
213
        $doctrineManagerRegistryMock = $this->getMockBuilder("Doctrine\Common\Persistence\ManagerRegistry")->disableOriginalConstructor()->getMock();
214
        $doctrineManagerRegistryMock->expects($this->once())->method('getRepository')->with('AzineEmailBundle:SentEmail')->will($this->returnValue($repositoryMock));
215
        $securityTokenMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\TokenInterface")->disableOriginalConstructor()->getMock();
216
        $securityTokenMock->expects($this->exactly(2))->method('getUser')->will($this->returnValue($userMock));
217
        $tokenStorageMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage")->disableOriginalConstructor()->getMock();
218
        $tokenStorageMock->expects($this->once())->method('getToken')->will($this->returnValue($securityTokenMock));
219
        $translatorMock = $this->getMockBuilder("Symfony\Bundle\FrameworkBundle\Translation\Translator")->disableOriginalConstructor()->setMethods(array('trans'))->getMock();
220
        $translatorMock->expects($this->once())->method("trans")->will($this->returnValue("translation"));
221
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
222
        $containerMock->expects($this->exactly(3))->method("get")->will($this->returnValueMap(array(
223
                array('doctrine', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $doctrineManagerRegistryMock),
224
                array('security.token_storage', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $tokenStorageMock),
225
                array('translator', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $translatorMock),
226
        )));
227
        $containerMock->expects($this->once())->method("has")->with('security.token_storage')->will($this->returnValue(true));
228
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
229
        $controller = new AzineEmailTemplateController();
230
        $controller->setContainer($containerMock);
231
        $controller->webViewAction($requestMock, $token);
232
    }
233
    /**
234
     * @expectedException Symfony\Component\Security\Core\Exception\AccessDeniedException
235
     */
236
    public function testWebViewAction_Anonymous_Access_denied()
237
    {
238
        $token = "fdasdfasfafsadf";
239
        $sentEmail = new SentEmail();
240
        $sentEmail->setRecipients(array("[email protected]"));
241
        $sentEmail->setSent(new \DateTime("2 weeks ago"));
242
        $sentEmail->setTemplate(AzineTemplateProvider::NEWSLETTER_TEMPLATE);
243
        $sentEmail->setVariables(array());
244
        $sentEmail->setToken($token);
245
        $repositoryMock = $this->getMockBuilder("Azine\EmailBundle\Entity\Repositories\SentEmailRepository")->disableOriginalConstructor()->setMethods(array('findOneByToken'))->getMock();
246
        $repositoryMock->expects($this->once())->method("findOneByToken")->will($this->returnValue($sentEmail));
247
        $doctrineManagerMock = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
0 ignored issues
show
Unused Code introduced by
$doctrineManagerMock 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...
248
        $doctrineManagerRegistryMock = $this->getMockBuilder("Doctrine\Common\Persistence\ManagerRegistry")->disableOriginalConstructor()->getMock();
249
        $doctrineManagerRegistryMock->expects($this->once())->method('getRepository')->with('AzineEmailBundle:SentEmail')->will($this->returnValue($repositoryMock));
250
        $securityTokenMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\TokenInterface")->disableOriginalConstructor()->getMock();
251
        $securityTokenMock->expects($this->once())->method('getUser')->will($this->returnValue(null));
252
        $tokenStorageMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage")->disableOriginalConstructor()->getMock();
253
        $tokenStorageMock->expects($this->once())->method('getToken')->will($this->returnValue($securityTokenMock));
254
        $translatorMock = $this->getMockBuilder("Symfony\Bundle\FrameworkBundle\Translation\Translator")->disableOriginalConstructor()->setMethods(array('trans'))->getMock();
255
        $translatorMock->expects($this->once())->method("trans")->will($this->returnValue("translation"));
256
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
257
        $containerMock->expects($this->exactly(3))->method("get")->will($this->returnValueMap(array(
258
                array('doctrine', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $doctrineManagerRegistryMock),
259
                array('security.token_storage', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $tokenStorageMock),
260
                array('translator', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $translatorMock),
261
        )));
262
        $containerMock->expects($this->once())->method("has")->with('security.token_storage')->will($this->returnValue(true));
263
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
264
        $controller = new AzineEmailTemplateController();
265
        $controller->setContainer($containerMock);
266
        $controller->webViewAction($requestMock, $token);
267
    }
268
    public function testWebViewAction_Admin_with_CampaignParams()
269
    {
270
        $token = "fdasdfasfafsadf";
271
        $twigMock = $this->getMockBuilder("Symfony\Bundle\TwigBundle\TwigEngine")->disableOriginalConstructor()->getMock();
272
        $twigMock->expects($this->once())->method("renderResponse")->will($this->returnCallback(array($this, 'renderResponseCallback')));
273
        $userMock = $this->getMockBuilder('FOS\UserBundle\Model\User')->getMock();
274
        $userMock->expects($this->once())->method("getEmail")->will($this->returnValue("[email protected]"));
275
        $userMock->expects($this->once())->method("hasRole")->with("ROLE_ADMIN")->will($this->returnValue(true));
276
        $sentEmail = new SentEmail();
277
        $sentEmail->setRecipients(array("[email protected]"));
278
        $sentEmail->setSent(new \DateTime("2 weeks ago"));
279
        $sentEmail->setTemplate(AzineTemplateProvider::NEWSLETTER_TEMPLATE);
280
        $sentEmail->setVariables(array());
281
        $sentEmail->setToken($token);
282
        $repositoryMock = $this->getMockBuilder("Azine\EmailBundle\Entity\Repositories\SentEmailRepository")->disableOriginalConstructor()->setMethods(array('findOneByToken'))->getMock();
283
        $repositoryMock->expects($this->once())->method("findOneByToken")->will($this->returnValue($sentEmail));
284
        $doctrineManagerMock = $this->getMockBuilder("Doctrine\ORM\EntityManager")->disableOriginalConstructor()->getMock();
285
        $doctrineManagerRegistryMock = $this->getMockBuilder("Doctrine\Common\Persistence\ManagerRegistry")->disableOriginalConstructor()->getMock();
286
        $doctrineManagerRegistryMock->expects($this->once())->method('getRepository')->with('AzineEmailBundle:SentEmail')->will($this->returnValue($repositoryMock));
287
        $doctrineManagerRegistryMock->expects($this->once())->method('getManager')->will($this->returnValue($this->returnValue($doctrineManagerMock)));
288
        $securityTokenMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\TokenInterface")->disableOriginalConstructor()->getMock();
289
        $securityTokenMock->expects($this->exactly(2))->method('getUser')->will($this->returnValue($userMock));
290
        $tokenStorageMock = $this->getMockBuilder("Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage")->disableOriginalConstructor()->getMock();
291
        $tokenStorageMock->expects($this->once())->method('getToken')->will($this->returnValue($securityTokenMock));
292
        $translatorMock = $this->getMockBuilder("Symfony\Bundle\FrameworkBundle\Translation\Translator")->disableOriginalConstructor()->getMock();
293
        $translatorMock->expects($this->any())->method('trans')->will($this->returnArgument(0));
294
        $templateProviderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
295
        $templateProviderMock->expects($this->once())->method('getWebViewTokenId')->will($this->returnValue("tokenId"));
296
        $templateProviderMock->expects($this->once())->method('getCampaignParamsFor')->will($this->returnValue(array("campaign" => "newsletter","keyword" => "2013-11-19")));
297
        $emailTwigExtension = new AzineEmailTwigExtension($templateProviderMock, $translatorMock, array('testurl.com'));
298
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
299
        $containerMock->expects($this->exactly(6))->method("get")->will($this->returnValueMap(array(
300
                array('azine_email_template_provider', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $templateProviderMock),
301
                array('templating', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $twigMock),
302
                array('doctrine', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $doctrineManagerRegistryMock),
303
                array('security.token_storage', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $tokenStorageMock),
304
                array('azine.email.bundle.twig.filters', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $emailTwigExtension),
305
        )));
306
        $containerMock->expects($this->once())->method("has")->with('security.token_storage')->will($this->returnValue(true));
307
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
308
        $controller = new AzineEmailTemplateController();
309
        $controller->setContainer($containerMock);
310
        $response = $controller->webViewAction($requestMock, $token);
311
        $this->assertContains("http://testurl.com/?campaign=newsletter&keyword=2013-11-19", $response->getContent());
312
        $this->assertContains('http://testurl.com/with/?param=1&campaign=newsletter&keyword=2013-11-19', $response->getContent());
313
    }
314
    public function testWebViewAction_MailNotFound()
315
    {
316
        $token = "fdasdfasfafsadf-not-found";
317
        $twigMock = $this->getMockBuilder("Symfony\Bundle\TwigBundle\TwigEngine")->disableOriginalConstructor()->getMock();
318
        $twigMock->expects($this->once())->method("renderResponse")->will($this->returnCallback(array($this, 'renderResponseCallback')));
319
        $repositoryMock = $this->getMockBuilder("Azine\EmailBundle\Entity\Repositories\SentEmailRepository")->disableOriginalConstructor()->setMethods(array('findOneByToken'))->getMock();
320
        $repositoryMock->expects($this->once())->method("findOneByToken")->will($this->returnValue(null));
321
        $doctrineManagerRegistryMock = $this->getMockBuilder("Doctrine\Common\Persistence\ManagerRegistry")->disableOriginalConstructor()->getMock();
322
        $doctrineManagerRegistryMock->expects($this->once())->method('getRepository')->with('AzineEmailBundle:SentEmail')->will($this->returnValue($repositoryMock));
323
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
324
        $containerMock->expects($this->once())->method("getParameter")->with("azine_email_web_view_retention")->will($this->returnValue(123));
325
        $containerMock->expects($this->exactly(2))->method("get")->will($this->returnValueMap(array(
326
                array('templating', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $twigMock),
327
                array('doctrine', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $doctrineManagerRegistryMock),
328
        )));
329
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
330
        $controller = new AzineEmailTemplateController();
331
        $controller->setContainer($containerMock);
332
        $controller->webViewAction($requestMock, $token);
333
    }
334
    public function testServeImageAction()
335
    {
336
        $folderKey = "asdfadfasfasfd";
337
        $filename = "testImage.png";
338
        $templateProviderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
339
        $templateProviderMock->expects($this->exactly(1))->method('getFolderFrom')->with($folderKey)->will($this->returnValue(__DIR__."/"));
340
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
341
        $containerMock->expects($this->exactly(1))->method("get")->will($this->returnValueMap(array(
342
                array('azine_email_template_provider', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $templateProviderMock)
343
                    )));
344
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
345
        $controller = new AzineEmailTemplateController();
346
        $controller->setContainer($containerMock);
347
        $response = $controller->serveImageAction($requestMock, $folderKey, $filename);
348
        $this->assertEquals("image", $response->headers->get("Content-Type"));
349
        $this->assertEquals('inline; filename="'.$filename.'"', $response->headers->get('Content-Disposition'));
350
    }
351
    /**
352
     * @expectedException Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException
353
     */
354
    public function testServeImageAction_404()
355
    {
356
        $folderKey = "asdfadfasfasfd";
357
        $filename = "testImage.not.found.png";
358
        $templateProviderMock = $this->getMockBuilder("Azine\EmailBundle\Services\AzineTemplateProvider")->disableOriginalConstructor()->getMock();
359
        $templateProviderMock->expects($this->exactly(1))->method('getFolderFrom')->with($folderKey)->will($this->returnValue(false));
360
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
361
        $containerMock->expects($this->exactly(1))->method("get")->will($this->returnValueMap(array(
362
                array('azine_email_template_provider', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $templateProviderMock)
363
        )));
364
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->getMock();
365
        $controller = new AzineEmailTemplateController();
366
        $controller->setContainer($containerMock);
367
        $controller->serveImageAction($requestMock, $folderKey, $filename);
368
    }
369
    public function testSendTestEmailAction()
370
    {
371
        if (null !== static::$kernel) {
372
            static::$kernel->shutdown();
373
        }
374
        try {
375
            static::$kernel = static::createKernel(array());
376
        } catch (\RuntimeException $ex) {
377
            $this->markTestSkipped("There does not seem to be a full application available (e.g. running tests on travis.org). So this test is skipped.");
378
            return;
379
        }
380
        static::$kernel->boot();
381
        $container = static::$kernel->getContainer();
382
        $spoolDir = $container->getParameter('swiftmailer.spool.defaultMailer.file.path');
383
        // delete all spooled mails from other tests
384
        array_map('unlink', glob($spoolDir."/*.messag*"));
385
        array_map('unlink', glob($spoolDir."/.*.messag*"));
386
        $context = new RequestContext('/app.php');
387
        $context->setParameter('_locale', 'en');
388
        $router = $container->get('router');
389
        $router->setContext($context);
390
        $to = md5(time()."to").'@email.non-existent.to.mail.domain.com';
391
        $uri = $router->generate("azine_email_send_test_email", array('template' => AzineTemplateProvider::NEWSLETTER_TEMPLATE, 'email' => $to));
392
        $container->set('request', Request::create($uri, "GET"));
393
        // "login" a user
394
        $token = new UsernamePasswordToken("username", "password", "main");
395
        $recipientProvider = $container->get('azine_email_recipient_provider');
396
        $users = $recipientProvider->getNewsletterRecipientIDs();
397
        $token->setUser($recipientProvider->getRecipient($users[0]));
398
        $container->get('security.token_storage')->setToken($token);
399
        $container->get('request')->setSession(new Session(new MockFileSessionStorage()));
400
        // instantiate the controller and try to send the email
401
        $controller = new AzineEmailTemplateController();
402
        $controller->setContainer($container);
403
        $response = $controller->sendTestEmailAction($container->get('request'), AzineTemplateProvider::NEWSLETTER_TEMPLATE, $to);
404
        $this->assertEquals(302, $response->getStatusCode(), "Status-Code 302 expected.");
405
        $uri = $router->generate("azine_email_template_index");
406
        $this->assertContains("Redirecting to $uri", $response->getContent(), "Redirect expected.");
407
        $findInFile = new FindInFileUtil();
408
        $findInFile->excludeMode = false;
409
        $findInFile->formats = array(".message");
410
        $this->assertEquals(1, sizeof($findInFile->find($spoolDir, "This is just the default content-block.")));
411
        $this->assertEquals(1, sizeof($findInFile->find($spoolDir, "Add some html content here")));
412
}
413
    public function testGetSpamIndexReportForSwiftMessage()
414
    {
415
        $swiftMessage = new \Swift_Message();
416
        $swiftMessage->setFrom("[email protected]");
417
        $swiftMessage->setTo("[email protected]");
418
        $swiftMessage->setSubject("a subject.");
419
        $swiftMessage->addPart("Hello dude,
420
================================================================================
421
Add some content here
422
This is just the default content-block.
423
Best regards,
424
the azine team
425
________________________________________________________________________________
426
azine ist ein Service von Azine IT Services AG
427
© 2013 by Azine IT Services AG
428
Füge \"[email protected]\" zu deinem Adressbuch hinzu, um den Empfang von azine Mails sicherzustellen.
429
- Help / FAQs  :  https://some.host.com/app_dev.php/de/help
430
- AGB          :  https://some.host.com/app_dev.php/de/terms
431
- Über azine:  https://some.host.com/app_dev.php/de/about
432
- Kontakt      :  https://some.host.com/app_dev.php/de/contact
433
                ", 'text/plain');
434
        $swiftMessage->setBody("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>azine – </title><meta name=\"description\" content=\"azine – \" /><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /></head><body style=\" color: #484B4C; margin:0; font: normal 12px/18px Arial, Helvetica, sans-serif; background-color: #fdfbfa;\"><table summary=\"header and logo\" width=\"640\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" style=\"font: normal 12px/18px Arial, Helvetica, sans-serif;\"><tr><td>&nbsp;</td><td bgcolor=\"#f2f1f0\">&nbsp;</td><td>&nbsp;</td></tr><tr><td width=\"10\">&nbsp;</td><td width=\"620\" bgcolor=\"#f2f1f0\" style=\"padding: 0px 20px;\"><a href=\"http://azine\" target=\"_blank\" style=\"color: #9fb400; font-size: 55px; font-weight: bold; text-decoration: none;\"><img src=\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/logo.png\"  height=\"35\" width=\"169\" alt=\"azine\" /></a>
435
                    &nbsp;<br /><span style='font-size: 16px; color:#484B4C; margin: 0px; padding: 0px;'>IT-Rekrutierung von morgen... weil du die beste Besetzung verdienst.</span></td><td width=\"10\">&nbsp;</td></tr></table><table summary='box with shadows' width='640' border='0' align='center' cellpadding='0' cellspacing='0'  style='font: normal 14px/18px Arial, Helvetica, sans-serif;'><tr><td colspan='3' width='640'><img width='640' height='10' src='/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/topshadow.png' alt='' style='vertical-align: bottom;'/></td></tr><tr><td width='10' style='border-right: 1px solid #EEEEEE; background-image: url(\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/left-shadow.png\");'>&nbsp;</td><td width=\"620\" bgcolor=\"white\"  style=\"padding:10px 20px 20px 20px; border-top: 1px solid #EEEEEE;\"><a name=\"top\" ></a><span style='color:#024d84; font:bold 16px Arial;'>Hallo dude,</span><p>
436
                        Add some content here
437
                    </p><p>
438
                        This is just the default content-block.
439
                    </p><p>
440
                        Freundliche Grüsse und bis bald,
441
                        <br/><span style=\"color:#024d84;\">dein azine Team</span></p></td><td width='10' style='border-left: 1px solid #EEEEEE; background-image: url(\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/right-shadow.png\");'>&nbsp;</td></tr><tr><td width='10' style='border-right: 1px solid #EEEEEE; background-image: url(\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/left-shadow.png\");'>&nbsp;</td><td width=\"620\" bgcolor=\"white\" style=\"text-align:center;\"><a href=\"http://azine\" target=\"_blank\" style=\"color: #9fb400; font-size: 32px; font-weight: bold; text-decoration: none; position:relative; top:1px;\"><img height=\"24\" width=\"116\" src=\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/logo.png\" alt=\"azine\" /></a></td><td width='10' style='border-left: 1px solid #EEEEEE; background-image: url(\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/right-shadow.png\");'>&nbsp;</td></tr><tr><td width='10' style='border-right: 1px solid #EEEEEE; background-image: url(\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/left-shadow.png\");'>&nbsp;</td><td width=\"620\" align=\"center\" valign=\"top\" bgcolor=\"#434343\" style=\"font: normal 12px/18px Arial, Helvetica, sans-serif; padding:10px 30px 30px 30px; border-top:3px solid #b1c800; text-align:center;\" ><p style=\"color:white;\"><a href='https://some.host.com/app_dev.php/de/' style='text-decoration:none;'><span style='color: #9fb400; font-size:110%;'>azine</span></a> ist ein Service angeboten von Azine IT Services AG.
442
                    </p><p style=\"color:white;\">
443
                        Füge \"<a style=\"color:#FFFFFF;\" href=\"mailto:azine &lt;[email protected]&gt;\"><span style=\"color:#FFFFFF;\">[email protected]</span></a>\" zu deinem Adressbuch hinzu, um den Empfang von <a href=\"http://azine\" style=\"color:white; text-decoration:none;\">azine</a> Mails sicherzustellen.
444
                    </p><p style=\"color:#9fb400;\">
445
                        &copy; 2013 by Azine IT Services AG
446
                    </p><p style=\"color:#acacac;\"><a style=\"color:#acacac; text-decoration:none;\" href=\"https://some.host.com/app_dev.php/de/help\">Hilfe / FAQs</a> |
447
                    <a style=\"color:#acacac; text-decoration:none;\" href=\"https://some.host.com/app_dev.php/de/terms\">AGB</a> |
448
                    <a style=\"color:#acacac; text-decoration:none;\" href=\"https://some.host.com/app_dev.php/de/about\">Über azine</a> |
449
                    <a style=\"color:#acacac; text-decoration:none;\" href=\"https://some.host.com/app_dev.php/de/contact\">Kontakt</a></p></td><td width='10' style='border-left: 1px solid #EEEEEE; background-image: url(\"/app_dev.php/de/email/image/08f69bba117e6f02d40f07a5d84071e3/right-shadow.png\");'>&nbsp;</td></tr></table>
450
<div id=\"sfwdt016a7f\" class=\"sf-toolbar\" style=\"display: none\"></div><script>/*<![CDATA[*/    Sfjs = (function () {        \"use strict\";        var noop = function () {},            profilerStorageKey = 'sf2/profiler/',            request = function (url, onSuccess, onError, payload, options) {                var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');                options = options || {};                xhr.open(options.method || 'GET', url, true);                xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');                xhr.onreadystatechange = function (state) {                    if (4 === xhr.readyState && 200 === xhr.status) {                        (onSuccess || noop)(xhr);                    } elseif (4 === xhr.readyState && xhr.status != 200) {                        (onError || noop)(xhr);                    }                };                xhr.send(payload || '');            },            hasClass = function (el, klass) {                return el.className.match(new RegExp('\\b' + klass + '\\b'));            },            removeClass = function (el, klass) {                el.className = el.className.replace(new RegExp('\\b' + klass + '\\b'), ' ');            },            addClass = function (el, klass) {                if (!hasClass(el, klass)) { el.className += \" \" + klass; }            },            getPreference = function (name) {                if (!window.localStorage) {                    return null;                }                return localStorage.getItem(profilerStorageKey + name);            },            setPreference = function (name, value) {                if (!window.localStorage) {                    return null;                }                localStorage.setItem(profilerStorageKey + name, value);            };        return {            hasClass: hasClass,            removeClass: removeClass,            addClass: addClass,            getPreference: getPreference,            setPreference: setPreference,            request: request,            load: function (selector, url, onSuccess, onError, options) {                var el = document.getElementById(selector);                if (el && el.getAttribute('data-sfurl') !== url) {                    request(                        url,                        function (xhr) {                            el.innerHTML = xhr.responseText;                            el.setAttribute('data-sfurl', url);                            removeClass(el, 'loading');                            (onSuccess || noop)(xhr, el);                        },                        function (xhr) { (onError || noop)(xhr, el); },                        options                    );                }                return this;            },            toggle: function (selector, elOn, elOff) {                var i,                    style,                    tmp = elOn.style.display,                    el = document.getElementById(selector);                elOn.style.display = elOff.style.display;                elOff.style.display = tmp;                if (el) {                    el.style.display = 'none' === tmp ? 'none' : 'block';                }                return this;            }        }    })();/*]]>*/</script><script>/*<![CDATA[*/    (function () {                Sfjs.load(            'sfwdt016a7f',            '/app_dev.php/_wdt/016a7f',            function (xhr, el) {                el.style.display = -1 !== xhr.responseText.indexOf('sf-toolbarreset') ? 'block' : 'none';                if (el.style.display == 'none') {                    return;                }                if (Sfjs.getPreference('toolbar/displayState') == 'none') {                    document.getElementById('sfToolbarMainContent-016a7f').style.display = 'none';                    document.getElementById('sfToolbarClearer-016a7f').style.display = 'none';                    document.getElementById('sfMiniToolbar-016a7f').style.display = 'block';                } else {                    document.getElementById('sfToolbarMainContent-016a7f').style.display = 'block';                    document.getElementById('sfToolbarClearer-016a7f').style.display = 'block';                    document.getElementById('sfMiniToolbar-016a7f').style.display = 'none';                }            },            function (xhr) {                if (xhr.status !== 0) {                    confirm('An error occurred while loading the web debug toolbar (' + xhr.status + ': ' + xhr.statusText + ').\n\nDo you want to open the profiler?') && (window.location = '/app_dev.php/_profiler/016a7f');                }            }        );    })();/*]]>*/</script>
451
</body></html>", 'text/html');
452
        $controller = new AzineEmailTemplateController();
453
        $report = $controller->getSpamIndexReportForSwiftMessage($swiftMessage);
454
        if (array_key_exists('curlError', $report)) {
455
            $this->markTestIncomplete("It seems postmarks spam-check-service is unresponsive.\n\n".print_r($report, true));
456
        }
457
        $this->assertArrayHasKey("success", $report, "success was expected in report.\n\n".print_r($report, true));
458
        $this->assertArrayNotHasKey("curlError", $report, "curlError was not expected in report.\n\n".print_r($report, true));
459
        $this->assertArrayHasKey("message", $report, "message was expected in report.\n\n".print_r($report, true));
460
    }
461
    public function testCheckSpamScoreOfSentEmailAction()
462
    {
463
        $requestMock = $this->getMockBuilder("Symfony\Component\HttpFoundation\Request")->disableOriginalConstructor()->setMethods(array('get'))->getMock();
464
        $containerMock = $this->getMockBuilder("Symfony\Component\DependencyInjection\ContainerInterface")->disableOriginalConstructor()->getMock();
465
        $containerMock->expects($this->once())->method("get")->will($this->returnValueMap(array(
466
                array('request', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, $requestMock))));
467
        $controller = new AzineEmailTemplateController();
468
        $controller->setContainer($containerMock);
469
        $jsonResponse = $controller->checkSpamScoreOfSentEmailAction( $requestMock );
470
        $json = $jsonResponse->getContent();
471
        if (strpos($json, "Getting the spam-info failed") !== false) {
472
            $this->markTestIncomplete("It seems postmarks spam-check-service is unresponsive.\n\n$json");
473
        }
474
        $this->assertNotContains("Getting the spam-info failed.", $jsonResponse->getContent(), "Spamcheck returned:\n".$jsonResponse->getContent());
475
        $this->assertContains("SpamScore", $jsonResponse->getContent());
476
    }
477
}
478