Refactor sendingQueue to distinguish bulk/individual sending method

[MAILPOET-1154]
This commit is contained in:
Rostislav Wolny
2018-09-11 16:56:26 +02:00
parent 3ae8763837
commit ea4c5f46fb
4 changed files with 53 additions and 15 deletions

View File

@ -129,12 +129,12 @@ class SendingQueue {
'queue_id' => $queue->id 'queue_id' => $queue->id
); );
if($processing_method === 'individual') { if($processing_method === 'individual') {
$queue = $this->sendNewsletters( $queue = $this->sendNewsletter(
$queue, $queue,
$prepared_subscribers_ids, $prepared_subscribers_ids[0],
$prepared_newsletters[0], $prepared_newsletters[0],
$prepared_subscribers[0], $prepared_subscribers[0],
$statistics, $statistics[0],
array('unsubscribe_url' => $unsubscribe_urls[0]) array('unsubscribe_url' => $unsubscribe_urls[0])
); );
$prepared_newsletters = array(); $prepared_newsletters = array();
@ -157,16 +157,37 @@ class SendingQueue {
return $queue; return $queue;
} }
function sendNewsletter(
SendingTask $sending_task, $prepared_subscriber_id, $prepared_newsletter,
$prepared_subscriber, $statistics, $extra_params = array()
) {
// send newsletter
$send_result = $this->mailer_task->send(
$prepared_newsletter,
$prepared_subscriber,
$extra_params
);
return $this->processSendResult($sending_task, $send_result, [$prepared_subscriber_id], [$statistics]);
}
function sendNewsletters( function sendNewsletters(
SendingTask $sending_task, $prepared_subscribers_ids, $prepared_newsletters, SendingTask $sending_task, $prepared_subscribers_ids, $prepared_newsletters,
$prepared_subscribers, $statistics, $extra_params = array() $prepared_subscribers, $statistics, $extra_params = array()
) { ) {
// send newsletter // send newsletters
$send_result = $this->mailer_task->send( $send_result = $this->mailer_task->sendBulk(
$prepared_newsletters, $prepared_newsletters,
$prepared_subscribers, $prepared_subscribers,
$extra_params $extra_params
); );
return $this->processSendResult($sending_task, $send_result, $prepared_subscribers_ids, $statistics);
}
private function processSendResult(
SendingTask $sending_task,
$send_result,
array $prepared_subscribers_ids, array $statistics
) {
// 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) {
$error = $send_result['error']; $error = $send_result['error'];

View File

@ -54,11 +54,25 @@ class Mailer {
return $this->mailer->formatSubscriberNameAndEmailAddress($subscriber); return $this->mailer->formatSubscriberNameAndEmailAddress($subscriber);
} }
function send($prepared_newsletters, $prepared_subscribers, $extra_params = array()) { function sendBulk($prepared_newsletters, $prepared_subscribers, $extra_params = array()) {
if($this->getProcessingMethod() === 'individual') {
throw new \LogicException('Trying to send a batch with individual processing method');
}
return $this->mailer->mailer_instance->send( return $this->mailer->mailer_instance->send(
$prepared_newsletters, $prepared_newsletters,
$prepared_subscribers, $prepared_subscribers,
$extra_params $extra_params
); );
} }
function send($prepared_newsletter, $prepared_subscriber, $extra_params = array()) {
if($this->getProcessingMethod() === 'bulk') {
throw new \LogicException('Trying to send an individual email with a bulk processing method');
}
return $this->mailer->mailer_instance->send(
$prepared_newsletter,
$prepared_subscriber,
$extra_params
);
}
} }

View File

@ -140,7 +140,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make( Stub::make(
new MailerTask(), new MailerTask(),
array( array(
'send' => null 'sendBulk' => null
) )
) )
); );
@ -174,7 +174,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make( Stub::make(
new MailerTask(), new MailerTask(),
array( array(
'send' => null 'sendBulk' => null
) )
) )
); );
@ -313,7 +313,7 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make( Stub::make(
new MailerTask(), new MailerTask(),
array( array(
'send' => Expected::exactly(1, function($newsletter, $subscriber) { 'sendBulk' => Expected::exactly(1, function($newsletter, $subscriber) {
// newsletter body should not be empty // newsletter body should not be empty
expect(!empty($newsletter[0]['body']['html']))->true(); expect(!empty($newsletter[0]['body']['html']))->true();
expect(!empty($newsletter[0]['body']['text']))->true(); expect(!empty($newsletter[0]['body']['text']))->true();
@ -598,16 +598,16 @@ class SendingQueueTest extends \MailPoetTest {
Stub::make( Stub::make(
new MailerTask(), new MailerTask(),
array( array(
'send' => true 'sendBulk' => true
) )
) )
); );
try { try {
$sending_queue_worker->sendNewsletters( $sending_queue_worker->sendNewsletters(
$sending_task->getObject(), $sending_task->getObject(),
$prepared_subscribers = array(), $prepared_subscribers = [],
$prepared_newsletters = false, $prepared_newsletters = [],
$prepared_subscribers = false, $prepared_subscribers = [],
$statistics = false $statistics = false
); );
$this->fail('Paused sending exception was not thrown.'); $this->fail('Paused sending exception was not thrown.');

View File

@ -114,7 +114,10 @@ class MailerTest extends \MailPoetTest {
return true; return true;
})), })),
$this $this
) ),
'mailer_config' => [
'method' => null,
]
) )
); );
// mailer instance should be properly configured // mailer instance should be properly configured
@ -128,4 +131,4 @@ class MailerTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . Setting::$_table); \ORM::raw_execute('TRUNCATE ' . Setting::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); \ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
} }
} }