Reschedules past due scheduled queues when reactivating notification

This commit is contained in:
Vlad
2017-08-24 20:57:43 -04:00
committed by pavel-mailpoet
parent 544bf0ddfd
commit c1e542cb5a
4 changed files with 85 additions and 7 deletions

View File

@@ -8,6 +8,7 @@ use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\API\JSON\v1\Newsletters;
use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\Segment;
@@ -140,7 +141,6 @@ class NewslettersTest extends \MailPoetTest {
expect(WPHooksHelper::isActionDone($hook_name))->true();
expect(WPHooksHelper::getActionDone($hook_name)[0] instanceof Newsletter)->true();
$invalid_data = array(
'subject' => 'Missing newsletter type'
);
@@ -357,6 +357,51 @@ class NewslettersTest extends \MailPoetTest {
->equals('This newsletter does not exist.');
}
function testItReschedulesPastDuePostNotificationsWhenStatusIsSetBackToActive() {
$newsletter_option_field = NewsletterOptionField::create();
$newsletter_option_field->name = 'schedule';
$newsletter_option_field->newsletter_type = Newsletter::TYPE_NOTIFICATION;
$newsletter_option_field->save();
$schedule = sprintf('0 %d * * *', Carbon::createFromTimestamp(current_time('timestamp'))->hour); // every day at current hour
$random_future_date = Carbon::createFromTimestamp(current_time('timestamp'))->addDays(10)->format('Y-m-d H:i:s'); // 10 days from now
$newsletter_option = NewsletterOption::createOrUpdate(
array(
'newsletter_id' => $this->post_notification->id,
'option_field_id' => $newsletter_option_field->id,
'value' => $schedule
)
);
$sending_queue_1 = SendingQueue::create();
$sending_queue_1->newsletter_id = $this->post_notification->id;
$sending_queue_1->scheduled_at = Scheduler::getPreviousRunDate($schedule);
$sending_queue_1->status = SendingQueue::STATUS_SCHEDULED;
$sending_queue_1->save();
$sending_queue_2 = SendingQueue::create();
$sending_queue_2->newsletter_id = $this->post_notification->id;
$sending_queue_2->scheduled_at = $random_future_date;
$sending_queue_2->status = SendingQueue::STATUS_SCHEDULED;
$sending_queue_2->save();
$sending_queue_3 = SendingQueue::create();
$sending_queue_3->newsletter_id = $this->post_notification->id;
$sending_queue_3->scheduled_at = Scheduler::getPreviousRunDate($schedule);
$sending_queue_3->save();
$router = new Newsletters();
$response = $router->setStatus(
array(
'id' => $this->post_notification->id,
'status' => Newsletter::STATUS_ACTIVE
)
);
$sending_queues = SendingQueue::findMany();
// previously scheduled notification is rescheduled for future date
expect($sending_queues[0]->scheduled_at)->equals(Scheduler::getNextRunDate($schedule));
// future scheduled notifications are left intact
expect($sending_queues[1]->scheduled_at)->equals($random_future_date);
// previously unscheduled (e.g., sent/sending) notifications are left intact
expect($sending_queues[2]->scheduled_at)->equals(Scheduler::getPreviousRunDate($schedule));
}
function testItCanRestoreANewsletter() {
$this->newsletter->trash();