Fixes queue not being processed for scheduled newsletters

Sets newsletter status to "sending" when queue was processed
Uses defined constants where appropriate
This commit is contained in:
Vlad
2017-06-15 18:57:27 -04:00
parent 6653327f7f
commit 2d3aae9dd0
2 changed files with 46 additions and 7 deletions

View File

@@ -31,13 +31,13 @@ class Scheduler {
->findOne($queue->newsletter_id); ->findOne($queue->newsletter_id);
if(!$newsletter || $newsletter->deleted_at !== null) { if(!$newsletter || $newsletter->deleted_at !== null) {
$queue->delete(); $queue->delete();
} elseif($newsletter->status !== 'active') { } elseif($newsletter->status !== Newsletter::STATUS_ACTIVE && $newsletter->status !== Newsletter::STATUS_SCHEDULED) {
continue; continue;
} elseif($newsletter->type === 'welcome') { } elseif($newsletter->type === Newsletter::TYPE_WELCOME) {
$this->processWelcomeNewsletter($newsletter, $queue); $this->processWelcomeNewsletter($newsletter, $queue);
} elseif($newsletter->type === 'notification') { } elseif($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
$this->processPostNotificationNewsletter($newsletter, $queue); $this->processPostNotificationNewsletter($newsletter, $queue);
} elseif($newsletter->type === 'standard') { } elseif($newsletter->type === Newsletter::TYPE_STANDARD) {
$this->processScheduledStandardNewsletter($newsletter, $queue); $this->processScheduledStandardNewsletter($newsletter, $queue);
} }
CronHelper::enforceExecutionLimit($this->timer); CronHelper::enforceExecutionLimit($this->timer);
@@ -99,6 +99,8 @@ class Scheduler {
$queue->count_total = $queue->count_to_process = count($subscribers); $queue->count_total = $queue->count_to_process = count($subscribers);
$queue->status = null; $queue->status = null;
$queue->save(); $queue->save();
// update notification status
$notification_history->setStatus(Newsletter::STATUS_SENDING);
return true; return true;
} }
@@ -118,6 +120,8 @@ class Scheduler {
$queue->count_total = $queue->count_to_process = count($subscribers); $queue->count_total = $queue->count_to_process = count($subscribers);
$queue->status = null; $queue->status = null;
$queue->save(); $queue->save();
// update newsletter status
$newsletter->setStatus(Newsletter::STATUS_SENDING);
return true; return true;
} }
@@ -134,7 +138,7 @@ class Scheduler {
return false; return false;
} }
// check if subscriber is confirmed (subscribed) // check if subscriber is confirmed (subscribed)
if($subscriber->status !== 'subscribed') { if($subscriber->status !== Subscriber::STATUS_SUBSCRIBED) {
// reschedule delivery in 5 minutes // reschedule delivery in 5 minutes
$scheduled_at = Carbon::createFromTimestamp(current_time('timestamp')); $scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->scheduled_at = $scheduled_at->addMinutes( $queue->scheduled_at = $scheduled_at->addMinutes(
@@ -187,7 +191,7 @@ class Scheduler {
} }
static function getScheduledQueues() { static function getScheduledQueues() {
return SendingQueue::where('status', 'scheduled') return SendingQueue::where('status', SendingQueue::STATUS_SCHEDULED)
->whereLte('scheduled_at', Carbon::createFromTimestamp(current_time('timestamp'))) ->whereLte('scheduled_at', Carbon::createFromTimestamp(current_time('timestamp')))
->whereNull('type') ->whereNull('type')
->findMany(); ->findMany();

View File

@@ -367,6 +367,9 @@ class SchedulerTest extends MailPoetTest {
expect($updated_queue_subscribers['to_process'])->equals(array($subscriber->id)); expect($updated_queue_subscribers['to_process'])->equals(array($subscriber->id));
// set queue's status to null // set queue's status to null
expect($updated_queue->status)->null(); expect($updated_queue->status)->null();
// set newsletter's status to sending
$updated_newsletter = Newsletter::findOne($newsletter->id);
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENDING);
} }
function testItFailsToProcessPostNotificationNewsletterWhenSegmentsDontExist() { function testItFailsToProcessPostNotificationNewsletterWhenSegmentsDontExist() {
@@ -422,6 +425,10 @@ class SchedulerTest extends MailPoetTest {
$updated_queue_subscribers = $updated_queue->getSubscribers(); $updated_queue_subscribers = $updated_queue->getSubscribers();
expect($updated_queue_subscribers['to_process'])->equals(array($subscriber->id)); expect($updated_queue_subscribers['to_process'])->equals(array($subscriber->id));
expect($updated_queue->newsletter_id)->equals($notification_history->id); expect($updated_queue->newsletter_id)->equals($notification_history->id);
// set notification history's status to sending
$updated_notification_history = Newsletter::where('parent_id', $newsletter->id)
->findOne();
expect($updated_notification_history->status)->equals(Newsletter::STATUS_SENDING);
} }
function testItFailsToProcessWhenScheduledQueuesNotFound() { function testItFailsToProcessWhenScheduledQueuesNotFound() {
@@ -513,6 +520,35 @@ class SchedulerTest extends MailPoetTest {
'processScheduledStandardNewsletter' => Stub::never() 'processScheduledStandardNewsletter' => Stub::never()
), $this); ), $this);
// scheduled job is not processed // scheduled job is not processed
$scheduler->timer = microtime(true);
$scheduler->process();
}
function testItProcessesScheduledJobsWhenNewsletterIsActive() {
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_ACTIVE);
$queue = $this->_createQueue($newsletter->id);
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
'processScheduledStandardNewsletter' => Stub::once()
), $this);
// scheduled job is processed
$scheduler->timer = microtime(true);
$scheduler->process();
}
function testItProcessesScheduledJobsWhenNewsletterIsScheduled() {
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_SCHEDULED);
$queue = $this->_createQueue($newsletter->id);
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->save();
$scheduler = Stub::make(new Scheduler(), array(
'processScheduledStandardNewsletter' => Stub::once()
), $this);
// scheduled job is processed
$scheduler->timer = microtime(true);
$scheduler->process(); $scheduler->process();
} }
@@ -535,7 +571,6 @@ class SchedulerTest extends MailPoetTest {
return $subscriber_segment; return $subscriber_segment;
} }
function _createSegment() { function _createSegment() {
$segment = Segment::create(); $segment = Segment::create();
$segment->name = 'test'; $segment->name = 'test';