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:
@@ -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();
|
||||||
|
@@ -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';
|
||||||
|
Reference in New Issue
Block a user