Validates that subscriber exists when processing automatic email

This commit is contained in:
Vlad
2018-05-20 19:52:56 -04:00
parent 8f758b11e1
commit 6d74ba8bb0
2 changed files with 40 additions and 4 deletions

View File

@@ -111,6 +111,15 @@ class Scheduler {
$queue->delete(); $queue->delete();
return false; return false;
} }
} else {
$subscribers = $queue->getSubscribers();
$subscriber = (!empty($subscribers) && is_array($subscribers)) ?
Subscriber::findOne($subscribers[0]) :
false;
if(!$subscriber) {
$queue->delete();
return false;
}
} }
$queue->status = null; $queue->status = null;

View File

@@ -573,24 +573,51 @@ class SchedulerTest extends \MailPoetTest {
function testItProcessesScheduledAutomaticEmailWhenSendingToUser() { function testItProcessesScheduledAutomaticEmailWhenSendingToUser() {
$newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED); $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED);
$subscriber = $this->_createSubscriber();
$task = SendingTask::create(); $task = SendingTask::create();
$task->newsletter_id = $newsletter->id; $task->newsletter_id = $newsletter->id;
$task->status = SendingQueue::STATUS_SCHEDULED; $task->status = SendingQueue::STATUS_SCHEDULED;
$task->scheduled_at = Carbon::now()->subDay(1)->toDateTimeString(); $task->scheduled_at = Carbon::now()->subDay(1)->toDateTimeString();
$task->setSubscribers(array($subscriber->id));
$task->save(); $task->save();
// scheduled task should exist // scheduled task should exist
$task = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne(); $task = SendingTask::getByNewsletterId($newsletter->id);
expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED); expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
expect($task->newsletter_id)->equals($newsletter->id); expect($task->newsletter_id)->equals($newsletter->id);
expect($task->getSubscribers())->equals(array($subscriber->id));
// task should have its status set to null (i.e., sending) // task should have its status set to null (i.e., sending)
$scheduler = new Scheduler(); $scheduler = new Scheduler();
$scheduler->process(); $scheduler->process();
$task = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne(); $task = SendingTask::getByNewsletterId($newsletter->id);
expect($task->status)->null(); expect($task->status)->null();
} }
function testItDeletesScheduledAutomaticEmailWhenUserDoesNotExist() {
$newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED);
$subscriber = $this->_createSubscriber();
$task = SendingTask::create();
$task->newsletter_id = $newsletter->id;
$task->status = SendingQueue::STATUS_SCHEDULED;
$task->scheduled_at = Carbon::now()->subDay(1)->toDateTimeString();
$task->setSubscribers(array($subscriber->id));
$task->save();
$subscriber->delete();
// scheduled task should exist
$task = SendingTask::getByNewsletterId($newsletter->id);
expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
expect($task->newsletter_id)->equals($newsletter->id);
expect($task->getSubscribers())->equals(array($subscriber->id));
// task should be deleted
$scheduler = new Scheduler();
$scheduler->process();
$task = SendingTask::getByNewsletterId($newsletter->id);
expect($task)->false();
}
function testItProcessesScheduledAutomaticEmailWhenSendingToSegment() { function testItProcessesScheduledAutomaticEmailWhenSendingToSegment() {
$newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED); $newsletter = $this->_createNewsletter(Newsletter::TYPE_AUTOMATIC, Newsletter::STATUS_SCHEDULED);
$segment = $this->_createSegment(); $segment = $this->_createSegment();
@@ -608,14 +635,14 @@ class SchedulerTest extends \MailPoetTest {
$task->save(); $task->save();
// scheduled task should exist // scheduled task should exist
$task = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne(); $task = SendingTask::getByNewsletterId($newsletter->id);
expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED); expect($task->status)->equals(SendingQueue::STATUS_SCHEDULED);
expect($task->newsletter_id)->equals($newsletter->id); expect($task->newsletter_id)->equals($newsletter->id);
// task should have its status set to null (i.e., sending) // task should have its status set to null (i.e., sending)
$scheduler = new Scheduler(); $scheduler = new Scheduler();
$scheduler->process(); $scheduler->process();
$task = SendingQueue::findTaskByNewsletterId($newsletter->id)->findOne(); $task = SendingTask::getByNewsletterId($newsletter->id);
expect($task->status)->null(); expect($task->status)->null();
// task should have 1 subscriber added from segment // task should have 1 subscriber added from segment
$subscribers = $task->subscribers()->findMany(); $subscribers = $task->subscribers()->findMany();