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())
->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);
}
}

View File

@@ -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;
}
/**

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());
}
}