Refactor Cron to use logger_factory instance

[MAILPOET-2444]
This commit is contained in:
Rostislav Wolny
2019-10-08 11:18:51 +02:00
committed by Jack Kitterhing
parent 9fbaa92c9b
commit e4262b0a6d
8 changed files with 130 additions and 57 deletions

View File

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