Fix unit tests [MAILPOET-903]

This commit is contained in:
stoletniy
2018-02-09 19:46:52 +03:00
parent 99732ac14d
commit be6647d763
27 changed files with 315 additions and 207 deletions

View File

@ -166,7 +166,7 @@ class Newsletters extends APIEndpoint {
// if there are past due notifications, reschedule them for the next send date
if($newsletter->type === Newsletter::TYPE_NOTIFICATION && $status === Newsletter::STATUS_ACTIVE) {
$next_run_date = Scheduler::getNextRunDate($newsletter->schedule);
$newsletter->queue()->task()
$newsletter->queue()->findOne()->task()
->whereLte('scheduled_at', Carbon::createFromTimestamp(current_time('timestamp')))
->where('status', SendingQueue::STATUS_SCHEDULED)
->findResultSet()

View File

@ -46,7 +46,7 @@ class SendingQueue extends APIEndpoint {
}
// add newsletter to the sending queue
$queue = SendingQueueModel::findTaskByNewsletterId($newsletter->id)
$queue = SendingQueueModel::joinWithTasks()
->whereNull('tasks.status')
->findOne();

View File

@ -9,6 +9,7 @@ use MailPoet\Cron\Workers\Bounce as BounceWorker;
use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker;
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Setting;
use MailPoet\Services\Bridge;
if(!defined('ABSPATH')) exit;
@ -22,6 +23,7 @@ class WordPress {
static function checkExecutionRequirements() {
// migration
$migration_disabled = Setting::getValue('cron_trigger.method') === 'none';
$migration_due_tasks = MigrationWorker::getAllDueTasks();
$migration_future_tasks = MigrationWorker::getFutureTasks();
// sending queue
@ -46,7 +48,7 @@ class WordPress {
$bounce_sync_active = ($mp_sending_enabled && ($bounce_due_tasks || !$bounce_future_tasks));
$sending_service_key_check_active = ($mp_sending_enabled && ($msskeycheck_due_tasks || !$msskeycheck_future_tasks));
$premium_key_check_active = ($premium_key_specified && ($premium_keycheck_due_tasks || !$premium_keycheck_future_tasks));
$migration_active = $migration_due_tasks || !$migration_future_tasks;
$migration_active = !$migration_disabled && ($migration_due_tasks || !$migration_future_tasks);
return (
$migration_active

View File

@ -22,11 +22,15 @@ class Migration extends SimpleWorker {
}
function prepareTask(ScheduledTask $task) {
$unmigrated_queues_count = $this->getUnmigratedQueues()->count();
$unmigrated_queue_subscribers = $this->getTaskIdsForUnmigratedSubscribers();
$unmigrated_columns = self::checkUnmigratedColumnsExist();
if($unmigrated_columns) {
$unmigrated_queues_count = $this->getUnmigratedQueues()->count();
$unmigrated_queue_subscribers = $this->getTaskIdsForUnmigratedSubscribers();
}
if($unmigrated_queues_count == 0
&& count($unmigrated_queue_subscribers) == 0
if(!$unmigrated_columns ||
($unmigrated_queues_count == 0
&& count($unmigrated_queue_subscribers) == 0)
) {
// nothing to migrate
$this->complete($task);
@ -40,7 +44,7 @@ class Migration extends SimpleWorker {
return parent::prepareTask($task);
}
private function pauseSending() {
function pauseSending() {
$mailer_log = MailerLog::getMailerLog();
if(MailerLog::isSendingPaused($mailer_log)) {
// sending is already paused
@ -54,7 +58,7 @@ class Migration extends SimpleWorker {
return MailerLog::pauseSending($mailer_log);
}
private function resumeSending() {
function resumeSending() {
$mailer_log = MailerLog::getMailerLog();
if(!MailerLog::isSendingPaused($mailer_log)) {
// sending is not paused
@ -77,6 +81,12 @@ class Migration extends SimpleWorker {
return true;
}
static function checkUnmigratedColumnsExist() {
global $wpdb;
$existing_columns = $wpdb->get_col('DESC ' . SendingQueue::$_table, 0);
return in_array('type', $existing_columns);
}
function getUnmigratedQueues() {
return SendingQueue::where('task_id', 0)
->whereNull('type');

View File

@ -181,11 +181,17 @@ class Newsletter extends Model {
if($children) {
$children = Helpers::flattenArray($children);
$this->children()->deleteMany();
SendingQueue::getTasks()->whereIn('queues.newsletter_id', array_merge($children, array($this->id)))->deleteMany();
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', array_merge($children, array($this->id)))
->findResultSet()
->delete();
SendingQueue::whereIn('newsletter_id', array_merge($children, array($this->id)))->deleteMany();
NewsletterSegment::whereIn('newsletter_id', array_merge($children, array($this->id)))->deleteMany();
} else {
SendingQueue::getTasks()->where('queues.newsletter_id', $this->id)->deleteMany();
SendingQueue::getTasks()
->where('queues.newsletter_id', $this->id)
->findResultSet()
->delete();
$this->queue()->deleteMany();
$this->segmentRelations()->deleteMany();
}
@ -200,11 +206,17 @@ class Newsletter extends Model {
if($children) {
$children = Helpers::flattenArray($children);
Newsletter::whereIn('parent_id', $ids)->deleteMany();
SendingQueue::getTasks()->whereIn('queues.newsletter_id', array_merge($children, $ids))->deleteMany();
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', array_merge($children, $ids))
->findResultSet()
->delete();
SendingQueue::whereIn('newsletter_id', array_merge($children, $ids))->deleteMany();
NewsletterSegment::whereIn('newsletter_id', array_merge($children, $ids))->deleteMany();
} else {
SendingQueue::getTasks()->whereIn('queues.newsletter_id', $ids)->deleteMany();
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', $ids)
->findResultSet()
->delete();
SendingQueue::whereIn('newsletter_id', $ids)->deleteMany();
NewsletterSegment::whereIn('newsletter_id', $ids)->deleteMany();
}
@ -266,7 +278,7 @@ class Newsletter extends Model {
->save();
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', Helpers::flattenArray($children))
->whereNotNull('deleted_at')
->whereNotNull('tasks.deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();
@ -278,7 +290,7 @@ class Newsletter extends Model {
} else {
SendingQueue::getTasks()
->whereIn('queues.newsletter_id', $ids)
->whereNotNull('deleted_at')
->whereNotNull('tasks.deleted_at')
->findResultSet()
->set('deleted_at', null)
->save();

View File

@ -60,10 +60,6 @@ class SendingQueue extends Model {
json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
);
}
// set the default priority to medium
if(!$this->priority) {
$this->priority = self::PRIORITY_MEDIUM;
}
parent::save();
$this->newsletter_rendered_body = $this->getNewsletterRenderedBody();
return $this;
@ -147,7 +143,7 @@ class SendingQueue extends Model {
}
static function findTaskByNewsletterId($newsletter_id) {
return static::joinWithTasks()
return static::getTasks()
->where('queues.newsletter_id', $newsletter_id);
}
}

View File

@ -109,8 +109,8 @@ class Scheduler {
$next_run_date = self::getNextRunDate($newsletter->schedule);
if(!$next_run_date) return;
// do not schedule duplicate queues for the same time
$existing_queue = SendingQueue::where('newsletter_id', $newsletter->id)
->where('scheduled_at', $next_run_date)
$existing_queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->where('tasks.scheduled_at', $next_run_date)
->findOne();
if($existing_queue) return;
$queue = SendingTask::create();

View File

@ -10,6 +10,7 @@ use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Statistics\Track\Clicks;
use MailPoet\Statistics\Track\Opens;
use MailPoet\Tasks\Sending as SendingTask;
if(!defined('ABSPATH')) exit;
@ -49,6 +50,9 @@ class Track {
return false;
}
$data->queue = SendingQueue::findOne($data->queue_id);
if($data->queue) {
$data->queue = SendingTask::createFromQueue($data->queue);
}
$data->subscriber = Subscriber::findOne($data->subscriber_id);
$data->newsletter = (!empty($data->queue->newsletter_id)) ?
Newsletter::findOne($data->queue->newsletter_id) :

View File

@ -30,13 +30,13 @@ class Sending {
'count_to_process'
);
public function __construct(ScheduledTask $task, SendingQueue $queue) {
$this->task = $task;
$this->queue = $queue;
$this->task_subscribers = new Subscribers($task);
}
private $common_fields = array(
'created_at',
'updated_at',
'deleted_at'
);
static function create(ScheduledTask $task = null, SendingQueue $queue = null) {
private function __construct(ScheduledTask $task = null, SendingQueue $queue = null) {
if(is_null($task) && is_null($queue)) {
$task = ScheduledTask::create();
$task->type = self::TASK_TYPE;
@ -48,6 +48,16 @@ class Sending {
$queue->save();
}
if($task->type !== self::TASK_TYPE) {
throw new \Exception('Only tasks of type "' . self::TASK_TYPE . '" are accepted by this class');
}
$this->task = $task;
$this->queue = $queue;
$this->task_subscribers = new Subscribers($task);
}
static function create(ScheduledTask $task = null, SendingQueue $queue = null) {
return new self($task, $queue);
}
@ -89,6 +99,15 @@ class Sending {
return array_merge($task, $queue);
}
public function getErrors() {
$queue_errors = $this->queue->getErrors();
$task_errors = $this->task->getErrors();
if(empty($queue_errors) && empty($task_errors)) {
return false;
}
return array_merge((array)$queue_errors, (array)$task_errors);
}
public function save() {
$this->task->save();
$this->queue->save();
@ -113,8 +132,13 @@ class Sending {
return $this->task_subscribers;
}
public function getSubscribers() {
$subscribers = $this->task_subscribers->getSubscribers()->findArray();
public function getSubscribers($processed = null) {
$subscribers = $this->task_subscribers->getSubscribers();
if(!is_null($processed)) {
$status = ($processed) ? ScheduledTaskSubscriber::STATUS_PROCESSED : ScheduledTaskSubscriber::STATUS_UNPROCESSED;
$subscribers->where('processed', $status);
}
$subscribers = $subscribers->findArray();
return Helpers::arrayColumn($subscribers, 'subscriber_id');
}
@ -145,6 +169,24 @@ class Sending {
return $this->queue->save();
}
public function hydrate(array $data) {
foreach($data as $k => $v) {
$this->__set($k, $v);
}
}
public function validate() {
return $this->queue->validate() && $this->task->validate();
}
public function __isset($prop) {
if($this->isQueueProperty($prop)) {
return isset($this->queue->$prop);
} else {
return isset($this->task->$prop);
}
}
public function __get($prop) {
if($this->isQueueProperty($prop)) {
return $this->queue->$prop;
@ -154,7 +196,10 @@ class Sending {
}
public function __set($prop, $value) {
if($this->isQueueProperty($prop)) {
if($this->isCommonProperty($prop)) {
$this->queue->$prop = $value;
$this->task->$prop = $value;
} elseif($this->isQueueProperty($prop)) {
$this->queue->$prop = $value;
} else {
$this->task->$prop = $value;
@ -170,6 +215,10 @@ class Sending {
return in_array($prop, $this->queue_fields);
}
private function isCommonProperty($prop) {
return in_array($prop, $this->common_fields);
}
static function getScheduledQueues() {
$tasks = ScheduledTask::where('status', ScheduledTask::STATUS_SCHEDULED)
->whereLte('scheduled_at', Carbon::createFromTimestamp(current_time('timestamp')))

View File

@ -43,11 +43,13 @@ class Subscribers {
}
function updateProcessedSubscribers(array $processed_subscribers) {
$this->getSubscribers()
->whereIn('subscriber_id', $processed_subscribers)
->findResultSet()
->set('processed', ScheduledTaskSubscriber::STATUS_PROCESSED)
->save();
if(!empty($processed_subscribers)) {
$this->getSubscribers()
->whereIn('subscriber_id', $processed_subscribers)
->findResultSet()
->set('processed', ScheduledTaskSubscriber::STATUS_PROCESSED)
->save();
}
$this->checkCompleted();
}

View File

@ -12,6 +12,7 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Models\SendingQueue;
@ -19,6 +20,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Newsletter\Url;
use MailPoet\Router\Router;
use MailPoet\Subscription\Url as SubscriptionUrl;
use MailPoet\Tasks\Sending as SendingTask;
class NewslettersTest extends \MailPoetTest {
function _before() {
@ -168,7 +170,7 @@ class NewslettersTest extends \MailPoetTest {
}
function testItCanClearRenderedQueueUponSave() {
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $this->newsletter->id;
$sending_queue->status = SendingQueue::STATUS_SCHEDULED;
$sending_queue->newsletter_rendered_body = array('html' => 'html', 'text' => 'text');
@ -257,13 +259,13 @@ class NewslettersTest extends \MailPoetTest {
// create sending queues
$current_time = Carbon::now();
$sending_queue_1 = SendingQueue::create();
$sending_queue_1 = SendingTask::create();
$sending_queue_1->newsletter_id = 1;
$sending_queue_1->status = SendingQueue::STATUS_SCHEDULED;
$sending_queue_1->scheduled_at = $current_time;
$sending_queue_1->save();
$sending_queue_2 = SendingQueue::create();
$sending_queue_2 = SendingTask::create();
$sending_queue_2->newsletter_id = 1;
$sending_queue_2->save();
@ -284,8 +286,8 @@ class NewslettersTest extends \MailPoetTest {
)
);
$newsletter = $router->save($newsletter_data);
$sending_queue_1 = SendingQueue::findOne($sending_queue_1->id);
$sending_queue_2 = SendingQueue::findOne($sending_queue_2->id);
$sending_queue_1 = SendingTask::createFromQueue(SendingQueue::findOne($sending_queue_1->id));
$sending_queue_2 = SendingTask::createFromQueue(SendingQueue::findOne($sending_queue_2->id));
expect($sending_queue_1->scheduled_at)->notEquals($current_time);
expect($sending_queue_1->scheduled_at)->equals(
Scheduler::getNextRunDate($newsletter->data['schedule'])
@ -375,17 +377,17 @@ class NewslettersTest extends \MailPoetTest {
'value' => $schedule
)
);
$sending_queue_1 = SendingQueue::create();
$sending_queue_1 = SendingTask::create();
$sending_queue_1->newsletter_id = $this->post_notification->id;
$sending_queue_1->scheduled_at = Scheduler::getPreviousRunDate($schedule);
$sending_queue_1->status = SendingQueue::STATUS_SCHEDULED;
$sending_queue_1->save();
$sending_queue_2 = SendingQueue::create();
$sending_queue_2 = SendingTask::create();
$sending_queue_2->newsletter_id = $this->post_notification->id;
$sending_queue_2->scheduled_at = $random_future_date;
$sending_queue_2->status = SendingQueue::STATUS_SCHEDULED;
$sending_queue_2->save();
$sending_queue_3 = SendingQueue::create();
$sending_queue_3 = SendingTask::create();
$sending_queue_3->newsletter_id = $this->post_notification->id;
$sending_queue_3->scheduled_at = Scheduler::getPreviousRunDate($schedule);
$sending_queue_3->save();
@ -397,13 +399,13 @@ class NewslettersTest extends \MailPoetTest {
'status' => Newsletter::STATUS_ACTIVE
)
);
$sending_queues = SendingQueue::findMany();
$tasks = ScheduledTask::findMany();
// previously scheduled notification is rescheduled for future date
expect($sending_queues[0]->scheduled_at)->equals(Scheduler::getNextRunDate($schedule));
expect($tasks[0]->scheduled_at)->equals(Scheduler::getNextRunDate($schedule));
// future scheduled notifications are left intact
expect($sending_queues[1]->scheduled_at)->equals($random_future_date);
expect($tasks[1]->scheduled_at)->equals($random_future_date);
// previously unscheduled (e.g., sent/sending) notifications are left intact
expect($sending_queues[2]->scheduled_at)->equals(Scheduler::getPreviousRunDate($schedule));
expect($tasks[2]->scheduled_at)->equals(Scheduler::getPreviousRunDate($schedule));
}
function testItCanRestoreANewsletter() {
@ -710,8 +712,8 @@ class NewslettersTest extends \MailPoetTest {
'mailer' => Stub::makeEmpty(
'\MailPoet\Mailer\Mailer',
array(
'send' => function($newsletter, $subscriber, $extra_params)
use ($unsubscribeLink, $manageLink, $viewInBrowserLink)
'send' => function($newsletter, $subscriber, $extra_params)
use ($unsubscribeLink, $manageLink, $viewInBrowserLink)
{
expect(is_array($newsletter))->true();
expect($newsletter['body']['text'])->contains('Hello test');
@ -785,7 +787,7 @@ class NewslettersTest extends \MailPoetTest {
$newsletter->save();
expect($newsletter->getErrors())->false();
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->newsletter_rendered_body = array(
'html' => 'html',
@ -816,6 +818,7 @@ class NewslettersTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);

View File

@ -5,10 +5,12 @@ use Codeception\Util\Fixtures;
use Helper\WordPress;
use MailPoet\Config\Shortcodes;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Url;
use MailPoet\Router\Router;
use MailPoet\Tasks\Sending as SendingTask;
class ShortcodesTest extends \MailPoetTest {
function _before() {
@ -16,7 +18,7 @@ class ShortcodesTest extends \MailPoetTest {
$newsletter->type = Newsletter::TYPE_STANDARD;
$newsletter->status = Newsletter::STATUS_SENT;
$this->newsletter = $newsletter->save();
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->status = SendingQueue::STATUS_COMPLETED;
$this->queue = $queue->save();
@ -128,6 +130,7 @@ class ShortcodesTest extends \MailPoetTest {
function _after() {
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}

View File

@ -7,8 +7,10 @@ use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Triggers\WordPress;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Setting;
use MailPoet\Tasks\Sending as SendingTask;
class WordPressTest extends \MailPoetTest {
function _before() {
@ -103,7 +105,7 @@ class WordPressTest extends \MailPoetTest {
}
function _addQueue($status) {
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->hydrate(
array(
'newsletter_id' => 1,
@ -118,6 +120,7 @@ class WordPressTest extends \MailPoetTest {
function _after() {
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}

View File

@ -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,9 +372,9 @@ 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
@ -435,9 +438,9 @@ 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)
@ -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);

View File

@ -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);
}
@ -632,6 +602,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);

View File

@ -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);

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Models;
use MailPoet\Models\Newsletter;
use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\NewsletterOptionField;
@ -12,6 +13,7 @@ use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Util\Security;
use MailPoet\Tasks\Sending as SendingTask;
class NewsletterTest extends \MailPoetTest {
function _before() {
@ -37,7 +39,7 @@ class NewsletterTest extends \MailPoetTest {
$association->segment_id = $this->segment_2->id;
$association->save();
$this->sending_queue = SendingQueue::create();
$this->sending_queue = SendingTask::create();
$this->sending_queue->newsletter_id = $this->newsletter->id;
$this->sending_queue->save();
}
@ -97,7 +99,7 @@ class NewsletterTest extends \MailPoetTest {
function testItCanBeQueued() {
$queue = $this->newsletter->getQueue();
expect($queue->id() > 0)->true();
expect($queue->id > 0)->true();
expect($queue->newsletter_id)->equals($this->newsletter->id);
}
@ -303,7 +305,7 @@ class NewsletterTest extends \MailPoetTest {
'type' => $types[$i]
)
);
$sending_queues[$i] = SendingQueue::create();
$sending_queues[$i] = SendingTask::create();
$sending_queues[$i]->newsletter_id = $newsletters[$i]->id;
$sending_queues[$i]->status = SendingQueue::STATUS_COMPLETED;
$sending_queues[$i]->save();
@ -345,7 +347,7 @@ class NewsletterTest extends \MailPoetTest {
'type' => $types[$i]
)
);
$sending_queues[$i] = SendingQueue::create();
$sending_queues[$i] = SendingTask::create();
$sending_queues[$i]->newsletter_id = $newsletters[$i]->id;
$sending_queues[$i]->status = SendingQueue::STATUS_COMPLETED;
$sending_queues[$i]->save();
@ -436,7 +438,7 @@ class NewsletterTest extends \MailPoetTest {
// create multiple sending queues
for($i = 1; $i <= 5; $i++) {
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
}
@ -464,7 +466,7 @@ class NewsletterTest extends \MailPoetTest {
'parent_id' => $parent_newsletter->id
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
$newsletter_segment = NewsletterSegment::create();
@ -490,7 +492,7 @@ class NewsletterTest extends \MailPoetTest {
// create multiple sending queues
$newsletter = $this->newsletter;
for($i = 1; $i <= 5; $i++) {
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
}
@ -513,7 +515,7 @@ class NewsletterTest extends \MailPoetTest {
'parent_id' => $parent_newsletter->id
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
}
@ -532,7 +534,7 @@ class NewsletterTest extends \MailPoetTest {
// create multiple sending queues
$newsletter = $this->newsletter;
for($i = 1; $i <= 5; $i++) {
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->deleted_at = date('Y-m-d H:i:s');
$sending_queue->save();
@ -564,7 +566,7 @@ class NewsletterTest extends \MailPoetTest {
'deleted_at' => date('Y-m-d H:i:s')
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->deleted_at = date('Y-m-d H:i:s');
$sending_queue->save();
@ -589,7 +591,7 @@ class NewsletterTest extends \MailPoetTest {
'type' => Newsletter::TYPE_STANDARD
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
}
@ -613,7 +615,7 @@ class NewsletterTest extends \MailPoetTest {
'parent_id' => $this->newsletter->id,
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
}
@ -637,7 +639,7 @@ class NewsletterTest extends \MailPoetTest {
'deleted_at' => date('Y-m-d H:i:s')
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->deleted_at = date('Y-m-d H:i:s');
$sending_queue->save();
@ -663,7 +665,7 @@ class NewsletterTest extends \MailPoetTest {
'deleted_at' => date('Y-m-d H:i:s')
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->deleted_at = date('Y-m-d H:i:s');
$sending_queue->save();
@ -687,7 +689,7 @@ class NewsletterTest extends \MailPoetTest {
'type' => Newsletter::TYPE_STANDARD
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
$newsletter_segment = NewsletterSegment::create();
@ -719,7 +721,7 @@ class NewsletterTest extends \MailPoetTest {
'parent_id' => $this->newsletter->id
)
);
$sending_queue = SendingQueue::create();
$sending_queue = SendingTask::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
$newsletter_segment = NewsletterSegment::create();
@ -769,6 +771,7 @@ class NewsletterTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsOpens::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsClicks::$_table);

View File

@ -9,6 +9,7 @@ use MailPoet\Util\Helpers;
class SendingQueueTest extends \MailPoetTest {
function _before() {
$this->queue = SendingQueue::create();
$this->queue->task_id = 0;
$this->queue->newsletter_id = 1;
$this->queue->save();
@ -64,6 +65,7 @@ class SendingQueueTest extends \MailPoetTest {
'html' => 'html',
'text' => 'text'
);
$queue->task_id = 0;
$queue->newsletter_id = 1;
$queue->newsletter_rendered_body = $data;
$queue->save();

View File

@ -8,6 +8,7 @@ use MailPoet\Models\CustomField;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Setting;
@ -473,8 +474,8 @@ class SubscriberTest extends \MailPoetTest {
$subscriber = Subscriber::subscribe($this->data, array($segment->id()));
expect($subscriber->id() > 0)->equals(true);
expect($subscriber->segments()->count())->equals(1);
$scheduled_notification = SendingQueue::where('newsletter_id', $newsletter->id)
->where('status', SendingQueue::STATUS_SCHEDULED)
$scheduled_notification = SendingQueue::findTaskByNewsletterId($newsletter->id)
->where('tasks.status', SendingQueue::STATUS_SCHEDULED)
->findOne();
expect($scheduled_notification)->notEmpty();
}
@ -520,10 +521,10 @@ class SubscriberTest extends \MailPoetTest {
$subscriber = Subscriber::subscribe($this->data, array($segment->id()));
expect($subscriber->id() > 0)->equals(true);
expect($subscriber->segments()->count())->equals(1);
$scheduled_notification = SendingQueue::where('newsletter_id', $newsletter->id)
->where('status', SendingQueue::STATUS_SCHEDULED)
$scheduled_notification = SendingQueue::findTaskByNewsletterId($newsletter->id)
->where('tasks.status', SendingQueue::STATUS_SCHEDULED)
->findOne();
expect($scheduled_notification)->notEmpty();
expect($scheduled_notification)->isEmpty();
}
function testItCannotSubscribeWithReservedColumns() {
@ -1151,12 +1152,16 @@ class SubscriberTest extends \MailPoetTest {
function _after() {
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . CustomField::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberCustomField::$_table);
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
}
}

View File

@ -6,8 +6,10 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterPost;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Tasks\Sending as SendingTask;
class SchedulerTest extends \MailPoetTest {
function testItSetsConstants() {
@ -79,9 +81,9 @@ class SchedulerTest extends \MailPoetTest {
'afterTimeType' => 'hours'
);
$existing_subscriber = 678;
$existing_queue = SendingQueue::create();
$existing_queue = SendingTask::create();
$existing_queue->newsletter_id = $newsletter->id;
$existing_queue->subscribers = array('to_process' => array($existing_subscriber));
$existing_queue->setSubscribers(array($existing_subscriber));
$existing_queue->save();
// queue is not scheduled
@ -102,7 +104,7 @@ class SchedulerTest extends \MailPoetTest {
// queue is scheduled delivery in 2 hours
$newsletter->afterTimeType = 'hours';
Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
$queue = SendingQueue::where('newsletter_id', 1)
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
expect($queue->id)->greaterOrEquals(1);
@ -115,7 +117,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter->afterTimeType = 'days';
Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$queue = SendingQueue::where('newsletter_id', 1)
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
expect($queue->id)->greaterOrEquals(1);
expect($queue->priority)->equals(SendingQueue::PRIORITY_HIGH);
@ -127,7 +129,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter->afterTimeType = 'weeks';
Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$queue = SendingQueue::where('newsletter_id', 1)
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
expect($queue->id)->greaterOrEquals(1);
expect($queue->priority)->equals(SendingQueue::PRIORITY_HIGH);
@ -139,7 +141,7 @@ class SchedulerTest extends \MailPoetTest {
$newsletter->afterTimeType = null;
Scheduler::createWelcomeNotificationQueue($newsletter, $subscriber_id = 1);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$queue = SendingQueue::where('newsletter_id', 1)
$queue = SendingQueue::findTaskByNewsletterId(1)
->findOne();
expect($queue->id)->greaterOrEquals(1);
expect($queue->priority)->equals(SendingQueue::PRIORITY_HIGH);
@ -156,7 +158,7 @@ class SchedulerTest extends \MailPoetTest {
// queue is not created when notification was already sent for the post
Scheduler::schedulePostNotification($post_id = 10);
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect($queue)->false();
}
@ -177,7 +179,7 @@ class SchedulerTest extends \MailPoetTest {
$next_run_date = ($current_time->hour < 5) ?
$current_time :
$current_time->addDay();
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect($queue->scheduled_at)->equals($next_run_date->format('Y-m-d 05:00:00'));
}
@ -191,7 +193,7 @@ class SchedulerTest extends \MailPoetTest {
);
// queue is not created
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect($queue)->false();
}
@ -219,7 +221,7 @@ class SchedulerTest extends \MailPoetTest {
)
);
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addDay()->format('Y-m-d H:i'));
@ -263,7 +265,7 @@ class SchedulerTest extends \MailPoetTest {
);
// queue is not created
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect($queue)->false();
}
@ -286,7 +288,7 @@ class SchedulerTest extends \MailPoetTest {
);
// queue is not created
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect($queue)->false();
}
@ -310,7 +312,7 @@ class SchedulerTest extends \MailPoetTest {
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
// queue is created and scheduled for delivery one day later
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addDay()->format('Y-m-d H:i'));
@ -335,7 +337,7 @@ class SchedulerTest extends \MailPoetTest {
$current_time = Carbon::createFromTimestamp(current_time('timestamp'));
// queue is created and scheduled for delivery one day later
$queue = SendingQueue::where('newsletter_id', $newsletter->id)
$queue = SendingQueue::findTaskByNewsletterId($newsletter->id)
->findOne();
expect(Carbon::parse($queue->scheduled_at)->format('Y-m-d H:i'))
->equals($current_time->addDay()->format('Y-m-d H:i'));
@ -439,7 +441,7 @@ class SchedulerTest extends \MailPoetTest {
$scheduled_at = null,
$status = SendingQueue::STATUS_SCHEDULED
) {
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->status = $status;
$queue->newsletter_id = $newsletter_id;
$queue->scheduled_at = $scheduled_at;
@ -482,6 +484,7 @@ class SchedulerTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterPost::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}

View File

@ -3,12 +3,14 @@ namespace MailPoet\Test\Newsletter;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Newsletter\ViewInBrowser;
use MailPoet\Router\Router;
use MailPoet\Tasks\Sending as SendingTask;
class ViewInBrowserTest extends \MailPoetTest {
function _before() {
@ -80,10 +82,10 @@ class ViewInBrowserTest extends \MailPoetTest {
$subscriber->last_name = 'Last';
$this->subscriber = $subscriber->save();
// create queue
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_without_tracking;
$queue->subscribers = array('processed' => array($subscriber->id));
$queue->setSubscribers(array($subscriber->id));
$this->queue = $queue->save();
// create newsletter link associations
$newsletter_link_1 = NewsletterLink::create();
@ -177,6 +179,7 @@ class ViewInBrowserTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}

View File

@ -3,9 +3,12 @@ namespace MailPoet\Test\Router\Endpoints;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Router\Endpoints\Track;
use MailPoet\Tasks\Sending as SendingTask;
class TrackTest extends \MailPoetTest {
function _before() {
@ -20,9 +23,10 @@ class TrackTest extends \MailPoetTest {
$subscriber->last_name = 'Last';
$this->subscriber = $subscriber->save();
// create queue
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->subscribers = array('processed' => array($subscriber->id));
$queue->setSubscribers(array($subscriber->id));
$queue->updateProcessedSubscribers(array($subscriber->id));
$this->queue = $queue->save();
// create link
$link = NewsletterLink::create();
@ -127,10 +131,10 @@ class TrackTest extends \MailPoetTest {
$newsletter = Newsletter::create();
$newsletter->type = 'type';
$newsletter = $newsletter->save();
$queue = SendingQueue::create();
$queue->id = 123;
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->subscribers = array('processed' => array($this->subscriber->id));
$queue->setSubscribers(array($this->subscriber->id));
$queue->updateProcessedSubscribers(array($this->subscriber->id));
$queue->save();
$track_data = $this->track_data;
$track_data['queue_id'] = $queue->id;
@ -155,6 +159,9 @@ class TrackTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}

View File

@ -5,9 +5,11 @@ namespace MailPoet\Test\Router\Endpoints;
use Codeception\Util\Stub;
use MailPoet\Config\AccessControl;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Router\Endpoints\ViewInBrowser;
use MailPoet\Tasks\Sending as SendingTask;
class ViewInBrowserTest extends \MailPoetTest {
function _before() {
@ -22,9 +24,10 @@ class ViewInBrowserTest extends \MailPoetTest {
$subscriber->last_name = 'Last';
$this->subscriber = $subscriber->save();
// create queue
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->subscribers = array('processed' => array($subscriber->id));
$queue->setSubscribers(array($subscriber->id));
$queue->updateProcessedSubscribers(array($subscriber->id));
$this->queue = $queue->save();
// build browser preview data
$this->browser_preview_data = array(
@ -118,7 +121,8 @@ class ViewInBrowserTest extends \MailPoetTest {
$result = $this->view_in_browser->_validateBrowserPreviewData($data);
expect($result)->notEmpty();
$queue = $this->queue;
$queue->subscribers = array('processed' => array());
$queue->setSubscribers(array());
$queue->updateProcessedSubscribers(array());
$queue->save();
$result = $this->view_in_browser->_validateBrowserPreviewData($data);
expect($result)->false();
@ -205,6 +209,7 @@ class ViewInBrowserTest extends \MailPoetTest {
function _after() {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
// reset WP user role
$wp_user = wp_get_current_user();

View File

@ -4,11 +4,13 @@ namespace MailPoet\Test\Statistics\Track;
use Codeception\Util\Stub;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\Subscriber;
use MailPoet\Statistics\Track\Clicks;
use MailPoet\Tasks\Sending as SendingTask;
class ClicksTest extends \MailPoetTest {
function _before() {
@ -23,9 +25,10 @@ class ClicksTest extends \MailPoetTest {
$subscriber->last_name = 'Last';
$this->subscriber = $subscriber->save();
// create queue
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->subscribers = array('processed' => array($subscriber->id));
$queue->setSubscribers(array($subscriber->id));
$queue->updateProcessedSubscribers(array($subscriber->id));
$this->queue = $queue->save();
// create link
$link = NewsletterLink::create();
@ -151,6 +154,7 @@ class ClicksTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsOpens::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsClicks::$_table);

View File

@ -3,10 +3,12 @@ namespace MailPoet\Test\Statistics\Track;
use Codeception\Util\Stub;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\Subscriber;
use MailPoet\Statistics\Track\Opens;
use MailPoet\Tasks\Sending as SendingTask;
class OpensTest extends \MailPoetTest {
function _before() {
@ -21,9 +23,10 @@ class OpensTest extends \MailPoetTest {
$subscriber->last_name = 'Last';
$this->subscriber = $subscriber->save();
// create queue
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->subscribers = array('processed' => array($subscriber->id));
$queue->setSubscribers(array($subscriber->id));
$queue->updateProcessedSubscribers(array($subscriber->id));
$this->queue = $queue->save();
// build track data
$this->track_data = (object)array(
@ -88,6 +91,7 @@ class OpensTest extends \MailPoetTest {
function _after() {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . StatisticsOpens::$_table);
}

View File

@ -2,10 +2,12 @@
namespace MailPoet\Test\Statistics\Track;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsUnsubscribes;
use MailPoet\Models\Subscriber;
use MailPoet\Statistics\Track\Unsubscribes;
use MailPoet\Tasks\Sending as SendingTask;
class UnsubscribesTest extends \MailPoetTest {
function _before() {
@ -20,9 +22,10 @@ class UnsubscribesTest extends \MailPoetTest {
$subscriber->last_name = 'Last';
$this->subscriber = $subscriber->save();
// create queue
$queue = SendingQueue::create();
$queue = SendingTask::create();
$queue->newsletter_id = $newsletter->id;
$queue->subscribers = array('processed' => array($subscriber->id));
$queue->setSubscribers(array($subscriber->id));
$queue->updateProcessedSubscribers(array($subscriber->id));
$this->queue = $queue->save();
// instantiate class
$this->unsubscribes = new Unsubscribes();

View File

@ -5,6 +5,7 @@ use Codeception\Util\Fixtures;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
@ -83,14 +84,15 @@ class PagesTest extends \MailPoetTest {
// confirm subscription and ensure that welcome email is scheduled
$this->subscription->confirm();
$scheduled_notification = SendingQueue::where('newsletter_id', $newsletter->id)
->where('status', SendingQueue::STATUS_SCHEDULED)
$scheduled_notification = SendingQueue::findTaskByNewsletterId($newsletter->id)
->where('tasks.status', SendingQueue::STATUS_SCHEDULED)
->findOne();
expect($scheduled_notification)->notEmpty();
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);