diff --git a/core/lib/Thelia/Action/Newsletter.php b/core/lib/Thelia/Action/Newsletter.php index 4130dd00b..b43972620 100644 --- a/core/lib/Thelia/Action/Newsletter.php +++ b/core/lib/Thelia/Action/Newsletter.php @@ -47,12 +47,16 @@ class Newsletter extends BaseAction implements EventSubscriberInterface ->setLastname($event->getLastname()) ->setLocale($event->getLocale()) ->save(); + + $event->setNewsletter($newsletter); } public function unsubscribe(NewsletterEvent $event) { if (null !== $nl = NewsletterQuery::create()->findPk($event->getId())) { $nl->delete(); + + $event->setNewsletter($nl); } } @@ -64,6 +68,8 @@ class Newsletter extends BaseAction implements EventSubscriberInterface ->setLastname($event->getLastname()) ->setLocale($event->getLocale()) ->save(); + + $event->setNewsletter($nl); } } diff --git a/core/lib/Thelia/Core/Event/Newsletter/NewsletterEvent.php b/core/lib/Thelia/Core/Event/Newsletter/NewsletterEvent.php index 1dbd74c4b..5a36bf25c 100644 --- a/core/lib/Thelia/Core/Event/Newsletter/NewsletterEvent.php +++ b/core/lib/Thelia/Core/Event/Newsletter/NewsletterEvent.php @@ -56,12 +56,36 @@ class NewsletterEvent extends ActionEvent */ protected $locale; + /** + * @var \Thelia\Model\Newsletter + */ + protected $newsletter; + public function __construct($email, $locale) { $this->email = $email; $this->locale = $locale; } + /** + * @param \Thelia\Model\Newsletter $newsletter + */ + public function setNewsletter($newsletter) + { + $this->newsletter = $newsletter; + + return $this; + } + + /** + * @return \Thelia\Model\Newsletter + */ + public function getNewsletter() + { + return $this->newsletter; + } + + /** * @param string $email * @@ -148,6 +172,8 @@ class NewsletterEvent extends ActionEvent public function setId($id) { $this->id = $id; + + return $this; } /** diff --git a/core/lib/Thelia/Tests/Action/NewsletterTest.php b/core/lib/Thelia/Tests/Action/NewsletterTest.php new file mode 100644 index 000000000..095a765ef --- /dev/null +++ b/core/lib/Thelia/Tests/Action/NewsletterTest.php @@ -0,0 +1,113 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Action; + +use Thelia\Action\Newsletter; +use Thelia\Model\Newsletter as NewsletterModel; +use Thelia\Core\Event\Newsletter\NewsletterEvent; +use Thelia\Model\NewsletterQuery; + + +/** + * Class NewsletterTest + * @package Thelia\Tests\Action + * @author Manuel Raynaud + */ +class NewsletterTest extends \PHPUnit_Framework_TestCase +{ + public static function setUpBeforeClass() + { + NewsletterQuery::create() + ->filterByEmail('test@foo.com') + ->delete(); + } + + public function testSubscribe() + { + $event = new NewsletterEvent('test@foo.com', 'en_US'); + $event + ->setFirstname("foo") + ->setLastname("bar") + ; + + $action = new Newsletter(); + $action->subscribe($event); + + $subscribedNewsletter = $event->getNewsletter(); + + $this->assertInstanceOf('Thelia\Model\Newsletter', $subscribedNewsletter); + $this->assertFalse($subscribedNewsletter->isNew()); + + $this->assertEquals('test@foo.com', $subscribedNewsletter->getEmail()); + $this->assertEquals('en_US', $subscribedNewsletter->getLocale()); + $this->assertEquals('foo', $subscribedNewsletter->getFirstname()); + $this->assertEquals('bar', $subscribedNewsletter->getLastname()); + + return $subscribedNewsletter; + } + + /** + * @depends testSubscribe + */ + public function testUpdate(NewsletterModel $newsletter) + { + $event = new NewsletterEvent('test@foo.com', 'en_US'); + $event + ->setId($newsletter->getId()) + ->setFirstname("foo update") + ->setLastname("bar update") + ; + + $action = new Newsletter(); + $action->update($event); + + $updatedNewsletter = $event->getNewsletter(); + + $this->assertInstanceOf('Thelia\Model\Newsletter', $updatedNewsletter); + + $this->assertEquals('test@foo.com', $updatedNewsletter->getEmail()); + $this->assertEquals('en_US', $updatedNewsletter->getLocale()); + $this->assertEquals('foo update', $updatedNewsletter->getFirstname()); + $this->assertEquals('bar update', $updatedNewsletter->getLastname()); + + return $updatedNewsletter; + } + + /** + * @depends testUpdate + */ + public function testUnsubscribe(NewsletterModel $newsletter) + { + $event = new NewsletterEvent('test@foo.com', 'en_US'); + $event->setId($newsletter->getId()); + + $action = new Newsletter(); + $action->unsubscribe($event); + + $deletedNewsletter = $event->getNewsletter(); + + $this->assertInstanceOf('Thelia\Model\Newsletter', $deletedNewsletter); + $this->assertTrue($deletedNewsletter->isDeleted()); + } +} \ No newline at end of file