From d89f43dbe5ea49ff37ccb1f7a857812997e47b8d Mon Sep 17 00:00:00 2001 From: Jonathan Labreuille Date: Thu, 3 Sep 2015 13:47:39 +0200 Subject: [PATCH] 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 --- lib/Models/Subscriber.php | 13 ++++++-- tests/unit/Models/NewsletterCest.php | 5 ++++ tests/unit/Models/SubscriberCest.php | 45 ++++++++++++++++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index 8f12c8502c..5f2fda7035 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -16,6 +16,10 @@ class Subscriber extends Model { } static function search($orm, $search = '') { + if(strlen(trim($search) === 0)) { + return $orm; + } + return $orm->where_raw( '(`email` LIKE ? OR `first_name` LIKE ? OR `last_name` LIKE ?)', array('%'.$search.'%', '%'.$search.'%', '%'.$search.'%') @@ -48,8 +52,13 @@ class Subscriber extends Model { } static function group($orm, $group = null) { - if(in_array($group, array('subscribed', 'unconfirmed', 'unsubscribed'))) { - return $orm->where('status', $group); + if($group === null or !in_array( + $group, + array('subscribed', 'unconfirmed', 'unsubscribed') + )) { + return $orm; } + + return $orm->where('status', $group); } } diff --git a/tests/unit/Models/NewsletterCest.php b/tests/unit/Models/NewsletterCest.php index 8ec8af101b..66dd75c3e1 100644 --- a/tests/unit/Models/NewsletterCest.php +++ b/tests/unit/Models/NewsletterCest.php @@ -19,6 +19,11 @@ class NewsletterCest { expect($this->saved)->equals(true); } + function itHasASearchFilter() { + $newsletter = Newsletter::filter('search', 'first')->findOne(); + expect($newsletter->subject)->equals($this->data['subject']); + } + function _after() { ORM::for_table(Newsletter::$_table) ->delete_many(); diff --git a/tests/unit/Models/SubscriberCest.php b/tests/unit/Models/SubscriberCest.php index 20fac0ac90..4ebc948d6d 100644 --- a/tests/unit/Models/SubscriberCest.php +++ b/tests/unit/Models/SubscriberCest.php @@ -4,16 +4,29 @@ use MailPoet\Models\Subscriber; class SubscriberCest { function _before() { - $this->before_time = time(); $this->data = array( 'first_name' => 'John', 'last_name' => 'Mailer', - 'email' => 'john@mailpoet.com' + 'email' => 'jo@mailpoet.com' ); $this->subscriber = Subscriber::create(); $this->subscriber->hydrate($this->data); $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() { @@ -64,6 +77,34 @@ class SubscriberCest { 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() { $conflict_subscriber = Subscriber::create(); $conflict_subscriber->hydrate($this->data);