Merge pull request #1268 from mailpoet/sending_queue_refactoring
Refactor sending queues to use scheduled task and task subscriber tables [MAILPOET-903]
This commit is contained in:
@@ -11,10 +11,13 @@ use MailPoet\Models\NewsletterOption;
|
||||
use MailPoet\Models\NewsletterOptionField;
|
||||
use MailPoet\Models\NewsletterSegment;
|
||||
use MailPoet\Models\Segment;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Models\Setting;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Models\SubscriberSegment;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
|
||||
class SchedulerTest extends \MailPoetTest {
|
||||
function testItDefinesConstants() {
|
||||
@@ -40,7 +43,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
|
||||
function testItCanGetScheduledQueues() {
|
||||
expect(Scheduler::getScheduledQueues())->isEmpty();
|
||||
$queue = SendingQueue::create();
|
||||
$queue = SendingTask::create();
|
||||
$queue->newsletter_id = 1;
|
||||
$queue->status = SendingQueue::STATUS_SCHEDULED;
|
||||
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
@@ -103,7 +106,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
expect($queue->scheduled_at)->null();
|
||||
$newsletter->schedule = '0 5 * * *'; // set it to daily at 5
|
||||
$scheduler->deleteQueueOrUpdateNextRunDate($queue, $newsletter);
|
||||
$queue = SendingQueue::findOne($queue->id);
|
||||
$queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
expect($queue->scheduled_at)->notNull();
|
||||
}
|
||||
|
||||
@@ -198,7 +201,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
function testItDoesNotProcessWelcomeNewsletterWhenThereAreNoSubscribersToProcess() {
|
||||
$newsletter = $this->_createNewsletter();
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$queue->subscribers = serialize(array());
|
||||
$queue->setSubscribers(array());
|
||||
|
||||
// delete queue when the list of subscribers to process is blank
|
||||
$scheduler = new Scheduler();
|
||||
@@ -211,7 +214,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = $this->_createNewsletter();
|
||||
$newsletter->event = 'user';
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$queue->subscribers = serialize(array('to_process' => array(1)));
|
||||
$queue->setSubscribers(array(1));
|
||||
|
||||
// return false when WP user cannot be verified
|
||||
$scheduler = Stub::make(new Scheduler(), array(
|
||||
@@ -226,7 +229,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = $this->_createNewsletter();
|
||||
$newsletter->event = 'segment';
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$queue->subscribers = serialize(array('to_process' => array(1)));
|
||||
$queue->setSubscribers(array(1));
|
||||
|
||||
// return false when subscriber cannot be verified
|
||||
$scheduler = Stub::make(new Scheduler(), array(
|
||||
@@ -243,13 +246,13 @@ class SchedulerTest extends \MailPoetTest {
|
||||
|
||||
// return true when subsriber is verified and update the queue's status to null
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$queue->subscribers = serialize(array('to_process' => array(1)));
|
||||
$queue->setSubscribers(array(1));
|
||||
$scheduler = Stub::make(new Scheduler(), array(
|
||||
'verifyMailpoetSubscriber' => Stub::exactly(1)
|
||||
), $this);
|
||||
expect($queue->status)->notNull();
|
||||
expect($scheduler->processWelcomeNewsletter($newsletter, $queue))->true();
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
expect($updated_queue->status)->null();
|
||||
}
|
||||
|
||||
@@ -259,14 +262,14 @@ class SchedulerTest extends \MailPoetTest {
|
||||
|
||||
// return true when WP user is verified
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$queue->subscribers = serialize(array('to_process' => array(1)));
|
||||
$queue->setSubscribers(array(1));
|
||||
$scheduler = Stub::make(new Scheduler(), array(
|
||||
'verifyWPSubscriber' => Stub::exactly(1)
|
||||
), $this);
|
||||
expect($queue->status)->notNull();
|
||||
expect($scheduler->processWelcomeNewsletter($newsletter, $queue))->true();
|
||||
// update queue's status to null
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
expect($updated_queue->status)->null();
|
||||
}
|
||||
|
||||
@@ -320,7 +323,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||
expect($result)->false();
|
||||
// update the time queue is scheduled to run at
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
expect(Carbon::parse($updated_queue->scheduled_at))->equals(
|
||||
Carbon::createFromTimestamp(current_time('timestamp'))
|
||||
->addMinutes(Scheduler::UNCONFIRMED_SUBSCRIBER_RESCHEDULE_TIMEOUT)
|
||||
@@ -369,16 +372,16 @@ class SchedulerTest extends \MailPoetTest {
|
||||
// return true
|
||||
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
|
||||
// update queue's list of subscribers to process
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue_subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue_subscribers['to_process'])->equals(array($subscriber->id));
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
$updated_queue_subscribers = $updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED);
|
||||
expect($updated_queue_subscribers)->equals(array($subscriber->id));
|
||||
// set queue's status to null
|
||||
expect($updated_queue->status)->null();
|
||||
// set newsletter's status to sending
|
||||
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
||||
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENDING);
|
||||
// SubscribersFinder is used for getting subscribers
|
||||
$finder->verifyInvoked('getSubscribersByList');
|
||||
$finder->verifyInvoked('addSubscribersToTaskFromSegments');
|
||||
}
|
||||
|
||||
function testItFailsToProcessPostNotificationNewsletterWhenSegmentsDontExist() {
|
||||
@@ -435,16 +438,16 @@ class SchedulerTest extends \MailPoetTest {
|
||||
expect($notification_history)->notEmpty();
|
||||
// update queue with a list of subscribers to process and change newsletter id
|
||||
// to that of the notification history
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue_subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue_subscribers['to_process'])->equals(array($subscriber->id));
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
$updated_queue_subscribers = $updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED);
|
||||
expect($updated_queue_subscribers)->equals(array($subscriber->id));
|
||||
expect($updated_queue->newsletter_id)->equals($notification_history->id);
|
||||
// set notification history's status to sending
|
||||
$updated_notification_history = Newsletter::where('parent_id', $newsletter->id)
|
||||
->findOne();
|
||||
expect($updated_notification_history->status)->equals(Newsletter::STATUS_SENDING);
|
||||
// SubscribersFinder is used for getting subscribers
|
||||
$finder->verifyInvoked('getSubscribersByList');
|
||||
$finder->verifyInvoked('addSubscribersToTaskFromSegments');
|
||||
}
|
||||
|
||||
function testItFailsToProcessWhenScheduledQueuesNotFound() {
|
||||
@@ -637,7 +640,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
function _createQueue($newsletter_id, $status = SendingQueue::STATUS_SCHEDULED) {
|
||||
$queue = SendingQueue::create();
|
||||
$queue = SendingTask::create();
|
||||
$queue->status = $status;
|
||||
$queue->newsletter_id = $newsletter_id;
|
||||
$queue->save();
|
||||
@@ -672,6 +675,8 @@ class SchedulerTest extends \MailPoetTest {
|
||||
Mock::clean();
|
||||
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
|
||||
|
189
tests/unit/Cron/Workers/SendingQueue/MigrationTest.php
Normal file
189
tests/unit/Cron/Workers/SendingQueue/MigrationTest.php
Normal file
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
namespace MailPoet\Test\Cron\Workers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use MailPoet\Cron\Workers\SendingQueue\Migration;
|
||||
use MailPoet\Mailer\MailerLog;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Models\Setting;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
|
||||
class MigrationTest extends \MailPoetTest {
|
||||
function _before() {
|
||||
// Alter table to test migration
|
||||
if(!Migration::checkUnmigratedColumnsExist()) {
|
||||
$this->downgradeTable();
|
||||
$this->altered = true;
|
||||
}
|
||||
|
||||
$this->subscriber_to_process = Subscriber::createOrUpdate(array(
|
||||
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||
'email' => 'to_process@example.com'
|
||||
));
|
||||
$this->subscriber_processed = Subscriber::createOrUpdate(array(
|
||||
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||
'email' => 'processed@example.com'
|
||||
));
|
||||
|
||||
// subscribers should be migrated
|
||||
$this->queue_running = $this->createSendingQueue();
|
||||
$this->queue_paused = $this->createSendingQueue(SendingQueue::STATUS_PAUSED);
|
||||
|
||||
// subscribers should not be migrated
|
||||
$this->queue_completed = $this->createSendingQueue(SendingQueue::STATUS_COMPLETED);
|
||||
$this->queue_scheduled = $this->createSendingQueue(SendingQueue::STATUS_SCHEDULED);
|
||||
|
||||
$this->worker = new Migration(microtime(true));
|
||||
}
|
||||
|
||||
function testItDefinesConstants() {
|
||||
expect(Migration::BATCH_SIZE)->equals(20);
|
||||
}
|
||||
|
||||
function testItChecksForACompletedMigrationBeforeRunning() {
|
||||
expect($this->worker->checkProcessingRequirements())->true();
|
||||
$this->createCompletedTask();
|
||||
expect($this->worker->checkProcessingRequirements())->false();
|
||||
}
|
||||
|
||||
function testItPausesSendingWhenPreparingATask() {
|
||||
$task = $this->createScheduledTask();
|
||||
expect(MailerLog::isSendingPaused())->false();
|
||||
$this->worker->prepareTask($task);
|
||||
expect($task->status)->null();
|
||||
expect(MailerLog::isSendingPaused())->true();
|
||||
}
|
||||
|
||||
function testItResumesSendingIfThereIsNothingToMigrate() {
|
||||
SendingQueue::deleteMany();
|
||||
$this->worker->pauseSending();
|
||||
expect(MailerLog::isSendingPaused())->true();
|
||||
$task = $this->createScheduledTask();
|
||||
$result = $this->worker->prepareTask($task);
|
||||
expect($result)->false();
|
||||
expect(MailerLog::isSendingPaused())->false();
|
||||
}
|
||||
|
||||
function testItCompletesTaskIfThereIsNothingToMigrate() {
|
||||
SendingQueue::deleteMany();
|
||||
$task = $this->createScheduledTask();
|
||||
$result = $this->worker->prepareTask($task);
|
||||
expect(ScheduledTask::findOne($task->id)->status)->equals(ScheduledTask::STATUS_COMPLETED);
|
||||
expect($result)->false();
|
||||
}
|
||||
|
||||
function testItMigratesSendingQueuesAndSubscribers() {
|
||||
expect($this->worker->getUnmigratedQueues()->count())->equals(4);
|
||||
expect(ScheduledTask::where('type', SendingTask::TASK_TYPE)->findMany())->count(0);
|
||||
expect(ScheduledTaskSubscriber::whereGt('task_id', 0)->count())->equals(0);
|
||||
|
||||
$task = $this->createRunningTask();
|
||||
$this->worker->processTask($task);
|
||||
|
||||
expect($this->worker->getUnmigratedQueues()->count())->equals(0);
|
||||
expect(ScheduledTask::where('type', SendingTask::TASK_TYPE)->findMany())->count(4);
|
||||
expect(ScheduledTaskSubscriber::whereGt('task_id', 0)->count())->equals(4); // 2 for running, 2 for paused
|
||||
|
||||
$queue = SendingQueue::findOne($this->queue_running->id);
|
||||
$task = ScheduledTask::findOne($queue->task_id);
|
||||
expect($task->type)->equals(SendingTask::TASK_TYPE);
|
||||
|
||||
$migrated_subscribers = ScheduledTaskSubscriber::where('task_id', $queue->task_id)
|
||||
->orderByAsc('subscriber_id')
|
||||
->findMany();
|
||||
expect($migrated_subscribers)->count(2);
|
||||
expect($migrated_subscribers[0]->processed)->equals(ScheduledTaskSubscriber::STATUS_UNPROCESSED);
|
||||
expect($migrated_subscribers[1]->processed)->equals(ScheduledTaskSubscriber::STATUS_PROCESSED);
|
||||
}
|
||||
|
||||
function testItResumesSendingAfterMigratingSendingQueuesAndSubscribers() {
|
||||
$this->worker->pauseSending();
|
||||
expect(MailerLog::isSendingPaused())->true();
|
||||
$task = $this->createRunningTask();
|
||||
$this->worker->processTask($task);
|
||||
expect(MailerLog::isSendingPaused())->false();
|
||||
}
|
||||
|
||||
private function createScheduledTask() {
|
||||
$task = ScheduledTask::create();
|
||||
$task->type = Migration::TASK_TYPE;
|
||||
$task->status = ScheduledTask::STATUS_SCHEDULED;
|
||||
$task->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
$task->save();
|
||||
return $task;
|
||||
}
|
||||
|
||||
private function createRunningTask() {
|
||||
$task = ScheduledTask::create();
|
||||
$task->type = Migration::TASK_TYPE;
|
||||
$task->status = null;
|
||||
$task->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
$task->save();
|
||||
return $task;
|
||||
}
|
||||
|
||||
private function createCompletedTask() {
|
||||
$task = ScheduledTask::create();
|
||||
$task->type = Migration::TASK_TYPE;
|
||||
$task->status = ScheduledTask::STATUS_COMPLETED;
|
||||
$task->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
$task->save();
|
||||
return $task;
|
||||
}
|
||||
|
||||
private function createSendingQueue($status = null) {
|
||||
$queue = SendingQueue::create();
|
||||
$queue->newsletter_id = 0;
|
||||
$queue->task_id = 0;
|
||||
$queue->subscribers = serialize(array(
|
||||
'to_process' => array($this->subscriber_to_process->id),
|
||||
'processed' => array($this->subscriber_processed->id)
|
||||
));
|
||||
$queue->count_total = 2;
|
||||
$queue->count_processed = 1;
|
||||
$queue->count_to_process = 1;
|
||||
$queue->status = $status;
|
||||
return $queue->save();
|
||||
}
|
||||
|
||||
private function downgradeTable() {
|
||||
global $wpdb;
|
||||
$wpdb->query(
|
||||
'ALTER TABLE ' . SendingQueue::$_table . ' ' .
|
||||
'ADD COLUMN `type` varchar(90) NULL DEFAULT NULL,' .
|
||||
'ADD COLUMN `status` varchar(12) NULL DEFAULT NULL,' .
|
||||
'ADD COLUMN `priority` mediumint(9) NOT NULL DEFAULT 0,' .
|
||||
'ADD COLUMN `scheduled_at` TIMESTAMP NULL,' .
|
||||
'ADD COLUMN `processed_at` TIMESTAMP NULL'
|
||||
);
|
||||
}
|
||||
|
||||
private function restoreTable() {
|
||||
global $wpdb;
|
||||
$wpdb->query(
|
||||
'ALTER TABLE ' . SendingQueue::$_table . ' ' .
|
||||
'DROP COLUMN `type`,' .
|
||||
'DROP COLUMN `status`,' .
|
||||
'DROP COLUMN `priority`,' .
|
||||
'DROP COLUMN `scheduled_at`,' .
|
||||
'DROP COLUMN `processed_at`'
|
||||
);
|
||||
}
|
||||
|
||||
function _after() {
|
||||
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||
|
||||
// Restore table after testing
|
||||
if(!empty($this->altered)) {
|
||||
$this->restoreTable();
|
||||
$this->altered = false;
|
||||
}
|
||||
}
|
||||
}
|
@@ -15,6 +15,8 @@ use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\NewsletterLink;
|
||||
use MailPoet\Models\NewsletterPost;
|
||||
use MailPoet\Models\NewsletterSegment;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||
use MailPoet\Models\Segment;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Models\Setting;
|
||||
@@ -25,6 +27,7 @@ use MailPoet\Newsletter\Links\Links;
|
||||
use MailPoet\Router\Endpoints\Track;
|
||||
use MailPoet\Router\Router;
|
||||
use MailPoet\Subscription\Url;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\WP\Hooks;
|
||||
|
||||
class SendingQueueTest extends \MailPoetTest {
|
||||
@@ -56,14 +59,9 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$this->newsletter_segment->newsletter_id = $this->newsletter->id;
|
||||
$this->newsletter_segment->segment_id = $this->segment->id;
|
||||
$this->newsletter_segment->save();
|
||||
$this->queue = SendingQueue::create();
|
||||
$this->queue = SendingTask::create();
|
||||
$this->queue->newsletter_id = $this->newsletter->id;
|
||||
$this->queue->subscribers = serialize(
|
||||
array(
|
||||
'to_process' => array($this->subscriber->id),
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
$this->queue->setSubscribers(array($this->subscriber->id));
|
||||
$this->queue->count_total = 1;
|
||||
$this->queue->save();
|
||||
$this->newsletter_link = NewsletterLink::create();
|
||||
@@ -277,17 +275,14 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||
|
||||
// queue status is set to completed
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||
|
||||
// queue subscriber processed/to process count is updated
|
||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||
->equals(array($this->subscriber->id));
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
@@ -326,17 +321,14 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||
|
||||
// queue status is set to completed
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||
|
||||
// queue subscriber processed/to process count is updated
|
||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||
->equals(array($this->subscriber->id));
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
@@ -368,7 +360,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$sending_queue_worker->process();
|
||||
|
||||
// queue status is set to completed
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||
|
||||
// newsletter status is set to sent and sent_at date is populated
|
||||
@@ -377,13 +369,10 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($updated_newsletter->sent_at)->equals($updated_queue->processed_at);
|
||||
|
||||
// queue subscriber processed/to process count is updated
|
||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||
->equals(array($this->subscriber->id));
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
@@ -422,17 +411,14 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||
|
||||
// queue status is set to completed
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||
|
||||
// queue subscriber processed/to process count is updated
|
||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||
->equals(array($this->subscriber->id));
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
@@ -447,15 +433,10 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
|
||||
function testItRemovesNonexistentSubscribersFromProcessingList() {
|
||||
$queue = $this->queue;
|
||||
$queue->subscribers = serialize(
|
||||
array(
|
||||
'to_process' => array(
|
||||
$this->subscriber->id(),
|
||||
12345645454
|
||||
),
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
$queue->setSubscribers(array(
|
||||
$this->subscriber->id(),
|
||||
12345645454
|
||||
));
|
||||
$queue->count_total = 2;
|
||||
$queue->save();
|
||||
$sending_queue_worker = $this->sending_queue_worker;
|
||||
@@ -470,15 +451,12 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
);
|
||||
$sending_queue_worker->process();
|
||||
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
// queue subscriber processed/to process count is updated
|
||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||
->equals(array($this->subscriber->id));
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
@@ -490,15 +468,10 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
|
||||
function testItUpdatesQueueSubscriberCountWhenNoneOfSubscribersExist() {
|
||||
$queue = $this->queue;
|
||||
$queue->subscribers = serialize(
|
||||
array(
|
||||
'to_process' => array(
|
||||
123,
|
||||
456
|
||||
),
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
$queue->setSubscribers(array(
|
||||
123,
|
||||
456
|
||||
));
|
||||
$queue->count_total = 2;
|
||||
$queue->save();
|
||||
$sending_queue_worker = $this->sending_queue_worker;
|
||||
@@ -508,15 +481,12 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
);
|
||||
$sending_queue_worker->process();
|
||||
|
||||
$updated_queue = SendingQueue::findOne($queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($queue->id));
|
||||
// queue subscriber processed/to process count is updated
|
||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_UNPROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->getSubscribers(ScheduledTaskSubscriber::STATUS_PROCESSED))
|
||||
->equals(array());
|
||||
expect($updated_queue->count_total)->equals(0);
|
||||
expect($updated_queue->count_processed)->equals(0);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
@@ -531,7 +501,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
|
||||
// newsletter is sent to existing subscriber
|
||||
$sending_queue_worker->process();
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect((int)$updated_queue->count_total)->equals(1);
|
||||
|
||||
// newsletter is not sent to trashed subscriber
|
||||
@@ -541,7 +511,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$subscriber->deleted_at = Carbon::now();
|
||||
$subscriber->save();
|
||||
$sending_queue_worker->process();
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect((int)$updated_queue->count_total)->equals(0);
|
||||
}
|
||||
|
||||
@@ -559,7 +529,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$subscriber->status = Subscriber::STATUS_UNSUBSCRIBED;
|
||||
$subscriber->save();
|
||||
$sending_queue_worker->process();
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect((int)$updated_queue->count_total)->equals(0);
|
||||
}
|
||||
|
||||
@@ -577,7 +547,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$subscriber_segment->status = Subscriber::STATUS_UNSUBSCRIBED;
|
||||
$subscriber_segment->save();
|
||||
$sending_queue_worker->process();
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
expect((int)$updated_queue->count_total)->equals(0);
|
||||
}
|
||||
|
||||
@@ -651,6 +621,8 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
function _after() {
|
||||
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||
|
@@ -10,9 +10,12 @@ use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\NewsletterLink;
|
||||
use MailPoet\Models\NewsletterPost;
|
||||
use MailPoet\Models\NewsletterSegment;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Models\Setting;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Router\Router;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
|
||||
@@ -38,7 +41,7 @@ class NewsletterTest extends \MailPoetTest {
|
||||
$this->parent_newsletter->body = 'parent body';
|
||||
$this->parent_newsletter->preheader = '';
|
||||
$this->parent_newsletter->save();
|
||||
$this->queue = SendingQueue::create();
|
||||
$this->queue = SendingTask::create();
|
||||
$this->queue->newsletter_id = $this->newsletter->id;
|
||||
$this->queue->save();
|
||||
}
|
||||
@@ -129,7 +132,7 @@ class NewsletterTest extends \MailPoetTest {
|
||||
$newsletter_task->preProcessNewsletter($this->newsletter, $this->queue);
|
||||
$link = NewsletterLink::where('newsletter_id', $this->newsletter->id)
|
||||
->findOne();
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
$rendered_newsletter = $updated_queue->getNewsletterRenderedBody();
|
||||
expect($rendered_newsletter['html'])
|
||||
->contains('[mailpoet_click_data]-' . $link->hash);
|
||||
@@ -150,7 +153,7 @@ class NewsletterTest extends \MailPoetTest {
|
||||
$link = NewsletterLink::where('newsletter_id', $this->newsletter->id)
|
||||
->findOne();
|
||||
expect($link)->false();
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
$updated_queue = SendingTask::createFromQueue(SendingQueue::findOne($this->queue->id));
|
||||
$rendered_newsletter = $updated_queue->getNewsletterRenderedBody();
|
||||
expect($rendered_newsletter['html'])
|
||||
->notContains('[mailpoet_click_data]');
|
||||
@@ -277,9 +280,10 @@ class NewsletterTest extends \MailPoetTest {
|
||||
|
||||
function testItLogsErrorWhenExistingRenderedNewsletterBodyIsInvalid() {
|
||||
$queue_mock = Mock::double(
|
||||
new \stdClass(),
|
||||
$this->queue,
|
||||
array(
|
||||
'getNewsletterRenderedBody' => 'a:2:{s:4:"html"'
|
||||
'getNewsletterRenderedBody' => 'a:2:{s:4:"html"',
|
||||
'validate' => false
|
||||
)
|
||||
);
|
||||
try {
|
||||
@@ -295,7 +299,7 @@ class NewsletterTest extends \MailPoetTest {
|
||||
function testItLogsErrorWhenNewlyRenderedNewsletterBodyIsInvalid() {
|
||||
$queue = $this->queue;
|
||||
$queue_mock = Mock::double(
|
||||
new \stdClass(),
|
||||
$this->queue,
|
||||
array(
|
||||
'getNewsletterRenderedBody' => null
|
||||
)
|
||||
@@ -333,8 +337,10 @@ class NewsletterTest extends \MailPoetTest {
|
||||
|
||||
function _after() {
|
||||
WPHooksHelper::releaseAllHooks();
|
||||
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);
|
||||
\ORM::raw_execute('TRUNCATE ' . NewsletterPost::$_table);
|
||||
|
Reference in New Issue
Block a user