Make Scheduler non-static
[MAILPOET-4252]
This commit is contained in:
@ -79,6 +79,9 @@ class Newsletters extends APIEndpoint {
|
|||||||
/** @var TrackingConfig */
|
/** @var TrackingConfig */
|
||||||
private $trackingConfig;
|
private $trackingConfig;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
Listing\Handler $listingHandler,
|
Listing\Handler $listingHandler,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
@ -93,7 +96,8 @@ class Newsletters extends APIEndpoint {
|
|||||||
SendPreviewController $sendPreviewController,
|
SendPreviewController $sendPreviewController,
|
||||||
NewsletterSaveController $newsletterSaveController,
|
NewsletterSaveController $newsletterSaveController,
|
||||||
NewsletterUrl $newsletterUrl,
|
NewsletterUrl $newsletterUrl,
|
||||||
TrackingConfig $trackingConfig
|
TrackingConfig $trackingConfig,
|
||||||
|
Scheduler $scheduler
|
||||||
) {
|
) {
|
||||||
$this->listingHandler = $listingHandler;
|
$this->listingHandler = $listingHandler;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
@ -109,6 +113,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
$this->newsletterSaveController = $newsletterSaveController;
|
$this->newsletterSaveController = $newsletterSaveController;
|
||||||
$this->newsletterUrl = $newsletterUrl;
|
$this->newsletterUrl = $newsletterUrl;
|
||||||
$this->trackingConfig = $trackingConfig;
|
$this->trackingConfig = $trackingConfig;
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get($data = []) {
|
public function get($data = []) {
|
||||||
@ -212,7 +217,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
APIError::BAD_REQUEST => __('This email has incorrect state.', 'mailpoet'),
|
APIError::BAD_REQUEST => __('This email has incorrect state.', 'mailpoet'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
$nextRunDate = Scheduler::getNextRunDate($scheduleOption->getValue());
|
$nextRunDate = $this->scheduler->getNextRunDate($scheduleOption->getValue());
|
||||||
$queues = $newsletter->getQueues();
|
$queues = $newsletter->getQueues();
|
||||||
foreach ($queues as $queue) {
|
foreach ($queues as $queue) {
|
||||||
$task = $queue->getTask();
|
$task = $queue->getTask();
|
||||||
|
@ -48,6 +48,9 @@ class SendingQueue extends APIEndpoint {
|
|||||||
/** @var MailerFactory */
|
/** @var MailerFactory */
|
||||||
private $mailerFactory;
|
private $mailerFactory;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SubscribersFeature $subscribersFeature,
|
SubscribersFeature $subscribersFeature,
|
||||||
NewslettersRepository $newsletterRepository,
|
NewslettersRepository $newsletterRepository,
|
||||||
@ -55,7 +58,8 @@ class SendingQueue extends APIEndpoint {
|
|||||||
Bridge $bridge,
|
Bridge $bridge,
|
||||||
SubscribersFinder $subscribersFinder,
|
SubscribersFinder $subscribersFinder,
|
||||||
ScheduledTasksRepository $scheduledTasksRepository,
|
ScheduledTasksRepository $scheduledTasksRepository,
|
||||||
MailerFactory $mailerFactory
|
MailerFactory $mailerFactory,
|
||||||
|
Scheduler $scheduler
|
||||||
) {
|
) {
|
||||||
$this->subscribersFeature = $subscribersFeature;
|
$this->subscribersFeature = $subscribersFeature;
|
||||||
$this->subscribersFinder = $subscribersFinder;
|
$this->subscribersFinder = $subscribersFinder;
|
||||||
@ -64,6 +68,7 @@ class SendingQueue extends APIEndpoint {
|
|||||||
$this->sendingQueuesRepository = $sendingQueuesRepository;
|
$this->sendingQueuesRepository = $sendingQueuesRepository;
|
||||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||||
$this->mailerFactory = $mailerFactory;
|
$this->mailerFactory = $mailerFactory;
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add($data = []) {
|
public function add($data = []) {
|
||||||
@ -138,7 +143,7 @@ class SendingQueue extends APIEndpoint {
|
|||||||
|
|
||||||
// set queue status
|
// set queue status
|
||||||
$queue->status = SendingQueueModel::STATUS_SCHEDULED;
|
$queue->status = SendingQueueModel::STATUS_SCHEDULED;
|
||||||
$queue->scheduledAt = Scheduler::formatDatetimeString($newsletterEntity->getOptionValue('scheduledAt'));
|
$queue->scheduledAt = $this->scheduler->formatDatetimeString($newsletterEntity->getOptionValue('scheduledAt'));
|
||||||
} else {
|
} else {
|
||||||
$segments = $newsletterEntity->getSegmentIds();
|
$segments = $newsletterEntity->getSegmentIds();
|
||||||
$taskModel = $queue->task();
|
$taskModel = $queue->task();
|
||||||
|
@ -38,7 +38,7 @@ class FirstPurchase {
|
|||||||
$helper = new WCHelper();
|
$helper = new WCHelper();
|
||||||
}
|
}
|
||||||
$this->helper = $helper;
|
$this->helper = $helper;
|
||||||
$this->scheduler = new AutomaticEmailScheduler();
|
$this->scheduler = ContainerWrapper::getInstance()->get(AutomaticEmailScheduler::class);
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
$this->repository = ContainerWrapper::getInstance()->get(AutomaticEmailsRepository::class);
|
$this->repository = ContainerWrapper::getInstance()->get(AutomaticEmailsRepository::class);
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ class PurchasedInCategory {
|
|||||||
$woocommerceHelper = new WCHelper();
|
$woocommerceHelper = new WCHelper();
|
||||||
}
|
}
|
||||||
$this->woocommerceHelper = $woocommerceHelper;
|
$this->woocommerceHelper = $woocommerceHelper;
|
||||||
$this->scheduler = new AutomaticEmailScheduler();
|
$this->scheduler = ContainerWrapper::getInstance()->get(AutomaticEmailScheduler::class);
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
$this->repository = ContainerWrapper::getInstance()->get(AutomaticEmailsRepository::class);
|
$this->repository = ContainerWrapper::getInstance()->get(AutomaticEmailsRepository::class);
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ class PurchasedProduct {
|
|||||||
$helper = new WCHelper();
|
$helper = new WCHelper();
|
||||||
}
|
}
|
||||||
$this->helper = $helper;
|
$this->helper = $helper;
|
||||||
$this->scheduler = new AutomaticEmailScheduler();
|
$this->scheduler = ContainerWrapper::getInstance()->get(AutomaticEmailScheduler::class);
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
$this->repository = ContainerWrapper::getInstance()->get(AutomaticEmailsRepository::class);
|
$this->repository = ContainerWrapper::getInstance()->get(AutomaticEmailsRepository::class);
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,9 @@ class Scheduler {
|
|||||||
/** @var SegmentsRepository */
|
/** @var SegmentsRepository */
|
||||||
private $segmentsRepository;
|
private $segmentsRepository;
|
||||||
|
|
||||||
|
/** @var NewsletterScheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SubscribersFinder $subscribersFinder,
|
SubscribersFinder $subscribersFinder,
|
||||||
LoggerFactory $loggerFactory,
|
LoggerFactory $loggerFactory,
|
||||||
@ -52,7 +55,8 @@ class Scheduler {
|
|||||||
CronWorkerScheduler $cronWorkerScheduler,
|
CronWorkerScheduler $cronWorkerScheduler,
|
||||||
ScheduledTasksRepository $scheduledTasksRepository,
|
ScheduledTasksRepository $scheduledTasksRepository,
|
||||||
NewslettersRepository $newslettersRepository,
|
NewslettersRepository $newslettersRepository,
|
||||||
SegmentsRepository $segmentsRepository
|
SegmentsRepository $segmentsRepository,
|
||||||
|
NewsletterScheduler $scheduler
|
||||||
) {
|
) {
|
||||||
$this->cronHelper = $cronHelper;
|
$this->cronHelper = $cronHelper;
|
||||||
$this->subscribersFinder = $subscribersFinder;
|
$this->subscribersFinder = $subscribersFinder;
|
||||||
@ -61,6 +65,7 @@ class Scheduler {
|
|||||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||||
$this->newslettersRepository = $newslettersRepository;
|
$this->newslettersRepository = $newslettersRepository;
|
||||||
$this->segmentsRepository = $segmentsRepository;
|
$this->segmentsRepository = $segmentsRepository;
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function process($timer = false) {
|
public function process($timer = false) {
|
||||||
@ -291,7 +296,7 @@ class Scheduler {
|
|||||||
$queue->delete();
|
$queue->delete();
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
$nextRunDate = NewsletterScheduler::getNextRunDate($newsletter->schedule);
|
$nextRunDate = $this->scheduler->getNextRunDate($newsletter->schedule);
|
||||||
if (!$nextRunDate) {
|
if (!$nextRunDate) {
|
||||||
$queue->delete();
|
$queue->delete();
|
||||||
return;
|
return;
|
||||||
|
@ -445,6 +445,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->register(\MailPoet\Util\CdnAssetUrl::class)
|
$container->register(\MailPoet\Util\CdnAssetUrl::class)
|
||||||
->setPublic(true)
|
->setPublic(true)
|
||||||
->setFactory([__CLASS__, 'getCdnAssetsUrl']);
|
->setFactory([__CLASS__, 'getCdnAssetsUrl']);
|
||||||
|
$container->autowire(\MailPoet\Newsletter\Scheduler\Scheduler::class)->setPublic(true);
|
||||||
// Validator
|
// Validator
|
||||||
$container->autowire(Validator::class)->setPublic(true);
|
$container->autowire(Validator::class)->setPublic(true);
|
||||||
// WooCommerce
|
// WooCommerce
|
||||||
|
@ -71,6 +71,9 @@ class NewsletterSaveController {
|
|||||||
/** @var ApiDataSanitizer */
|
/** @var ApiDataSanitizer */
|
||||||
private $dataSanitizer;
|
private $dataSanitizer;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
AuthorizedEmailsController $authorizedEmailsController,
|
AuthorizedEmailsController $authorizedEmailsController,
|
||||||
Emoji $emoji,
|
Emoji $emoji,
|
||||||
@ -85,7 +88,8 @@ class NewsletterSaveController {
|
|||||||
SettingsController $settings,
|
SettingsController $settings,
|
||||||
Security $security,
|
Security $security,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
ApiDataSanitizer $dataSanitizer
|
ApiDataSanitizer $dataSanitizer,
|
||||||
|
Scheduler $scheduler
|
||||||
) {
|
) {
|
||||||
$this->authorizedEmailsController = $authorizedEmailsController;
|
$this->authorizedEmailsController = $authorizedEmailsController;
|
||||||
$this->emoji = $emoji;
|
$this->emoji = $emoji;
|
||||||
@ -101,6 +105,7 @@ class NewsletterSaveController {
|
|||||||
$this->security = $security;
|
$this->security = $security;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
$this->dataSanitizer = $dataSanitizer;
|
$this->dataSanitizer = $dataSanitizer;
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function save(array $data = []): NewsletterEntity {
|
public function save(array $data = []): NewsletterEntity {
|
||||||
@ -349,7 +354,7 @@ class NewsletterSaveController {
|
|||||||
|
|
||||||
// generate the new schedule from options and get the new "next run" date
|
// generate the new schedule from options and get the new "next run" date
|
||||||
$schedule = $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
|
$schedule = $this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
|
||||||
$nextRunDateString = Scheduler::getNextRunDate($schedule);
|
$nextRunDateString = $this->scheduler->getNextRunDate($schedule);
|
||||||
$nextRunDate = $nextRunDateString ? Carbon::createFromFormat('Y-m-d H:i:s', $nextRunDateString) : null;
|
$nextRunDate = $nextRunDateString ? Carbon::createFromFormat('Y-m-d H:i:s', $nextRunDateString) : null;
|
||||||
if ($nextRunDate === false) {
|
if ($nextRunDate === false) {
|
||||||
throw InvalidStateException::create()->withMessage('Invalid next run date generated');
|
throw InvalidStateException::create()->withMessage('Invalid next run date generated');
|
||||||
|
@ -13,14 +13,19 @@ class AutomaticEmailScheduler {
|
|||||||
/** @var WPFunctions|null */
|
/** @var WPFunctions|null */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
|
Scheduler $scheduler,
|
||||||
?WPFunctions $wp = null
|
?WPFunctions $wp = null
|
||||||
) {
|
) {
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scheduleAutomaticEmail($group, $event, $schedulingCondition = false, $subscriberId = false, $meta = false, $metaModifier = null) {
|
public function scheduleAutomaticEmail($group, $event, $schedulingCondition = false, $subscriberId = false, $meta = false, $metaModifier = null) {
|
||||||
$newsletters = Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
$newsletters = $this->scheduler->getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
||||||
if (empty($newsletters)) return false;
|
if (empty($newsletters)) return false;
|
||||||
foreach ($newsletters as $newsletter) {
|
foreach ($newsletters as $newsletter) {
|
||||||
if ($newsletter->event !== $event) continue;
|
if ($newsletter->event !== $event) continue;
|
||||||
@ -42,7 +47,7 @@ class AutomaticEmailScheduler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function scheduleOrRescheduleAutomaticEmail($group, $event, $subscriberId, $meta = false) {
|
public function scheduleOrRescheduleAutomaticEmail($group, $event, $subscriberId, $meta = false) {
|
||||||
$newsletters = Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
$newsletters = $this->scheduler->getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
||||||
if (empty($newsletters)) {
|
if (empty($newsletters)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -63,7 +68,7 @@ class AutomaticEmailScheduler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function rescheduleAutomaticEmail($group, $event, $subscriberId) {
|
public function rescheduleAutomaticEmail($group, $event, $subscriberId) {
|
||||||
$newsletters = Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
$newsletters = $this->scheduler->getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
||||||
if (empty($newsletters)) {
|
if (empty($newsletters)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -82,7 +87,7 @@ class AutomaticEmailScheduler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function cancelAutomaticEmail($group, $event, $subscriberId) {
|
public function cancelAutomaticEmail($group, $event, $subscriberId) {
|
||||||
$newsletters = Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
$newsletters = $this->scheduler->getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
||||||
if (empty($newsletters)) {
|
if (empty($newsletters)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -114,7 +119,7 @@ class AutomaticEmailScheduler {
|
|||||||
$sendingTask->status = SendingQueue::STATUS_SCHEDULED;
|
$sendingTask->status = SendingQueue::STATUS_SCHEDULED;
|
||||||
$sendingTask->priority = SendingQueue::PRIORITY_MEDIUM;
|
$sendingTask->priority = SendingQueue::PRIORITY_MEDIUM;
|
||||||
|
|
||||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber, $this->wp);
|
$sendingTask->scheduledAt = $this->scheduler->getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber, $this->wp);
|
||||||
return $sendingTask->save();
|
return $sendingTask->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +129,7 @@ class AutomaticEmailScheduler {
|
|||||||
$sendingTask->__set('meta', $meta);
|
$sendingTask->__set('meta', $meta);
|
||||||
}
|
}
|
||||||
// compute new 'scheduled_at' from now
|
// compute new 'scheduled_at' from now
|
||||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber, $this->wp);
|
$sendingTask->scheduledAt = $this->scheduler->getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber, $this->wp);
|
||||||
$sendingTask->save();
|
$sendingTask->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,17 +40,22 @@ class PostNotificationScheduler {
|
|||||||
/** @var NewsletterPostsRepository */
|
/** @var NewsletterPostsRepository */
|
||||||
private $newsletterPostsRepository;
|
private $newsletterPostsRepository;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
NewslettersRepository $newslettersRepository,
|
NewslettersRepository $newslettersRepository,
|
||||||
NewsletterOptionsRepository $newsletterOptionsRepository,
|
NewsletterOptionsRepository $newsletterOptionsRepository,
|
||||||
NewsletterOptionFieldsRepository $newsletterOptionFieldsRepository,
|
NewsletterOptionFieldsRepository $newsletterOptionFieldsRepository,
|
||||||
NewsletterPostsRepository $newsletterPostsRepository
|
NewsletterPostsRepository $newsletterPostsRepository,
|
||||||
|
Scheduler $scheduler
|
||||||
) {
|
) {
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
$this->newslettersRepository = $newslettersRepository;
|
$this->newslettersRepository = $newslettersRepository;
|
||||||
$this->newsletterOptionsRepository = $newsletterOptionsRepository;
|
$this->newsletterOptionsRepository = $newsletterOptionsRepository;
|
||||||
$this->newsletterOptionFieldsRepository = $newsletterOptionFieldsRepository;
|
$this->newsletterOptionFieldsRepository = $newsletterOptionFieldsRepository;
|
||||||
$this->newsletterPostsRepository = $newsletterPostsRepository;
|
$this->newsletterPostsRepository = $newsletterPostsRepository;
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function transitionHook($newStatus, $oldStatus, $post) {
|
public function transitionHook($newStatus, $oldStatus, $post) {
|
||||||
@ -100,7 +105,7 @@ class PostNotificationScheduler {
|
|||||||
if (!$scheduleOption) {
|
if (!$scheduleOption) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
$nextRunDate = Scheduler::getNextRunDate($scheduleOption->getValue());
|
$nextRunDate = $this->scheduler->getNextRunDate($scheduleOption->getValue());
|
||||||
if (!$nextRunDate) {
|
if (!$nextRunDate) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,17 @@ use MailPoetVendor\Carbon\Carbon;
|
|||||||
class Scheduler {
|
class Scheduler {
|
||||||
const MYSQL_TIMESTAMP_MAX = '2038-01-19 03:14:07';
|
const MYSQL_TIMESTAMP_MAX = '2038-01-19 03:14:07';
|
||||||
|
|
||||||
public static function getNextRunDate($schedule, $fromTimestamp = false) {
|
/** @var WPFunctions */
|
||||||
$wp = new WPFunctions();
|
private $wp;
|
||||||
$fromTimestamp = ($fromTimestamp) ? $fromTimestamp : $wp->currentTime('timestamp');
|
|
||||||
|
public function __construct(
|
||||||
|
WPFunctions $wp
|
||||||
|
) {
|
||||||
|
$this->wp = $wp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNextRunDate($schedule, $fromTimestamp = false) {
|
||||||
|
$fromTimestamp = ($fromTimestamp) ? $fromTimestamp : $this->wp->currentTime('timestamp');
|
||||||
try {
|
try {
|
||||||
$schedule = \Cron\CronExpression::factory($schedule);
|
$schedule = \Cron\CronExpression::factory($schedule);
|
||||||
$nextRunDate = $schedule->getNextRunDate(Carbon::createFromTimestamp($fromTimestamp))
|
$nextRunDate = $schedule->getNextRunDate(Carbon::createFromTimestamp($fromTimestamp))
|
||||||
@ -22,9 +30,8 @@ class Scheduler {
|
|||||||
return $nextRunDate;
|
return $nextRunDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getPreviousRunDate($schedule, $fromTimestamp = false) {
|
public function getPreviousRunDate($schedule, $fromTimestamp = false) {
|
||||||
$wp = WPFunctions::get();
|
$fromTimestamp = ($fromTimestamp) ? $fromTimestamp : $this->wp->currentTime('timestamp');
|
||||||
$fromTimestamp = ($fromTimestamp) ? $fromTimestamp : $wp->currentTime('timestamp');
|
|
||||||
try {
|
try {
|
||||||
$schedule = \Cron\CronExpression::factory($schedule);
|
$schedule = \Cron\CronExpression::factory($schedule);
|
||||||
$previousRunDate = $schedule->getPreviousRunDate(Carbon::createFromTimestamp($fromTimestamp))
|
$previousRunDate = $schedule->getPreviousRunDate(Carbon::createFromTimestamp($fromTimestamp))
|
||||||
@ -35,8 +42,8 @@ class Scheduler {
|
|||||||
return $previousRunDate;
|
return $previousRunDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getScheduledTimeWithDelay($afterTimeType, $afterTimeNumber, $wp = null): Carbon {
|
public function getScheduledTimeWithDelay($afterTimeType, $afterTimeNumber, $wp = null): Carbon {
|
||||||
$wp = $wp ?? WPFunctions::get();
|
$wp = $wp ?? $this->wp;
|
||||||
$currentTime = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
$currentTime = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||||
switch ($afterTimeType) {
|
switch ($afterTimeType) {
|
||||||
case 'minutes':
|
case 'minutes':
|
||||||
@ -59,7 +66,7 @@ class Scheduler {
|
|||||||
return $currentTime;
|
return $currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getNewsletters($type, $group = false) {
|
public function getNewsletters($type, $group = false) {
|
||||||
return Newsletter::getPublished()
|
return Newsletter::getPublished()
|
||||||
->filter('filterType', $type, $group)
|
->filter('filterType', $type, $group)
|
||||||
->filter('filterStatus', Newsletter::STATUS_ACTIVE)
|
->filter('filterStatus', Newsletter::STATUS_ACTIVE)
|
||||||
@ -67,7 +74,7 @@ class Scheduler {
|
|||||||
->findMany();
|
->findMany();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function formatDatetimeString($datetimeString) {
|
public function formatDatetimeString($datetimeString) {
|
||||||
return Carbon::parse($datetimeString)->format('Y-m-d H:i:s');
|
return Carbon::parse($datetimeString)->format('Y-m-d H:i:s');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,9 @@ class WelcomeScheduler {
|
|||||||
/** @var ScheduledTasksRepository */
|
/** @var ScheduledTasksRepository */
|
||||||
private $scheduledTasksRepository;
|
private $scheduledTasksRepository;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
/** @var WPFunctions|null */
|
/** @var WPFunctions|null */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
@ -38,12 +41,14 @@ class WelcomeScheduler {
|
|||||||
SegmentsRepository $segmentsRepository,
|
SegmentsRepository $segmentsRepository,
|
||||||
NewslettersRepository $newslettersRepository,
|
NewslettersRepository $newslettersRepository,
|
||||||
ScheduledTasksRepository $scheduledTasksRepository,
|
ScheduledTasksRepository $scheduledTasksRepository,
|
||||||
|
Scheduler $scheduler,
|
||||||
?WPFunctions $wp = null
|
?WPFunctions $wp = null
|
||||||
) {
|
) {
|
||||||
$this->subscribersRepository = $subscribersRepository;
|
$this->subscribersRepository = $subscribersRepository;
|
||||||
$this->segmentsRepository = $segmentsRepository;
|
$this->segmentsRepository = $segmentsRepository;
|
||||||
$this->newslettersRepository = $newslettersRepository;
|
$this->newslettersRepository = $newslettersRepository;
|
||||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||||
|
$this->scheduler = $scheduler;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +126,7 @@ class WelcomeScheduler {
|
|||||||
$sendingTask->setSubscribers([$subscriberId]);
|
$sendingTask->setSubscribers([$subscriberId]);
|
||||||
$sendingTask->status = SendingQueue::STATUS_SCHEDULED;
|
$sendingTask->status = SendingQueue::STATUS_SCHEDULED;
|
||||||
$sendingTask->priority = SendingQueue::PRIORITY_HIGH;
|
$sendingTask->priority = SendingQueue::PRIORITY_HIGH;
|
||||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay(
|
$sendingTask->scheduledAt = $this->scheduler->getScheduledTimeWithDelay(
|
||||||
$newsletter->getOptionValue(NewsletterOptionFieldEntity::NAME_AFTER_TIME_TYPE),
|
$newsletter->getOptionValue(NewsletterOptionFieldEntity::NAME_AFTER_TIME_TYPE),
|
||||||
$newsletter->getOptionValue(NewsletterOptionFieldEntity::NAME_AFTER_TIME_NUMBER),
|
$newsletter->getOptionValue(NewsletterOptionFieldEntity::NAME_AFTER_TIME_NUMBER),
|
||||||
$this->wp
|
$this->wp
|
||||||
|
@ -83,6 +83,9 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
/** @var Url */
|
/** @var Url */
|
||||||
private $newsletterUrl;
|
private $newsletterUrl;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
|
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
|
||||||
@ -93,6 +96,7 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
$this->newsletterSegmentRepository = ContainerWrapper::getInstance()->get(NewsletterSegmentRepository::class);
|
$this->newsletterSegmentRepository = ContainerWrapper::getInstance()->get(NewsletterSegmentRepository::class);
|
||||||
$this->newslettersResponseBuilder = ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class);
|
$this->newslettersResponseBuilder = ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class);
|
||||||
$this->newsletterUrl = ContainerWrapper::getInstance()->get(Url::class);
|
$this->newsletterUrl = ContainerWrapper::getInstance()->get(Url::class);
|
||||||
|
$this->scheduler = ContainerWrapper::getInstance()->get(Scheduler::class);
|
||||||
$this->endpoint = Stub::copy(
|
$this->endpoint = Stub::copy(
|
||||||
ContainerWrapper::getInstance()->get(Newsletters::class),
|
ContainerWrapper::getInstance()->get(Newsletters::class),
|
||||||
[
|
[
|
||||||
@ -286,7 +290,7 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
|
|
||||||
$sendingQueue1 = SendingTask::create();
|
$sendingQueue1 = SendingTask::create();
|
||||||
$sendingQueue1->newsletterId = $this->postNotification->getId();
|
$sendingQueue1->newsletterId = $this->postNotification->getId();
|
||||||
$sendingQueue1->scheduledAt = Scheduler::getPreviousRunDate($schedule);
|
$sendingQueue1->scheduledAt = $this->scheduler->getPreviousRunDate($schedule);
|
||||||
$sendingQueue1->status = SendingQueue::STATUS_SCHEDULED;
|
$sendingQueue1->status = SendingQueue::STATUS_SCHEDULED;
|
||||||
$sendingQueue1->save();
|
$sendingQueue1->save();
|
||||||
$sendingQueue2 = SendingTask::create();
|
$sendingQueue2 = SendingTask::create();
|
||||||
@ -296,7 +300,7 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
$sendingQueue2->save();
|
$sendingQueue2->save();
|
||||||
$sendingQueue3 = SendingTask::create();
|
$sendingQueue3 = SendingTask::create();
|
||||||
$sendingQueue3->newsletterId = $this->postNotification->getId();
|
$sendingQueue3->newsletterId = $this->postNotification->getId();
|
||||||
$sendingQueue3->scheduledAt = Scheduler::getPreviousRunDate($schedule);
|
$sendingQueue3->scheduledAt = $this->scheduler->getPreviousRunDate($schedule);
|
||||||
$sendingQueue3->save();
|
$sendingQueue3->save();
|
||||||
|
|
||||||
$this->entityManager->clear();
|
$this->entityManager->clear();
|
||||||
@ -308,11 +312,11 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
);
|
);
|
||||||
$tasks = ScheduledTask::findMany();
|
$tasks = ScheduledTask::findMany();
|
||||||
// previously scheduled notification is rescheduled for future date
|
// previously scheduled notification is rescheduled for future date
|
||||||
expect($tasks[0]->scheduled_at)->equals(Scheduler::getNextRunDate($schedule));
|
expect($tasks[0]->scheduled_at)->equals($this->scheduler->getNextRunDate($schedule));
|
||||||
// future scheduled notifications are left intact
|
// future scheduled notifications are left intact
|
||||||
expect($tasks[1]->scheduled_at)->equals($randomFutureDate);
|
expect($tasks[1]->scheduled_at)->equals($randomFutureDate);
|
||||||
// previously unscheduled (e.g., sent/sending) notifications are left intact
|
// previously unscheduled (e.g., sent/sending) notifications are left intact
|
||||||
expect($tasks[2]->scheduled_at)->equals(Scheduler::getPreviousRunDate($schedule));
|
expect($tasks[2]->scheduled_at)->equals($this->scheduler->getPreviousRunDate($schedule));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItSchedulesPostNotificationsWhenStatusIsSetBackToActive() {
|
public function testItSchedulesPostNotificationsWhenStatusIsSetBackToActive() {
|
||||||
@ -688,7 +692,8 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
$mocks['sendPreviewController'] ?? $this->diContainer->get(SendPreviewController::class),
|
$mocks['sendPreviewController'] ?? $this->diContainer->get(SendPreviewController::class),
|
||||||
$this->diContainer->get(NewsletterSaveController::class),
|
$this->diContainer->get(NewsletterSaveController::class),
|
||||||
$this->diContainer->get(Url::class),
|
$this->diContainer->get(Url::class),
|
||||||
$this->diContainer->get(TrackingConfig::class)
|
$this->diContainer->get(TrackingConfig::class),
|
||||||
|
$this->scheduler
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ use MailPoet\Mailer\MailerFactory;
|
|||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository;
|
use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository;
|
||||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||||
|
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
use MailPoet\Segments\SubscribersFinder;
|
use MailPoet\Segments\SubscribersFinder;
|
||||||
@ -82,7 +83,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->diContainer->get(Bridge::class),
|
$this->diContainer->get(Bridge::class),
|
||||||
$this->diContainer->get(SubscribersFinder::class),
|
$this->diContainer->get(SubscribersFinder::class),
|
||||||
$this->diContainer->get(ScheduledTasksRepository::class),
|
$this->diContainer->get(ScheduledTasksRepository::class),
|
||||||
$this->diContainer->get(MailerFactory::class)
|
$this->diContainer->get(MailerFactory::class),
|
||||||
|
$this->diContainer->get(Scheduler::class)
|
||||||
);
|
);
|
||||||
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->getId()]);
|
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->getId()]);
|
||||||
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
||||||
@ -152,7 +154,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
]),
|
]),
|
||||||
$this->diContainer->get(SubscribersFinder::class),
|
$this->diContainer->get(SubscribersFinder::class),
|
||||||
$this->diContainer->get(ScheduledTasksRepository::class),
|
$this->diContainer->get(ScheduledTasksRepository::class),
|
||||||
$this->diContainer->get(MailerFactory::class)
|
$this->diContainer->get(MailerFactory::class),
|
||||||
|
$this->diContainer->get(Scheduler::class)
|
||||||
);
|
);
|
||||||
$response = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
$response = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||||
$response = $response->getData();
|
$response = $response->getData();
|
||||||
|
@ -90,7 +90,7 @@ class AbandonedCartTest extends \MailPoetTest {
|
|||||||
$wcHelper,
|
$wcHelper,
|
||||||
$subscriberCookie,
|
$subscriberCookie,
|
||||||
$this->diContainer->get(SubscriberActivityTracker::class),
|
$this->diContainer->get(SubscriberActivityTracker::class),
|
||||||
new AutomaticEmailScheduler($wp)
|
$this->diContainer->get(AutomaticEmailScheduler::class)
|
||||||
);
|
);
|
||||||
$result = $event->getEventDetails();
|
$result = $event->getEventDetails();
|
||||||
expect($result)->notEmpty();
|
expect($result)->notEmpty();
|
||||||
@ -263,12 +263,13 @@ class AbandonedCartTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createAbandonedCartEmail() {
|
private function createAbandonedCartEmail() {
|
||||||
$settings = $this->diContainer->get(SettingsController::class);
|
$settings = $this->diContainer->get(SettingsController::class);
|
||||||
|
$automaticEmailScheduler = $this->diContainer->get(AutomaticEmailScheduler::class);
|
||||||
return $this->make(AbandonedCart::class, [
|
return $this->make(AbandonedCart::class, [
|
||||||
'wp' => $this->wp,
|
'wp' => $this->wp,
|
||||||
'wooCommerceHelper' => $this->wooCommerceHelperMock,
|
'wooCommerceHelper' => $this->wooCommerceHelperMock,
|
||||||
'subscriberCookie' => new SubscriberCookie(new Cookies(), new TrackingConfig($settings)),
|
'subscriberCookie' => new SubscriberCookie(new Cookies(), new TrackingConfig($settings)),
|
||||||
'subscriberActivityTracker' => $this->subscriberActivityTrackerMock,
|
'subscriberActivityTracker' => $this->subscriberActivityTrackerMock,
|
||||||
'scheduler' => new AutomaticEmailScheduler(),
|
'scheduler' => $automaticEmailScheduler,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ use MailPoet\WP\Functions as WPFunctions;
|
|||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
use WP_User;
|
use WP_User;
|
||||||
|
use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler;
|
||||||
|
|
||||||
class SchedulerTest extends \MailPoetTest {
|
class SchedulerTest extends \MailPoetTest {
|
||||||
public $cronHelper;
|
public $cronHelper;
|
||||||
@ -50,6 +51,9 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
/** @var SegmentsRepository */
|
/** @var SegmentsRepository */
|
||||||
private $segmentsRepository;
|
private $segmentsRepository;
|
||||||
|
|
||||||
|
/** @var NewsletterScheduler */
|
||||||
|
private $newsletterScheduler;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
@ -59,11 +63,21 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
|
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||||
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
||||||
$this->segmentsRepository = $this->diContainer->get(SegmentsRepository::class);
|
$this->segmentsRepository = $this->diContainer->get(SegmentsRepository::class);
|
||||||
|
$this->newsletterScheduler = $this->diContainer->get(NewsletterScheduler::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItThrowsExceptionWhenExecutionLimitIsReached() {
|
public function testItThrowsExceptionWhenExecutionLimitIsReached() {
|
||||||
try {
|
try {
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process(microtime(true) - $this->cronHelper->getDaemonExecutionLimit());
|
$scheduler->process(microtime(true) - $this->cronHelper->getDaemonExecutionLimit());
|
||||||
self::fail('Maximum execution time limit exception was not thrown.');
|
self::fail('Maximum execution time limit exception was not thrown.');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@ -93,7 +107,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
expect($notificationHistory)->isEmpty();
|
expect($notificationHistory)->isEmpty();
|
||||||
|
|
||||||
// create notification history and ensure that it exists
|
// create notification history and ensure that it exists
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->createNotificationHistory($newsletter->id);
|
$scheduler->createNotificationHistory($newsletter->id);
|
||||||
$notificationHistory = Newsletter::where('type', Newsletter::TYPE_NOTIFICATION_HISTORY)
|
$notificationHistory = Newsletter::where('type', Newsletter::TYPE_NOTIFICATION_HISTORY)
|
||||||
->where('parent_id', $newsletter->id)
|
->where('parent_id', $newsletter->id)
|
||||||
@ -110,7 +133,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// queue and associated newsletter should be deleted when interval type is set to "immediately"
|
// queue and associated newsletter should be deleted when interval type is set to "immediately"
|
||||||
expect(SendingQueue::findMany())->notEmpty();
|
expect(SendingQueue::findMany())->notEmpty();
|
||||||
@ -128,7 +160,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// queue's next run date should change when interval type is set to anything
|
// queue's next run date should change when interval type is set to anything
|
||||||
// other than "immediately"
|
// other than "immediately"
|
||||||
@ -162,7 +203,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return false and delete queue when subscriber is not a WP user
|
// return false and delete queue when subscriber is not a WP user
|
||||||
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -186,7 +236,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return false and delete queue when subscriber role is different from the one
|
// return false and delete queue when subscriber role is different from the one
|
||||||
// specified for the welcome email
|
// specified for the welcome email
|
||||||
@ -209,7 +268,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return true when user exists and WP role matches the one specified for the welcome email
|
// return true when user exists and WP role matches the one specified for the welcome email
|
||||||
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -231,7 +299,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// true when user exists and has any role
|
// true when user exists and has any role
|
||||||
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyWPSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -245,7 +322,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$queue->setSubscribers([]);
|
$queue->setSubscribers([]);
|
||||||
|
|
||||||
// delete queue when the list of subscribers to process is blank
|
// delete queue when the list of subscribers to process is blank
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$result = $scheduler->processWelcomeNewsletter($newsletter, $queue);
|
$result = $scheduler->processWelcomeNewsletter($newsletter, $queue);
|
||||||
expect($result)->false();
|
expect($result)->false();
|
||||||
expect(SendingQueue::findMany())->count(0);
|
expect(SendingQueue::findMany())->count(0);
|
||||||
@ -319,7 +405,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItFailsMailpoetSubscriberVerificationWhenSubscriberDoesNotExist() {
|
public function testItFailsMailpoetSubscriberVerificationWhenSubscriberDoesNotExist() {
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$newsletter = $this->_createNewsletter();
|
$newsletter = $this->_createNewsletter();
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
|
|
||||||
@ -340,7 +435,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return false
|
// return false
|
||||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -372,7 +476,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return false
|
// return false
|
||||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -404,7 +517,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return false
|
// return false
|
||||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -428,7 +550,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return true after successful verification
|
// return true after successful verification
|
||||||
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
$result = $scheduler->verifyMailpoetSubscriber($subscriber->id, $newsletter, $queue);
|
||||||
@ -451,7 +582,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$scheduler = new Scheduler($this->subscribersFinder, $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->subscribersFinder,
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return true
|
// return true
|
||||||
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
|
expect($scheduler->processScheduledStandardNewsletter($newsletter, $queue))->true();
|
||||||
@ -492,7 +632,18 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$newsletterSegment = $this->_createNewsletterSegment($newsletter->id, $segment->id);
|
$newsletterSegment = $this->_createNewsletterSegment($newsletter->id, $segment->id);
|
||||||
|
|
||||||
// delete or reschedule queue when there are no subscribers in segments
|
// delete or reschedule queue when there are no subscribers in segments
|
||||||
$scheduler = $this->construct(Scheduler::class, [$this->subscribersFinder, $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository], [
|
$scheduler = $this->construct(
|
||||||
|
Scheduler::class,
|
||||||
|
[
|
||||||
|
$this->subscribersFinder,
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
], [
|
||||||
'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
|
'deleteQueueOrUpdateNextRunDate' => Expected::exactly(1, function() {
|
||||||
return false;
|
return false;
|
||||||
}),
|
}),
|
||||||
@ -516,7 +667,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
|
||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
assert($newsletter instanceof Newsletter);
|
assert($newsletter instanceof Newsletter);
|
||||||
$scheduler = new Scheduler($this->subscribersFinder, $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->subscribersFinder,
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
// return true
|
// return true
|
||||||
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true();
|
expect($scheduler->processPostNotificationNewsletter($newsletter, $queue))->true();
|
||||||
@ -543,7 +703,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItFailsToProcessWhenScheduledQueuesNotFound() {
|
public function testItFailsToProcessWhenScheduledQueuesNotFound() {
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
expect($scheduler->process())->false();
|
expect($scheduler->process())->false();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,7 +720,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$queue = $this->_createQueue(1);
|
$queue = $this->_createQueue(1);
|
||||||
$queue->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
$queue->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||||
$queue->save();
|
$queue->save();
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
expect(SendingQueue::findMany())->count(0);
|
expect(SendingQueue::findMany())->count(0);
|
||||||
}
|
}
|
||||||
@ -563,7 +741,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$queue->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
$queue->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||||
$queue->save();
|
$queue->save();
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
expect(SendingQueue::findMany())->count(0);
|
expect(SendingQueue::findMany())->count(0);
|
||||||
}
|
}
|
||||||
@ -655,7 +842,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
$newsletter = $this->_createNewsletter(Newsletter::TYPE_STANDARD, Newsletter::STATUS_DRAFT);
|
||||||
$queue = $this->_createQueue($newsletter->id);
|
$queue = $this->_createQueue($newsletter->id);
|
||||||
$finder = $this->makeEmpty(SubscribersFinder::class);
|
$finder = $this->makeEmpty(SubscribersFinder::class);
|
||||||
$scheduler = new Scheduler($finder, $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$finder,
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
|
|
||||||
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
$scheduler->processScheduledStandardNewsletter($newsletter, $queue);
|
||||||
$refetchedTask = ScheduledTask::where('id', $task->id)->findOne();
|
$refetchedTask = ScheduledTask::where('id', $task->id)->findOne();
|
||||||
@ -694,7 +890,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
expect($task->getSubscribers())->equals([$subscriber->id]);
|
expect($task->getSubscribers())->equals([$subscriber->id]);
|
||||||
|
|
||||||
// task should have its status set to null (i.e., sending)
|
// task should have its status set to null (i.e., sending)
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||||
expect($task->status)->null();
|
expect($task->status)->null();
|
||||||
@ -718,7 +923,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
expect($task->getSubscribers())->equals([$subscriber->id]);
|
expect($task->getSubscribers())->equals([$subscriber->id]);
|
||||||
|
|
||||||
// task should be deleted
|
// task should be deleted
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||||
expect($task)->false();
|
expect($task)->false();
|
||||||
@ -746,7 +960,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
expect($task->newsletterId)->equals($newsletter->id);
|
expect($task->newsletterId)->equals($newsletter->id);
|
||||||
|
|
||||||
// task should have its status set to null (i.e., sending)
|
// task should have its status set to null (i.e., sending)
|
||||||
$scheduler = new Scheduler($this->subscribersFinder, $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->subscribersFinder,
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
$task = SendingTask::getByNewsletterId($newsletter->id);
|
$task = SendingTask::getByNewsletterId($newsletter->id);
|
||||||
expect($task->status)->null();
|
expect($task->status)->null();
|
||||||
@ -763,7 +986,16 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
$queue->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
$queue->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||||
$queue->updatedAt = $originalUpdated;
|
$queue->updatedAt = $originalUpdated;
|
||||||
$queue->save();
|
$queue->save();
|
||||||
$scheduler = new Scheduler($this->makeEmpty(SubscribersFinder::class), $this->loggerFactory, $this->cronHelper, $this->cronWorkerScheduler, $this->scheduledTasksRepository, $this->newslettersRepository, $this->segmentsRepository);
|
$scheduler = new Scheduler(
|
||||||
|
$this->makeEmpty(SubscribersFinder::class),
|
||||||
|
$this->loggerFactory,
|
||||||
|
$this->cronHelper,
|
||||||
|
$this->cronWorkerScheduler,
|
||||||
|
$this->scheduledTasksRepository,
|
||||||
|
$this->newslettersRepository,
|
||||||
|
$this->segmentsRepository,
|
||||||
|
$this->newsletterScheduler
|
||||||
|
);
|
||||||
$scheduler->process();
|
$scheduler->process();
|
||||||
$newQueue = ScheduledTask::findOne($queue->taskId);
|
$newQueue = ScheduledTask::findOne($queue->taskId);
|
||||||
assert($newQueue instanceof ScheduledTask);
|
assert($newQueue instanceof ScheduledTask);
|
||||||
|
@ -70,7 +70,7 @@ class AbandonedCartContentTest extends \MailPoetTest {
|
|||||||
$this->block = $this->diContainer->get(AbandonedCartContent::class);
|
$this->block = $this->diContainer->get(AbandonedCartContent::class);
|
||||||
$this->wp = $this->diContainer->get(WPFunctions::class);
|
$this->wp = $this->diContainer->get(WPFunctions::class);
|
||||||
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
||||||
$this->automaticEmailScheduler = new AutomaticEmailScheduler();
|
$this->automaticEmailScheduler = $this->diContainer->get(AutomaticEmailScheduler::class);
|
||||||
|
|
||||||
// Clear old products
|
// Clear old products
|
||||||
$products = $this->wp->getPosts(['post_type' => 'product']);
|
$products = $this->wp->getPosts(['post_type' => 'product']);
|
||||||
|
@ -21,10 +21,13 @@ class NewsletterSaveControllerTest extends \MailPoetTest {
|
|||||||
/** @var NewsletterSaveController */
|
/** @var NewsletterSaveController */
|
||||||
private $saveController;
|
private $saveController;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->cleanup();
|
$this->cleanup();
|
||||||
$this->saveController = $this->diContainer->get(NewsletterSaveController::class);
|
$this->saveController = $this->diContainer->get(NewsletterSaveController::class);
|
||||||
|
$this->scheduler = $this->diContainer->get(Scheduler::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanSaveANewsletter() {
|
public function testItCanSaveANewsletter() {
|
||||||
@ -168,7 +171,8 @@ class NewsletterSaveControllerTest extends \MailPoetTest {
|
|||||||
})->first();
|
})->first();
|
||||||
expect($task1->getScheduledAt())->notEquals($currentTime);
|
expect($task1->getScheduledAt())->notEquals($currentTime);
|
||||||
assert($scheduleOption instanceof NewsletterOptionEntity); // PHPStan
|
assert($scheduleOption instanceof NewsletterOptionEntity); // PHPStan
|
||||||
expect($task1->getScheduledAt())->equals(Scheduler::getNextRunDate($scheduleOption->getValue()));
|
|
||||||
|
expect($task1->getScheduledAt())->equals($this->scheduler->getNextRunDate($scheduleOption->getValue()));
|
||||||
expect($task2->getScheduledAt())->null();
|
expect($task2->getScheduledAt())->null();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ class AutomaticEmailTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->automaticEmailScheduler = new AutomaticEmailScheduler;
|
$this->automaticEmailScheduler = $this->diContainer->get(AutomaticEmailScheduler::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCreatesScheduledAutomaticEmailSendingTaskForUser() {
|
public function testItCreatesScheduledAutomaticEmailSendingTaskForUser() {
|
||||||
@ -178,7 +178,7 @@ class AutomaticEmailTest extends \MailPoetTest {
|
|||||||
$wpMock->expects($this->any())
|
$wpMock->expects($this->any())
|
||||||
->method('currentTime')
|
->method('currentTime')
|
||||||
->willReturn($currentTime->getTimestamp());
|
->willReturn($currentTime->getTimestamp());
|
||||||
$automaticEmailScheduler = new AutomaticEmailScheduler($wpMock);
|
$automaticEmailScheduler = new AutomaticEmailScheduler(new Scheduler($wpMock), $wpMock);
|
||||||
// email should only be scheduled if it matches condition ("send to segment")
|
// email should only be scheduled if it matches condition ("send to segment")
|
||||||
$automaticEmailScheduler->scheduleAutomaticEmail('some_group', 'some_event', $condition);
|
$automaticEmailScheduler->scheduleAutomaticEmail('some_group', 'some_event', $condition);
|
||||||
$result = SendingQueue::findMany();
|
$result = SendingQueue::findMany();
|
||||||
|
@ -42,6 +42,9 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
/** @var Hooks */
|
/** @var Hooks */
|
||||||
private $hooks;
|
private $hooks;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $scheduler;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->postNotificationScheduler = $this->diContainer->get(PostNotificationScheduler::class);
|
$this->postNotificationScheduler = $this->diContainer->get(PostNotificationScheduler::class);
|
||||||
@ -50,6 +53,7 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
$this->newsletterOptionsRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
$this->newsletterOptionsRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
||||||
$this->newsletterOptionFieldsRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
|
$this->newsletterOptionFieldsRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
|
||||||
$this->hooks = $this->diContainer->get(Hooks::class);
|
$this->hooks = $this->diContainer->get(Hooks::class);
|
||||||
|
$this->scheduler = $this->diContainer->get(Scheduler::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCreatesPostNotificationSendingTask() {
|
public function testItCreatesPostNotificationSendingTask() {
|
||||||
@ -64,7 +68,8 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
expect(SendingQueue::where('newsletter_id', $newsletter->getId())->findMany())->count(1);
|
expect(SendingQueue::where('newsletter_id', $newsletter->getId())->findMany())->count(1);
|
||||||
expect($queue->newsletterId)->equals($newsletter->getId());
|
expect($queue->newsletterId)->equals($newsletter->getId());
|
||||||
expect($queue->status)->equals(SendingQueue::STATUS_SCHEDULED);
|
expect($queue->status)->equals(SendingQueue::STATUS_SCHEDULED);
|
||||||
expect($queue->scheduledAt)->equals(Scheduler::getNextRunDate('* 5 * * *'));
|
|
||||||
|
expect($queue->scheduledAt)->equals($this->scheduler->getNextRunDate('* 5 * * *'));
|
||||||
expect($queue->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
|
expect($queue->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
|
||||||
|
|
||||||
// duplicate queue record should not be created
|
// duplicate queue record should not be created
|
||||||
@ -97,7 +102,7 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
expect(SendingQueue::where('newsletter_id', $newsletter->getId())->findMany())->count(2);
|
expect(SendingQueue::where('newsletter_id', $newsletter->getId())->findMany())->count(2);
|
||||||
expect($queue->newsletterId)->equals($newsletter->getId());
|
expect($queue->newsletterId)->equals($newsletter->getId());
|
||||||
expect($queue->status)->equals(SendingQueue::STATUS_SCHEDULED);
|
expect($queue->status)->equals(SendingQueue::STATUS_SCHEDULED);
|
||||||
expect($queue->scheduledAt)->equals(Scheduler::getNextRunDate('* 10 * * *'));
|
expect($queue->scheduledAt)->equals($this->scheduler->getNextRunDate('* 10 * * *'));
|
||||||
expect($queue->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
|
expect($queue->priority)->equals(SendingQueue::PRIORITY_MEDIUM);
|
||||||
|
|
||||||
// duplicate queue record should not be created
|
// duplicate queue record should not be created
|
||||||
@ -151,11 +156,11 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
|
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
|
||||||
|
|
||||||
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
||||||
assert($scheduleOption instanceof NewsletterOptionEntity);
|
assert($scheduleOption instanceof NewsletterOptionEntity);
|
||||||
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
||||||
expect(Scheduler::getNextRunDate($scheduleOption->getValue(), $currentTime))
|
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
|
||||||
->equals('2017-01-01 14:00:00');
|
->equals('2017-01-01 14:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,11 +178,11 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
|
$this->postNotificationScheduler->processPostNotificationSchedule($newsletter);
|
||||||
|
|
||||||
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
||||||
assert($scheduleOption instanceof NewsletterOptionEntity);
|
assert($scheduleOption instanceof NewsletterOptionEntity);
|
||||||
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
||||||
expect(Scheduler::getNextRunDate($scheduleOption->getValue(), $currentTime))
|
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
|
||||||
->equals('2017-01-03 14:00:00');
|
->equals('2017-01-03 14:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +203,7 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
||||||
assert($scheduleOption instanceof NewsletterOptionEntity);
|
assert($scheduleOption instanceof NewsletterOptionEntity);
|
||||||
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
||||||
expect(Scheduler::getNextRunDate($scheduleOption->getValue(), $currentTime))
|
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
|
||||||
->equals('2017-01-19 14:00:00');
|
->equals('2017-01-19 14:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,7 +224,7 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
||||||
assert($scheduleOption instanceof NewsletterOptionEntity);
|
assert($scheduleOption instanceof NewsletterOptionEntity);
|
||||||
$currentTime = 1485694800; // Sunday, 29 January 2017 @ 1:00pm (UTC)
|
$currentTime = 1485694800; // Sunday, 29 January 2017 @ 1:00pm (UTC)
|
||||||
expect(Scheduler::getNextRunDate($scheduleOption->getValue(), $currentTime))
|
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
|
||||||
->equals('2017-02-25 14:00:00');
|
->equals('2017-02-25 14:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +245,7 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
$scheduleOption = $newsletter->getOption(NewsletterOptionFieldEntity::NAME_SCHEDULE);
|
||||||
assert($scheduleOption instanceof NewsletterOptionEntity);
|
assert($scheduleOption instanceof NewsletterOptionEntity);
|
||||||
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
$currentTime = 1483275600; // Sunday, 1 January 2017 @ 1:00pm (UTC)
|
||||||
expect(Scheduler::getNextRunDate($scheduleOption->getValue(), $currentTime))
|
expect($this->scheduler->getNextRunDate($scheduleOption->getValue(), $currentTime))
|
||||||
->equals('2017-01-01 13:01:00');
|
->equals('2017-01-01 13:01:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,7 +344,7 @@ class PostNotificationTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function createNewsletterOptions(NewsletterEntity $newsletter, array $options) {
|
private function createNewsletterOptions(NewsletterEntity $newsletter, array $options) {
|
||||||
foreach ($options as $name => $value) {
|
foreach ($options as $name => $value) {
|
||||||
$newsletterOptionField = $this->newsletterOptionFieldsRepository->findOneBy([
|
$newsletterOptionField = $this->newsletterOptionFieldsRepository->findOneBy([
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
]);
|
]);
|
||||||
|
@ -16,14 +16,23 @@ use MailPoetVendor\Carbon\Carbon;
|
|||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
class SchedulerTest extends \MailPoetTest {
|
class SchedulerTest extends \MailPoetTest {
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $testee;
|
||||||
|
|
||||||
|
public function _before() {
|
||||||
|
parent::_before();
|
||||||
|
$this->testee = $this->diContainer->get(Scheduler::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function testItGetsActiveNewslettersFilteredByTypeAndGroup() {
|
public function testItGetsActiveNewslettersFilteredByTypeAndGroup() {
|
||||||
$this->_createNewsletter($type = Newsletter::TYPE_WELCOME);
|
$this->_createNewsletter($type = Newsletter::TYPE_WELCOME);
|
||||||
|
|
||||||
// no newsletters with type "notification" should be found
|
// no newsletters with type "notification" should be found
|
||||||
expect(Scheduler::getNewsletters(Newsletter::TYPE_NOTIFICATION))->isEmpty();
|
expect($this->testee->getNewsletters(Newsletter::TYPE_NOTIFICATION))->isEmpty();
|
||||||
|
|
||||||
// one newsletter with type "welcome" should be found
|
// one newsletter with type "welcome" should be found
|
||||||
expect(Scheduler::getNewsletters(Newsletter::TYPE_WELCOME))->count(1);
|
expect($this->testee->getNewsletters(Newsletter::TYPE_WELCOME))->count(1);
|
||||||
|
|
||||||
// one automatic email belonging to "test" group should be found
|
// one automatic email belonging to "test" group should be found
|
||||||
$newsletter = $this->_createNewsletter($type = Newsletter::TYPE_AUTOMATIC);
|
$newsletter = $this->_createNewsletter($type = Newsletter::TYPE_AUTOMATIC);
|
||||||
@ -35,32 +44,32 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, 'group_does_not_exist'))->isEmpty();
|
expect($this->testee->getNewsletters(Newsletter::TYPE_AUTOMATIC, 'group_does_not_exist'))->isEmpty();
|
||||||
expect(Scheduler::getNewsletters(Newsletter::TYPE_WELCOME, 'test'))->count(1);
|
expect($this->testee->getNewsletters(Newsletter::TYPE_WELCOME, 'test'))->count(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanGetNextRunDate() {
|
public function testItCanGetNextRunDate() {
|
||||||
// it accepts cron syntax and returns next run date
|
// it accepts cron syntax and returns next run date
|
||||||
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||||
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
||||||
expect(Scheduler::getNextRunDate('* * * * *'))
|
expect($this->testee->getNextRunDate('* * * * *'))
|
||||||
->equals($currentTime->addMinute()->format('Y-m-d H:i:00'));
|
->equals($currentTime->addMinute()->format('Y-m-d H:i:00'));
|
||||||
// when invalid CRON expression is used, false response is returned
|
// when invalid CRON expression is used, false response is returned
|
||||||
expect(Scheduler::getNextRunDate('invalid CRON expression'))->false();
|
expect($this->testee->getNextRunDate('invalid CRON expression'))->false();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanGetPreviousRunDate() {
|
public function testItCanGetPreviousRunDate() {
|
||||||
// it accepts cron syntax and returns previous run date
|
// it accepts cron syntax and returns previous run date
|
||||||
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||||
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
||||||
expect(Scheduler::getPreviousRunDate('* * * * *'))
|
expect($this->testee->getPreviousRunDate('* * * * *'))
|
||||||
->equals($currentTime->subMinute()->format('Y-m-d H:i:00'));
|
->equals($currentTime->subMinute()->format('Y-m-d H:i:00'));
|
||||||
// when invalid CRON expression is used, false response is returned
|
// when invalid CRON expression is used, false response is returned
|
||||||
expect(Scheduler::getPreviousRunDate('invalid CRON expression'))->false();
|
expect($this->testee->getPreviousRunDate('invalid CRON expression'))->false();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItFormatsDatetimeString() {
|
public function testItFormatsDatetimeString() {
|
||||||
expect(Scheduler::formatDatetimeString('April 20, 2016 4pm'))
|
expect($this->testee->formatDatetimeString('April 20, 2016 4pm'))
|
||||||
->equals('2016-04-20 16:00:00');
|
->equals('2016-04-20 16:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,6 +467,7 @@ class WelcomeTest extends \MailPoetTest {
|
|||||||
$this->segmentRepository,
|
$this->segmentRepository,
|
||||||
$this->diContainer->get(NewslettersRepository::class),
|
$this->diContainer->get(NewslettersRepository::class),
|
||||||
$this->diContainer->get(ScheduledTasksRepository::class),
|
$this->diContainer->get(ScheduledTasksRepository::class),
|
||||||
|
$this->diContainer->get(Scheduler::class),
|
||||||
$wpMock
|
$wpMock
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,9 @@ class SchedulerTest extends \MailPoetUnitTest {
|
|||||||
/** @var Carbon */
|
/** @var Carbon */
|
||||||
private $currentTime;
|
private $currentTime;
|
||||||
|
|
||||||
|
/** @var Scheduler */
|
||||||
|
private $testee;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->currentTime = Carbon::now();
|
$this->currentTime = Carbon::now();
|
||||||
@ -24,36 +27,37 @@ class SchedulerTest extends \MailPoetUnitTest {
|
|||||||
'currentTime' => $this->currentTime->getTimestamp(),
|
'currentTime' => $this->currentTime->getTimestamp(),
|
||||||
]);
|
]);
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
|
$this->testee = new Scheduler($this->wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItScheduleTimeWithDelayByHours(): void {
|
public function testItScheduleTimeWithDelayByHours(): void {
|
||||||
$scheduledAt = Scheduler::getScheduledTimeWithDelay('hours', 6, $this->wp);
|
$scheduledAt = $this->testee->getScheduledTimeWithDelay('hours', 6, $this->wp);
|
||||||
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addHours(6);
|
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addHours(6);
|
||||||
expect($scheduledAt)->equals($expectedDate);
|
expect($scheduledAt)->equals($expectedDate);
|
||||||
|
|
||||||
$scheduledAt = Scheduler::getScheduledTimeWithDelay('hours', 38, $this->wp);
|
$scheduledAt = $this->testee->getScheduledTimeWithDelay('hours', 38, $this->wp);
|
||||||
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addHours(38);
|
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addHours(38);
|
||||||
expect($scheduledAt)->equals($expectedDate);
|
expect($scheduledAt)->equals($expectedDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItScheduleTimeWithDelayByDays(): void {
|
public function testItScheduleTimeWithDelayByDays(): void {
|
||||||
$scheduledAt = Scheduler::getScheduledTimeWithDelay('days', 23, $this->wp);
|
$scheduledAt = $this->testee->getScheduledTimeWithDelay('days', 23, $this->wp);
|
||||||
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addDays(23);
|
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addDays(23);
|
||||||
expect($scheduledAt)->equals($expectedDate);
|
expect($scheduledAt)->equals($expectedDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItScheduleTimeWithDelayByWeek(): void {
|
public function testItScheduleTimeWithDelayByWeek(): void {
|
||||||
$scheduledAt = Scheduler::getScheduledTimeWithDelay('weeks', 2, $this->wp);
|
$scheduledAt = $this->testee->getScheduledTimeWithDelay('weeks', 2, $this->wp);
|
||||||
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addWeeks(2);
|
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addWeeks(2);
|
||||||
expect($scheduledAt)->equals($expectedDate);
|
expect($scheduledAt)->equals($expectedDate);
|
||||||
|
|
||||||
$scheduledAt = Scheduler::getScheduledTimeWithDelay('weeks', 14, $this->wp);
|
$scheduledAt = $this->testee->getScheduledTimeWithDelay('weeks', 14, $this->wp);
|
||||||
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addWeeks(14);
|
$expectedDate = (Carbon::createFromTimestamp($this->currentTime->timestamp))->addWeeks(14);
|
||||||
expect($scheduledAt)->equals($expectedDate);
|
expect($scheduledAt)->equals($expectedDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItDoesNotScheduleTimeWithDelayOutOfRange(): void {
|
public function testItDoesNotScheduleTimeWithDelayOutOfRange(): void {
|
||||||
$scheduledAt = Scheduler::getScheduledTimeWithDelay('weeks', 4000, $this->wp);
|
$scheduledAt = $this->testee->getScheduledTimeWithDelay('weeks', 4000, $this->wp);
|
||||||
$maxDate = Carbon::createFromFormat('Y-m-d H:i:s', Scheduler::MYSQL_TIMESTAMP_MAX);
|
$maxDate = Carbon::createFromFormat('Y-m-d H:i:s', Scheduler::MYSQL_TIMESTAMP_MAX);
|
||||||
expect($scheduledAt)->equals($maxDate);
|
expect($scheduledAt)->equals($maxDate);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user