Unit tests for listing specific methods

- small fixes/optimization in Subscriber model
- added test for search and group in Subscriber
- added test for search in Newsletter
This commit is contained in:
Jonathan Labreuille
2015-09-03 13:47:39 +02:00
parent cf322ec3c2
commit d89f43dbe5
3 changed files with 59 additions and 4 deletions

View File

@ -16,6 +16,10 @@ class Subscriber extends Model {
} }
static function search($orm, $search = '') { static function search($orm, $search = '') {
if(strlen(trim($search) === 0)) {
return $orm;
}
return $orm->where_raw( return $orm->where_raw(
'(`email` LIKE ? OR `first_name` LIKE ? OR `last_name` LIKE ?)', '(`email` LIKE ? OR `first_name` LIKE ? OR `last_name` LIKE ?)',
array('%'.$search.'%', '%'.$search.'%', '%'.$search.'%') array('%'.$search.'%', '%'.$search.'%', '%'.$search.'%')
@ -48,8 +52,13 @@ class Subscriber extends Model {
} }
static function group($orm, $group = null) { static function group($orm, $group = null) {
if(in_array($group, array('subscribed', 'unconfirmed', 'unsubscribed'))) { if($group === null or !in_array(
return $orm->where('status', $group); $group,
array('subscribed', 'unconfirmed', 'unsubscribed')
)) {
return $orm;
} }
return $orm->where('status', $group);
} }
} }

View File

@ -19,6 +19,11 @@ class NewsletterCest {
expect($this->saved)->equals(true); expect($this->saved)->equals(true);
} }
function itHasASearchFilter() {
$newsletter = Newsletter::filter('search', 'first')->findOne();
expect($newsletter->subject)->equals($this->data['subject']);
}
function _after() { function _after() {
ORM::for_table(Newsletter::$_table) ORM::for_table(Newsletter::$_table)
->delete_many(); ->delete_many();

View File

@ -4,16 +4,29 @@ use MailPoet\Models\Subscriber;
class SubscriberCest { class SubscriberCest {
function _before() { function _before() {
$this->before_time = time();
$this->data = array( $this->data = array(
'first_name' => 'John', 'first_name' => 'John',
'last_name' => 'Mailer', 'last_name' => 'Mailer',
'email' => 'john@mailpoet.com' 'email' => 'jo@mailpoet.com'
); );
$this->subscriber = Subscriber::create(); $this->subscriber = Subscriber::create();
$this->subscriber->hydrate($this->data); $this->subscriber->hydrate($this->data);
$this->saved = $this->subscriber->save(); $this->saved = $this->subscriber->save();
$subscribed = Subscriber::create();
$subscribed->hydrate(array(
'email' => 'marco@mailpoet.com',
'status' => 'subscribed'
));
$subscribed->save();
$unsubscribed = Subscriber::create();
$unsubscribed->hydrate(array(
'email' => 'marco@mailpoet.com',
'status' => 'unsubscribed'
));
$unsubscribed->save();
} }
function itCanBeCreated() { function itCanBeCreated() {
@ -64,6 +77,34 @@ class SubscriberCest {
expect($subscriber_updated->status)->equals('subscribed'); expect($subscriber_updated->status)->equals('subscribed');
} }
function itHasASearchFilter() {
$subscriber = Subscriber::filter('search', 'john')->findOne();
expect($subscriber->first_name)->equals($this->data['first_name']);
$subscriber = Subscriber::filter('search', 'mailer')->findOne();
expect($subscriber->last_name)->equals($this->data['last_name']);
$subscriber = Subscriber::filter('search', 'mailpoet')->findOne();
expect($subscriber->email)->equals($this->data['email']);
}
function itHasAGroupFilter() {
$subscribers = Subscriber::filter('group', 'unconfirmed')->findMany();
foreach($subscribers as $subscriber) {
expect($subscriber->status)->equals('unconfirmed');
}
$subscribers = Subscriber::filter('group', 'subscribed')->findMany();
foreach($subscribers as $subscriber) {
expect($subscriber->status)->equals('subscribed');
}
$subscribers = Subscriber::filter('group', 'unsubscribed')->findMany();
foreach($subscribers as $subscriber) {
expect($subscriber->status)->equals('unsubscribed');
}
}
function emailMustBeUnique() { function emailMustBeUnique() {
$conflict_subscriber = Subscriber::create(); $conflict_subscriber = Subscriber::create();
$conflict_subscriber->hydrate($this->data); $conflict_subscriber->hydrate($this->data);