Skip to content

Commit d5b3344

Browse files
authored
Merge pull request FriendsOfSymfony#2177 from tomhv/issue/2176
[issue/2176] Casting email address as string
2 parents 42691e1 + e66efa6 commit d5b3344

File tree

4 files changed

+312
-4
lines changed

4 files changed

+312
-4
lines changed

Mailer/Mailer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public function sendConfirmationEmailMessage(UserInterface $user)
6767
'user' => $user,
6868
'confirmationUrl' => $url,
6969
));
70-
$this->sendEmailMessage($rendered, $this->parameters['from_email']['confirmation'], $user->getEmail());
70+
$this->sendEmailMessage($rendered, $this->parameters['from_email']['confirmation'], (string) $user->getEmail());
7171
}
7272

7373
/**
@@ -81,7 +81,7 @@ public function sendResettingEmailMessage(UserInterface $user)
8181
'user' => $user,
8282
'confirmationUrl' => $url,
8383
));
84-
$this->sendEmailMessage($rendered, $this->parameters['from_email']['resetting'], $user->getEmail());
84+
$this->sendEmailMessage($rendered, $this->parameters['from_email']['resetting'], (string) $user->getEmail());
8585
}
8686

8787
/**

Mailer/TwigSwiftMailer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public function sendConfirmationEmailMessage(UserInterface $user)
6868
'confirmationUrl' => $url,
6969
);
7070

71-
$this->sendMessage($template, $context, $this->parameters['from_email']['confirmation'], $user->getEmail());
71+
$this->sendMessage($template, $context, $this->parameters['from_email']['confirmation'], (string) $user->getEmail());
7272
}
7373

7474
/**
@@ -84,7 +84,7 @@ public function sendResettingEmailMessage(UserInterface $user)
8484
'confirmationUrl' => $url,
8585
);
8686

87-
$this->sendMessage($template, $context, $this->parameters['from_email']['resetting'], $user->getEmail());
87+
$this->sendMessage($template, $context, $this->parameters['from_email']['resetting'], (string) $user->getEmail());
8888
}
8989

9090
/**

Tests/Mailer/MailerTest.php

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the FOSUserBundle package.
5+
*
6+
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace FOS\UserBundle\Tests\Mailer;
13+
14+
use FOS\UserBundle\Command\ActivateUserCommand;
15+
use FOS\UserBundle\Mailer\Mailer;
16+
use FOS\UserBundle\Model\UserInterface;
17+
use Swift_Events_EventDispatcher;
18+
use Swift_Mailer;
19+
use Swift_Transport_NullTransport;
20+
use Symfony\Component\Console\Application;
21+
use Symfony\Component\Console\Helper\HelperSet;
22+
use Symfony\Component\Console\Tester\CommandTester;
23+
use Symfony\Component\DependencyInjection\ContainerInterface;
24+
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
25+
26+
class MailerTest extends \PHPUnit_Framework_TestCase
27+
{
28+
/**
29+
* @dataProvider goodEmailProvider
30+
*/
31+
public function testSendConfirmationEmailMessageWithGoodEmails($emailAddress)
32+
{
33+
$mailer = $this->getMailer();
34+
$mailer->sendConfirmationEmailMessage($this->getUser($emailAddress));
35+
36+
$this->assertTrue(true);
37+
}
38+
39+
/**
40+
* @dataProvider badEmailProvider
41+
* @expectedException Swift_RfcComplianceException
42+
*/
43+
public function testSendConfirmationEmailMessageWithBadEmails($emailAddress)
44+
{
45+
$mailer = $this->getMailer();
46+
$mailer->sendConfirmationEmailMessage($this->getUser($emailAddress));
47+
}
48+
49+
/**
50+
* @dataProvider goodEmailProvider
51+
*/
52+
public function testSendResettingEmailMessageWithGoodEmails($emailAddress)
53+
{
54+
$mailer = $this->getMailer();
55+
$mailer->sendResettingEmailMessage($this->getUser($emailAddress));
56+
57+
$this->assertTrue(true);
58+
}
59+
60+
/**
61+
* @dataProvider badEmailProvider
62+
* @expectedException Swift_RfcComplianceException
63+
*/
64+
public function testSendResettingEmailMessageWithBadEmails($emailAddress)
65+
{
66+
$mailer = $this->getMailer();
67+
$mailer->sendResettingEmailMessage($this->getUser($emailAddress));
68+
}
69+
70+
private function getMailer()
71+
{
72+
return new Mailer(
73+
new Swift_Mailer(
74+
new Swift_Transport_NullTransport(
75+
$this->getMock('Swift_Events_EventDispatcher')
76+
)
77+
),
78+
$this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'),
79+
$this->getTemplating(),
80+
array(
81+
'confirmation.template' => 'foo',
82+
'resetting.template' => 'foo',
83+
'from_email' => array(
84+
'confirmation' => '[email protected]',
85+
'resetting' => '[email protected]',
86+
),
87+
)
88+
);
89+
}
90+
91+
private function getTemplating()
92+
{
93+
$templating = $this->getMockBuilder('Symfony\Bundle\FrameworkBundle\Templating\EngineInterface')
94+
->disableOriginalConstructor()
95+
->getMock()
96+
;
97+
98+
return $templating;
99+
}
100+
101+
private function getUser($emailAddress)
102+
{
103+
$user = $this->getMock('FOS\UserBundle\Model\UserInterface');
104+
$user->method('getEmail')
105+
->willReturn($emailAddress)
106+
;
107+
108+
return $user;
109+
}
110+
111+
private function getEmailAddressValueObject($emailAddressAsString)
112+
{
113+
$emailAddress = $this->getMock('EmailAddress', array(
114+
'__toString',
115+
));
116+
117+
$emailAddress->method('__toString')
118+
->willReturn($emailAddressAsString)
119+
;
120+
121+
return $emailAddress;
122+
}
123+
124+
public function goodEmailProvider()
125+
{
126+
return array(
127+
128+
129+
array($this->getEmailAddressValueObject('[email protected]')),
130+
array($this->getEmailAddressValueObject('[email protected]')),
131+
);
132+
}
133+
134+
public function badEmailProvider()
135+
{
136+
return array(
137+
array('foo'),
138+
array($this->getEmailAddressValueObject('foo')),
139+
);
140+
}
141+
}

Tests/Mailer/TwigSwiftMailerTest.php

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the FOSUserBundle package.
5+
*
6+
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace FOS\UserBundle\Tests\Mailer;
13+
14+
use FOS\UserBundle\Command\ActivateUserCommand;
15+
use FOS\UserBundle\Mailer\TwigSwiftMailer;
16+
use FOS\UserBundle\Model\UserInterface;
17+
use Swift_Events_EventDispatcher;
18+
use Swift_Mailer;
19+
use Swift_Transport_NullTransport;
20+
use Symfony\Component\Console\Application;
21+
use Symfony\Component\Console\Helper\HelperSet;
22+
use Symfony\Component\Console\Tester\CommandTester;
23+
use Symfony\Component\DependencyInjection\ContainerInterface;
24+
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
25+
use Twig_Environment;
26+
use Twig_Template;
27+
28+
class TwigSwiftMailerTest extends \PHPUnit_Framework_TestCase
29+
{
30+
/**
31+
* @dataProvider goodEmailProvider
32+
*/
33+
public function testSendConfirmationEmailMessageWithGoodEmails($emailAddress)
34+
{
35+
$mailer = $this->getTwigSwiftMailer();
36+
$mailer->sendConfirmationEmailMessage($this->getUser($emailAddress));
37+
38+
$this->assertTrue(true);
39+
}
40+
41+
/**
42+
* @dataProvider badEmailProvider
43+
* @expectedException Swift_RfcComplianceException
44+
*/
45+
public function testSendConfirmationEmailMessageWithBadEmails($emailAddress)
46+
{
47+
$mailer = $this->getTwigSwiftMailer();
48+
$mailer->sendConfirmationEmailMessage($this->getUser($emailAddress));
49+
}
50+
51+
/**
52+
* @dataProvider goodEmailProvider
53+
*/
54+
public function testSendResettingEmailMessageWithGoodEmails($emailAddress)
55+
{
56+
$mailer = $this->getTwigSwiftMailer();
57+
$mailer->sendResettingEmailMessage($this->getUser($emailAddress));
58+
59+
$this->assertTrue(true);
60+
}
61+
62+
/**
63+
* @dataProvider badEmailProvider
64+
* @expectedException Swift_RfcComplianceException
65+
*/
66+
public function testSendResettingEmailMessageWithBadEmails($emailAddress)
67+
{
68+
$mailer = $this->getTwigSwiftMailer();
69+
$mailer->sendResettingEmailMessage($this->getUser($emailAddress));
70+
}
71+
72+
private function getTwigSwiftMailer()
73+
{
74+
return new TwigSwiftMailer(
75+
new Swift_Mailer(
76+
new Swift_Transport_NullTransport(
77+
$this->getMock('Swift_Events_EventDispatcher')
78+
)
79+
),
80+
$this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'),
81+
$this->getTwigEnvironment(),
82+
array(
83+
'template' => array(
84+
'confirmation' => 'foo',
85+
'resetting' => 'foo',
86+
),
87+
'from_email' => array(
88+
'confirmation' => '[email protected]',
89+
'resetting' => '[email protected]',
90+
),
91+
)
92+
);
93+
}
94+
95+
private function getTwigEnvironment()
96+
{
97+
$twigEnvironment = $this->getMockBuilder('Twig_Environment')
98+
->disableOriginalConstructor()
99+
->getMock()
100+
;
101+
102+
$twigEnvironment->method('mergeGlobals')
103+
->willReturn(array())
104+
;
105+
106+
$twigEnvironment->method('loadTemplate')
107+
->willReturn($this->getTwigTemplate())
108+
;
109+
110+
return $twigEnvironment;
111+
}
112+
113+
private function getTwigTemplate()
114+
{
115+
// Using this method of building a mock due to a possible bug in phpunit
116+
// see http://tinyurl.com/gtybc3b
117+
$methods = get_class_methods('Twig_Template');
118+
$twigTemplate = $this->getMockBuilder('Twig_Template')
119+
->disableOriginalConstructor()
120+
->setMethods($methods)
121+
->getMockForAbstractClass()
122+
;
123+
124+
return $twigTemplate;
125+
}
126+
127+
private function getUser($emailAddress)
128+
{
129+
$user = $this->getMock('FOS\UserBundle\Model\UserInterface');
130+
$user->method('getEmail')
131+
->willReturn($emailAddress)
132+
;
133+
134+
return $user;
135+
}
136+
137+
private function getEmailAddressValueObject($emailAddressAsString)
138+
{
139+
$emailAddress = $this->getMock('EmailAddress', array(
140+
'__toString',
141+
));
142+
143+
$emailAddress->method('__toString')
144+
->willReturn($emailAddressAsString)
145+
;
146+
147+
return $emailAddress;
148+
}
149+
150+
public function goodEmailProvider()
151+
{
152+
return array(
153+
154+
155+
array($this->getEmailAddressValueObject('[email protected]')),
156+
array($this->getEmailAddressValueObject('[email protected]')),
157+
);
158+
}
159+
160+
public function badEmailProvider()
161+
{
162+
return array(
163+
array('foo'),
164+
array($this->getEmailAddressValueObject('foo')),
165+
);
166+
}
167+
}

0 commit comments

Comments
 (0)