Pauses sending if processed subscribers list can't be updated

This commit is contained in:
Vlad
2018-01-08 22:51:11 -05:00
committed by pavel-mailpoet
parent 6c25fab6d6
commit 19c7efc9ef
3 changed files with 49 additions and 4 deletions

View File

@ -165,7 +165,14 @@ class SendingQueue {
); );
} }
// update processed/to process list // update processed/to process list
$queue->updateProcessedSubscribers($prepared_subscribers_ids); if(!$queue->updateProcessedSubscribers($prepared_subscribers_ids)) {
MailerLog::processError(
'processed_list_update',
sprintf('QUEUE-%d-PROCESSED-LIST-UPDATE', $queue->id),
null,
true
);
}
// log statistics // log statistics
StatisticsNewslettersModel::createMultiple($statistics); StatisticsNewslettersModel::createMultiple($statistics);
// update the sent count // update the sent count

View File

@ -151,7 +151,7 @@ class SendingQueue extends Model {
) )
); );
$this->subscribers = $subscribers; $this->subscribers = $subscribers;
$this->updateCount(); return $this->updateCount()->getErrors() === false;
} }
function updateCount() { function updateCount() {
@ -175,5 +175,4 @@ class SendingQueue extends Model {
} }
return $rendered_body; return $rendered_body;
} }
} }

View File

@ -1,6 +1,7 @@
<?php <?php
namespace MailPoet\Test\Cron\Workers\SendingQueue; namespace MailPoet\Test\Cron\Workers\SendingQueue;
use AspectMock\Test as Mock;
use Carbon\Carbon; use Carbon\Carbon;
use Codeception\Util\Fixtures; use Codeception\Util\Fixtures;
use Codeception\Util\Stub; use Codeception\Util\Stub;
@ -8,6 +9,7 @@ use MailPoet\Config\Populator;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker; use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink; use MailPoet\Models\NewsletterLink;
use MailPoet\Models\NewsletterPost; use MailPoet\Models\NewsletterPost;
@ -574,6 +576,43 @@ class SendingQueueTest extends \MailPoetTest {
expect((int)$updated_queue->count_total)->equals(0); expect((int)$updated_queue->count_total)->equals(0);
} }
function testItPausesSendingWhenProcessedSubscriberListCannotBeUpdated() {
$queue = Mock::double(new \stdClass(), array(
'updateProcessedSubscribers' => false
));
$queue->id = 100;
$sending_queue_worker = Stub::make(new SendingQueueWorker());
$sending_queue_worker->__construct(
$timer = false,
Stub::make(
new MailerTask(),
array(
'send' => true
)
)
);
try {
$sending_queue_worker->sendNewsletters(
$queue,
$prepared_subscribers = array(),
$prepared_newsletters = false,
$prepared_subscribers = false,
$statistics = false
);
$this->fail('Paused sending exception was not thrown.');
} catch(\Exception $e) {
expect($e->getMessage())->equals('Sending has been paused.');
}
$mailer_log = MailerLog::getMailerLog();
expect($mailer_log['status'])->equals(MailerLog::STATUS_PAUSED);
expect($mailer_log['error'])->equals(
array(
'operation' => 'processed_list_update',
'error_message' => 'QUEUE-100-PROCESSED-LIST-UPDATE'
)
);
}
function _after() { function _after() {
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); \ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table); \ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);