From d08d5a3b6c00d51dc53b90e7e0d81ba6f475dd8f Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 21 Oct 2016 11:19:09 -0400 Subject: [PATCH] - Updates unit tests --- tests/unit/API/Endpoints/NewslettersTest.php | 73 ++++++++++++++++--- .../SendingQueue/Tasks/NewsletterTest.php | 23 ++++-- 2 files changed, 81 insertions(+), 15 deletions(-) diff --git a/tests/unit/API/Endpoints/NewslettersTest.php b/tests/unit/API/Endpoints/NewslettersTest.php index dd2ddae7e8..78939a3b4b 100644 --- a/tests/unit/API/Endpoints/NewslettersTest.php +++ b/tests/unit/API/Endpoints/NewslettersTest.php @@ -2,10 +2,14 @@ use \MailPoet\API\Response as APIResponse; use \MailPoet\API\Error as APIError; use \MailPoet\API\Endpoints\Newsletters; +use MailPoet\Config\Populator; use \MailPoet\Models\Newsletter; +use MailPoet\Models\NewsletterOption; +use MailPoet\Models\NewsletterOptionField; use \MailPoet\Models\NewsletterSegment; use \MailPoet\Models\NewsletterTemplate; use \MailPoet\Models\Segment; +use MailPoet\Newsletter\Scheduler\Scheduler; class NewslettersTest extends MailPoetTest { function _before() { @@ -44,17 +48,26 @@ class NewslettersTest extends MailPoetTest { } function testItCanSaveANewNewsletter() { + $newsletter_option_field = NewsletterOptionField::create(); + $newsletter_option_field->name = 'some_option'; + $newsletter_option_field->newsletter_type = Newsletter::TYPE_STANDARD; + $newsletter_option_field->save(); + $valid_data = array( 'subject' => 'My First Newsletter', - 'type' => Newsletter::TYPE_STANDARD + 'type' => Newsletter::TYPE_STANDARD, + 'options' => array( + $newsletter_option_field->name => 'some_option_value', + ) ); $router = new Newsletters(); $response = $router->save($valid_data); + $saved_newsletter = Newsletter::filter('filterWithOptions')->findOne($response->data['id']); expect($response->status)->equals(APIResponse::STATUS_OK); - expect($response->data)->equals( - Newsletter::findOne($response->data['id'])->asArray() - ); + expect($response->data)->equals($saved_newsletter->asArray()); + // newsletter option should be saved + expect($saved_newsletter->some_option)->equals('some_option_value'); $invalid_data = array( 'subject' => 'Missing newsletter type' @@ -73,15 +86,56 @@ class NewslettersTest extends MailPoetTest { ); $response = $router->save($newsletter_data); - expect($response->status)->equals(APIResponse::STATUS_OK); - expect($response->data)->equals( - Newsletter::findOne($this->newsletter->id)->asArray() - ); - $updated_newsletter = Newsletter::findOne($this->newsletter->id); + expect($response->status)->equals(APIResponse::STATUS_OK); + expect($response->data)->equals($updated_newsletter->asArray()); expect($updated_newsletter->subject)->equals('My Updated Newsletter'); } + function testItCanUpdatePostNotificationScheduleUponSave() { + $newsletter_options = array( + 'intervalType', + 'timeOfDay', + 'weekDay', + 'monthDay', + 'nthWeekDay', + 'schedule' + ); + foreach($newsletter_options as $option) { + $newsletter_option_field = NewsletterOptionField::create(); + $newsletter_option_field->name = $option; + $newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION; + $newsletter_option_field->save(); + } + + $router = new Newsletters(); + $newsletter_data = array( + 'id' => $this->newsletter->id, + 'type' => Newsletter::TYPE_NOTIFICATION, + 'subject' => 'Newsletter', + 'options' => array( + 'intervalType' => Scheduler::INTERVAL_WEEKLY, + 'timeOfDay' => '50400', + 'weekDay' => '1', + 'monthDay' => '0', + 'nthWeekDay' => '1', + 'schedule' => '0 14 * * 1' + ) + ); + $response = $router->save($newsletter_data); + $saved_newsletter = Newsletter::filter('filterWithOptions') + ->findOne($response->data['id']); + expect($response->status)->equals(APIResponse::STATUS_OK); + expect($response->data)->equals($saved_newsletter->asArray()); + + // schedule should be recalculated when options change + $newsletter_data['options']['intervalType'] = Scheduler::INTERVAL_IMMEDIATELY; + $response = $router->save($newsletter_data); + $saved_newsletter = Newsletter::filter('filterWithOptions')->findOne($response->data['id']); + expect($response->status)->equals(APIResponse::STATUS_OK); + expect($saved_newsletter->schedule)->equals('* * * * *'); + } + function testItCanModifySegmentsOfExistingNewsletter() { $segment_1 = Segment::createOrUpdate(array('name' => 'Segment 1')); $fake_segment_id = 1; @@ -398,6 +452,7 @@ class NewslettersTest extends MailPoetTest { function _after() { Newsletter::deleteMany(); NewsletterSegment::deleteMany(); + NewsletterOptionField::deleteMany(); Segment::deleteMany(); } } diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php index 108b0bf5fb..3d7641062d 100644 --- a/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php @@ -76,6 +76,7 @@ class NewsletterTaskTest extends MailPoetTest { function testReturnsFalseWhenNewsletterIsANotificationWithoutPosts() { $newsletter = $this->newsletter; + $newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; // replace post id data tag with something else $newsletter->body = str_replace('data-post-id', 'id', $newsletter->body); @@ -92,17 +93,27 @@ class NewsletterTaskTest extends MailPoetTest { expect($newsletter_post->post_id)->equals('10'); } - function testItUpdatesStatusToSentOnlyForStandardNewsletters() { - // newsletter type is 'standard' + function testItUpdatesStatusToSentOnlyForStandardAndPostNotificationNewsletters() { $newsletter = $this->newsletter; - expect($newsletter->type)->equals(Newsletter::TYPE_STANDARD); - expect($newsletter->status)->notEquals(Newsletter::STATUS_SENT); + + // newsletter type is 'standard' + $newsletter->type = Newsletter::TYPE_STANDARD; + $newsletter->status = 'not_sent'; + $newsletter->save(); $this->newsletter_task->markNewsletterAsSent($newsletter); $updated_newsletter = Newsletter::findOne($newsletter->id); expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT); - // newsletter type is NOT 'standard' - $newsletter->type = Newsletter::TYPE_NOTIFICATION; + // newsletter type is 'notification history' + $newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; + $newsletter->status = 'not_sent'; + $newsletter->save(); + $this->newsletter_task->markNewsletterAsSent($newsletter); + $updated_newsletter = Newsletter::findOne($newsletter->id); + expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT); + + // all other newsletter types + $newsletter->type = Newsletter::TYPE_WELCOME; $newsletter->status = 'not_sent'; $newsletter->save(); $this->newsletter_task->markNewsletterAsSent($newsletter);