Sets mailer log error when queue cannot be saved during newsletter

pre-processing
This commit is contained in:
Vlad
2017-07-14 21:41:03 -04:00
parent fe9ae392f2
commit 34d09ce0c9
6 changed files with 29 additions and 7 deletions

View File

@ -157,7 +157,7 @@ class SendingQueue {
); );
// log error message and schedule retry/pause sending // log error message and schedule retry/pause sending
if($send_result['response'] === false) { if($send_result['response'] === false) {
MailerLog::processSendingError( MailerLog::processError(
$send_result['operation'], $send_result['operation'],
$send_result['error_message'] $send_result['error_message']
); );

View File

@ -4,6 +4,7 @@ namespace MailPoet\Cron\Workers\SendingQueue\Tasks;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Links as LinksTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Links as LinksTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Newsletter as NewsletterModel; use MailPoet\Models\Newsletter as NewsletterModel;
use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel; use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
@ -88,6 +89,12 @@ class Newsletter {
$queue->newsletter_rendered_subject = Shortcodes::process($newsletter->subject, $newsletter, null, $queue); $queue->newsletter_rendered_subject = Shortcodes::process($newsletter->subject, $newsletter, null, $queue);
$queue->newsletter_rendered_body = $rendered_newsletter; $queue->newsletter_rendered_body = $rendered_newsletter;
$queue->save(); $queue->save();
if($queue->getErrors()) {
return MailerLog::processError(
'queue_save',
__('There was an error processing your newsletter during sending. If possible, please contact us and report this issue.')
);
}
return $newsletter; return $newsletter;
} }

View File

@ -75,7 +75,7 @@ class MailerLog {
return self::resetMailerLog(); return self::resetMailerLog();
} }
static function processSendingError($operation, $error_message) { static function processError($operation, $error_message) {
$mailer_log = self::getMailerLog(); $mailer_log = self::getMailerLog();
(int)$mailer_log['retry_attempt']++; (int)$mailer_log['retry_attempt']++;
$mailer_log['retry_at'] = time() + self::RETRY_INTERVAL; $mailer_log['retry_at'] = time() + self::RETRY_INTERVAL;

View File

@ -9,7 +9,7 @@ class LinkTaskTest extends MailPoetTest {
function testItCanSaveLinks() { function testItCanSaveLinks() {
$links = array( $links = array(
array( array(
'url' => 'http://example.com', 'link' => 'http://example.com',
'hash' => 'some_hash' 'hash' => 'some_hash'
) )
); );
@ -20,7 +20,7 @@ class LinkTaskTest extends MailPoetTest {
->findOne(); ->findOne();
expect($newsletter_link->newsletter_id)->equals($newsletter->id); expect($newsletter_link->newsletter_id)->equals($newsletter->id);
expect($newsletter_link->queue_id)->equals($queue->id); expect($newsletter_link->queue_id)->equals($queue->id);
expect($newsletter_link->url)->equals($links[0]['url']); expect($newsletter_link->url)->equals($links[0]['link']);
} }
function testItCanHashAndReplaceLinks() { function testItCanHashAndReplaceLinks() {
@ -35,7 +35,7 @@ class LinkTaskTest extends MailPoetTest {
->contains($processed_and_hashed_links[0]['hash']); ->contains($processed_and_hashed_links[0]['hash']);
expect($processed_rendered_newsletter_body['text']) expect($processed_rendered_newsletter_body['text'])
->contains($processed_and_hashed_links[0]['hash']); ->contains($processed_and_hashed_links[0]['hash']);
expect($processed_and_hashed_links[0]['url'])->equals('http://example.com'); expect($processed_and_hashed_links[0]['link'])->equals('http://example.com');
} }
function testItCanProcessRenderedBody() { function testItCanProcessRenderedBody() {

View File

@ -1,7 +1,9 @@
<?php <?php
use Codeception\Util\Fixtures; use Codeception\Util\Fixtures;
use Helper\WordPressHooks as WPHooksHelper; use Helper\WordPressHooks as WPHooksHelper;
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;
@ -186,7 +188,7 @@ class NewsletterTaskTest extends MailPoetTest {
function testItUpdatesStatusAndSetsSentAtDateOnlyForStandardAndPostNotificationNewsletters() { function testItUpdatesStatusAndSetsSentAtDateOnlyForStandardAndPostNotificationNewsletters() {
$newsletter = $this->newsletter; $newsletter = $this->newsletter;
$queue = new stdClass(); $queue = new stdClass();
$queue->processed_at = date('Y-m-d H:i:s'); $queue->processed_at = date('Y-m-d H:i:s');
// newsletter type is 'standard' // newsletter type is 'standard'
$newsletter->type = Newsletter::TYPE_STANDARD; $newsletter->type = Newsletter::TYPE_STANDARD;
@ -256,6 +258,19 @@ class NewsletterTaskTest extends MailPoetTest {
); );
} }
function testItLogsErrorWhenQueueWithCannotBeSaved() {
$queue = $this->queue;
$queue->non_existent_column = true; // this will trigger save error
try {
$this->newsletter_task->preProcessNewsletter($this->newsletter, $queue);
self::fail('Sending error exception was not thrown.');
} catch(Exception $e) {
$mailer_log = MailerLog::getMailerLog();
expect($mailer_log['error']['operation'])->equals('queue_save');
expect($mailer_log['error']['error_message'])->equals('There was an error processing your newsletter during sending. If possible, please contact us and report this issue.');
}
}
function _after() { function _after() {
WPHooksHelper::releaseAllHooks(); WPHooksHelper::releaseAllHooks();
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);

View File

@ -148,7 +148,7 @@ class MailerLogTest extends MailPoetTest {
expect($mailer_log['retry_at'])->null(); expect($mailer_log['retry_at'])->null();
expect($mailer_log['error'])->null(); expect($mailer_log['error'])->null();
// retry attempt should be incremented, error logged, retry attempt scheduled // retry attempt should be incremented, error logged, retry attempt scheduled
MailerLog::processSendingError($operation = 'send', $error = 'email rejected'); MailerLog::processError($operation = 'send', $error = 'email rejected');
$mailer_log = MailerLog::getMailerLog(); $mailer_log = MailerLog::getMailerLog();
expect($mailer_log['retry_attempt'])->equals(1); expect($mailer_log['retry_attempt'])->equals(1);
expect($mailer_log['retry_at'])->greaterThan(time()); expect($mailer_log['retry_at'])->greaterThan(time());