Completed
Push — sendEmailChangeConfirmation ( 0a40ce...acd4f6 )
by Dominik
06:26 queued 04:09
created

testWebViewAction_MailNotFound()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

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