create newsletter test suite

This commit is contained in:
Manuel Raynaud
2014-02-24 13:09:50 +01:00
parent 4f93e4cd0c
commit 43886e6f8c
3 changed files with 145 additions and 0 deletions

View File

@@ -47,12 +47,16 @@ class Newsletter extends BaseAction implements EventSubscriberInterface
->setLastname($event->getLastname()) ->setLastname($event->getLastname())
->setLocale($event->getLocale()) ->setLocale($event->getLocale())
->save(); ->save();
$event->setNewsletter($newsletter);
} }
public function unsubscribe(NewsletterEvent $event) public function unsubscribe(NewsletterEvent $event)
{ {
if (null !== $nl = NewsletterQuery::create()->findPk($event->getId())) { if (null !== $nl = NewsletterQuery::create()->findPk($event->getId())) {
$nl->delete(); $nl->delete();
$event->setNewsletter($nl);
} }
} }
@@ -64,6 +68,8 @@ class Newsletter extends BaseAction implements EventSubscriberInterface
->setLastname($event->getLastname()) ->setLastname($event->getLastname())
->setLocale($event->getLocale()) ->setLocale($event->getLocale())
->save(); ->save();
$event->setNewsletter($nl);
} }
} }

View File

@@ -56,12 +56,36 @@ class NewsletterEvent extends ActionEvent
*/ */
protected $locale; protected $locale;
/**
* @var \Thelia\Model\Newsletter
*/
protected $newsletter;
public function __construct($email, $locale) public function __construct($email, $locale)
{ {
$this->email = $email; $this->email = $email;
$this->locale = $locale; $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 * @param string $email
* *
@@ -148,6 +172,8 @@ class NewsletterEvent extends ActionEvent
public function setId($id) public function setId($id)
{ {
$this->id = $id; $this->id = $id;
return $this;
} }
/** /**

View File

@@ -0,0 +1,113 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
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 <mraynaud@openstudio.fr>
*/
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());
}
}