Refactor Cron to use logger_factory instance
[MAILPOET-2444]
This commit is contained in:
committed by
Jack Kitterhing
parent
9fbaa92c9b
commit
e4262b0a6d
@@ -7,6 +7,7 @@ use Codeception\Stub;
|
||||
use Codeception\Stub\Expected;
|
||||
use MailPoet\Cron\CronHelper;
|
||||
use MailPoet\Cron\Workers\Scheduler;
|
||||
use MailPoet\Logging\LoggerFactory;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\NewsletterOption;
|
||||
use MailPoet\Models\NewsletterOptionField;
|
||||
@@ -23,17 +24,25 @@ use MailPoet\Segments\SubscribersFinder;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
|
||||
class SchedulerTest extends \MailPoetTest {
|
||||
/** @var LoggerFactory */
|
||||
private $logger_factory;
|
||||
|
||||
function _before() {
|
||||
parent::_before();
|
||||
$this->logger_factory = LoggerFactory::getInstance();
|
||||
}
|
||||
|
||||
function testItConstructs() {
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
expect($scheduler->timer)->greaterOrEquals(5);
|
||||
$timer = microtime(true) - 2;
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $timer);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory, $timer);
|
||||
expect($scheduler->timer)->equals($timer);
|
||||
}
|
||||
|
||||
function testItThrowsExceptionWhenExecutionLimitIsReached() {
|
||||
try {
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), microtime(true) - CronHelper::getDaemonExecutionLimit());
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory, microtime(true) - CronHelper::getDaemonExecutionLimit());
|
||||
self::fail('Maximum execution time limit exception was not thrown.');
|
||||
} catch (\Exception $e) {
|
||||
expect($e->getMessage())->equals('Maximum execution time has been reached.');
|
||||
@@ -62,7 +71,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
expect($notification_history)->isEmpty();
|
||||
|
||||
// create notification history and ensure that it exists
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$scheduler->createNotificationHistory($newsletter->id);
|
||||
$notification_history = Newsletter::where('type', Newsletter::TYPE_NOTIFICATION_HISTORY)
|
||||
->where('parent_id', $newsletter->id)
|
||||
@@ -78,7 +87,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// queue and associated newsletter should be deleted when interval type is set to "immediately"
|
||||
expect(SendingQueue::findMany())->notEmpty();
|
||||
@@ -94,7 +103,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// queue's next run date should change when interval type is set to anything
|
||||
// other than "immediately"
|
||||
@@ -124,7 +133,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return false and delete queue when subscriber is not a WP user
|
||||
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -147,7 +156,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return false and delete queue when subscriber role is different from the one
|
||||
// specified for the welcome email
|
||||
@@ -169,7 +178,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return true when user exists and WP role matches the one specified for the welcome email
|
||||
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -190,7 +199,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// true when user exists and has any role
|
||||
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -204,7 +213,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$queue->setSubscribers([]);
|
||||
|
||||
// delete queue when the list of subscribers to process is blank
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$result = $scheduler->processWelcomeNewsletter($newsletter, $queue);
|
||||
expect($result)->false();
|
||||
expect(SendingQueue::findMany())->count(0);
|
||||
@@ -274,7 +283,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
function testItFailsMailpoetSubscriberVerificationWhenSubscriberDoesNotExist() {
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$newsletter = $this->_createNewsletter();
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
|
||||
@@ -294,7 +303,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return false
|
||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -319,7 +328,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return false
|
||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -348,7 +357,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return false
|
||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -371,7 +380,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
|
||||
// return true after successful verification
|
||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||
@@ -393,7 +402,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||
->findOne($newsletter->id);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$scheduler = new Scheduler(new SubscribersFinder());
|
||||
$scheduler = new Scheduler(new SubscribersFinder(), $this->logger_factory);
|
||||
|
||||
// return true
|
||||
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
|
||||
@@ -417,6 +426,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
|
||||
return false;
|
||||
}),
|
||||
'logger_factory' => $this->logger_factory,
|
||||
], $this);
|
||||
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->false();
|
||||
}
|
||||
@@ -428,7 +438,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter_segment = $this->_createNewsletterSegment($newsletter->id, $segment->id);
|
||||
|
||||
// delete or reschedule queue when there are no subscribers in segments
|
||||
$scheduler = $this->construct(Scheduler::class, [new SubscribersFinder()], [
|
||||
$scheduler = $this->construct(Scheduler::class, [new SubscribersFinder(), $this->logger_factory], [
|
||||
'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
|
||||
return false;
|
||||
}),
|
||||
@@ -451,7 +461,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
);
|
||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||
->findOne($newsletter->id);
|
||||
$scheduler = new Scheduler(new SubscribersFinder());
|
||||
$scheduler = new Scheduler(new SubscribersFinder(), $this->logger_factory);
|
||||
|
||||
// return true
|
||||
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true();
|
||||
@@ -472,7 +482,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
function testItFailsToProcessWhenScheduledQueuesNotFound() {
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
expect($scheduler->process())->false();
|
||||
}
|
||||
|
||||
@@ -480,7 +490,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$queue = $this->_createQueue(1);
|
||||
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
$queue->save();
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$scheduler->process();
|
||||
expect(SendingQueue::findMany())->count(0);
|
||||
}
|
||||
@@ -492,7 +502,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
$queue->save();
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$scheduler->process();
|
||||
expect(SendingQueue::findMany())->count(0);
|
||||
}
|
||||
@@ -587,7 +597,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||
$scheduler = new Scheduler($finder);
|
||||
$scheduler = new Scheduler($finder, $this->logger_factory);
|
||||
|
||||
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||
$refetched_task = ScheduledTask::where('id', $task->id)->findOne();
|
||||
@@ -603,7 +613,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||
$queue = $this->_createQueue($newsletter->id);
|
||||
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||
$scheduler = new Scheduler($finder);
|
||||
$scheduler = new Scheduler($finder, $this->logger_factory);
|
||||
|
||||
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||
$refetched_task = ScheduledTask::where('id', $task->id)->findOne();
|
||||
@@ -641,7 +651,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
expect($task->getSubscribers())->equals([$subscriber->id]);
|
||||
|
||||
// task should have its status set to null (i.e., sending)
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$scheduler->process();
|
||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||
expect($task->status)->null();
|
||||
@@ -665,7 +675,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
expect($task->getSubscribers())->equals([$subscriber->id]);
|
||||
|
||||
// task should be deleted
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$scheduler->process();
|
||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||
expect($task)->false();
|
||||
@@ -693,7 +703,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
expect($task->newsletter_id)->equals($newsletter->id);
|
||||
|
||||
// task should have its status set to null (i.e., sending)
|
||||
$scheduler = new Scheduler(new SubscribersFinder());
|
||||
$scheduler = new Scheduler(new SubscribersFinder(), $this->logger_factory);
|
||||
$scheduler->process();
|
||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||
expect($task->status)->null();
|
||||
@@ -710,7 +720,7 @@ class SchedulerTest extends \MailPoetTest {
|
||||
$queue->scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
|
||||
$queue->updated_at = $originalUpdated;
|
||||
$queue->save();
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class));
|
||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->logger_factory);
|
||||
$scheduler->timer = microtime(true);
|
||||
$scheduler->process();
|
||||
$newQueue = ScheduledTask::findOne($queue->task_id);
|
||||
|
Reference in New Issue
Block a user