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
$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
StatisticsNewslettersModel::createMultiple($statistics);
// update the sent count

View File

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

View File

@ -1,6 +1,7 @@
<?php
namespace MailPoet\Test\Cron\Workers\SendingQueue;
use AspectMock\Test as Mock;
use Carbon\Carbon;
use Codeception\Util\Fixtures;
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\Tasks\Mailer as MailerTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\NewsletterPost;
@ -574,6 +576,43 @@ class SendingQueueTest extends \MailPoetTest {
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() {
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
@ -585,4 +624,4 @@ class SendingQueueTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsNewsletters::$_table);
}
}
}