Check processed subscribers for old and new queues differently [MAILPOET-903]

This commit is contained in:
stoletniy
2018-03-01 21:16:00 +03:00
parent e0f989f6a8
commit 734d1ded1f
2 changed files with 48 additions and 2 deletions

View File

@ -65,6 +65,20 @@ class SendingQueue extends Model {
return $this;
}
/**
* Used only for checking processed subscribers in old queues
*/
private function getSubscribers() {
if(!is_serialized($this->subscribers)) {
return $this->subscribers;
}
$subscribers = unserialize($this->subscribers);
if(empty($subscribers['processed'])) {
$subscribers['processed'] = array();
}
return $subscribers;
}
function getNewsletterRenderedBody($type = false) {
$rendered_newsletter = $this->decodeRenderedNewsletterBodyObject($this->newsletter_rendered_body);
return ($type && !empty($rendered_newsletter[$type])) ?
@ -95,8 +109,18 @@ class SendingQueue extends Model {
}
function isSubscriberProcessed($subscriber_id) {
$task_subscribers = new TaskSubscribers($this->task()->findOne());
return $task_subscribers->isSubscriberProcessed($subscriber_id);
if(!empty($this->subscribers)
&& ScheduledTaskSubscriber::getTotalCount($this->task_id) === 0
) {
$subscribers = $this->getSubscribers();
return in_array($subscriber_id, $subscribers['processed']);
} else {
if($task = $this->task()->findOne()) {
$task_subscribers = new TaskSubscribers($task);
return $task_subscribers->isSubscriberProcessed($subscriber_id);
}
return false;
}
}
function asArray() {

View File

@ -3,7 +3,10 @@
namespace MailPoet\Test\Models;
use AspectMock\Test as Mock;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Models\SendingQueue;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Util\Helpers;
class SendingQueueTest extends \MailPoetTest {
@ -39,6 +42,23 @@ class SendingQueueTest extends \MailPoetTest {
$mock->verifyInvokedMultipleTimes('decodeEntities', 2);
}
function testItChecksProcessedSubscribersForOldQueues() {
$subscriber_id = 123;
expect($this->queue->isSubscriberProcessed($subscriber_id))->false();
$this->queue->subscribers = array('processed' => array($subscriber_id));
expect($this->queue->isSubscriberProcessed($subscriber_id))->true();
}
function testItChecksProcessedSubscribersForNewQueues() {
$subscriber_id = 123;
$queue = SendingTask::create();
$queue->setSubscribers(array($subscriber_id));
$queue->save();
expect($queue->isSubscriberProcessed($subscriber_id))->false();
$queue->updateProcessedSubscribers(array($subscriber_id));
expect($queue->isSubscriberProcessed($subscriber_id))->true();
}
function testItReadsSerializedRenderedNewsletterBody() {
$queue = $this->queue;
$data = array(
@ -99,6 +119,8 @@ class SendingQueueTest extends \MailPoetTest {
function _after() {
Mock::clean();
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}