diff --git a/lib/API/JSON/v1/Settings.php b/lib/API/JSON/v1/Settings.php index 3dcefba40e..e1e13e933b 100644 --- a/lib/API/JSON/v1/Settings.php +++ b/lib/API/JSON/v1/Settings.php @@ -6,7 +6,9 @@ use MailPoet\API\JSON\Endpoint as APIEndpoint; use MailPoet\API\JSON\Error as APIError; use MailPoet\Config\AccessControl; use MailPoet\Config\ServicesChecker; +use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Cron\Workers\SubscribersEngagementScore; +use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Mailer\MailerLog; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; @@ -153,7 +155,7 @@ class Settings extends APIEndpoint { $oldInactivationInterval = $oldSettings['deactivate_subscriber_after_inactive_days']; $newInactivationInterval = $newSettings['deactivate_subscriber_after_inactive_days']; if ($oldInactivationInterval !== $newInactivationInterval) { - $this->settings->onInactiveSubscribersIntervalChange(); + $this->onInactiveSubscribersIntervalChange(); } $oldSendingMethod = $oldSettings['mta_group']; @@ -170,7 +172,7 @@ class Settings extends APIEndpoint { ? $newSettings['mailpoet_subscribe_old_woocommerce_customers']['enabled'] : '0'; if ($oldSubscribeOldWoocommerceCustomers !== $newSubscribeOldWoocommerceCustomers) { - $this->settings->onSubscribeOldWoocommerceCustomersChange(); + $this->onSubscribeOldWoocommerceCustomersChange(); } if (!empty($newSettings['woocommerce']['use_mailpoet_editor'])) { @@ -194,4 +196,39 @@ class Settings extends APIEndpoint { $this->settings->set('reply_to', null); } } + + public function onSubscribeOldWoocommerceCustomersChange(): void { + $task = $this->scheduledTasksRepository->findOneBy([ + 'type' => WooCommerceSync::TASK_TYPE, + 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, + ]); + if (!($task instanceof ScheduledTaskEntity)) { + $task = $this->createScheduledTask(WooCommerceSync::TASK_TYPE); + } + $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); + $task->setScheduledAt($datetime->subMinute()); + $this->scheduledTasksRepository->persist($task); + $this->scheduledTasksRepository->flush(); + } + + public function onInactiveSubscribersIntervalChange(): void { + $task = $this->scheduledTasksRepository->findOneBy([ + 'type' => InactiveSubscribers::TASK_TYPE, + 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, + ]); + if (!($task instanceof ScheduledTaskEntity)) { + $task = $this->createScheduledTask(InactiveSubscribers::TASK_TYPE); + } + $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); + $task->setScheduledAt($datetime->subMinute()); + $this->scheduledTasksRepository->persist($task); + $this->scheduledTasksRepository->flush(); + } + + private function createScheduledTask(string $type): ScheduledTaskEntity { + $task = new ScheduledTaskEntity(); + $task->setType($type); + $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); + return $task; + } } diff --git a/lib/Settings/SettingsController.php b/lib/Settings/SettingsController.php index 498617985c..0005cac0c4 100644 --- a/lib/Settings/SettingsController.php +++ b/lib/Settings/SettingsController.php @@ -3,15 +3,10 @@ namespace MailPoet\Settings; use MailPoet\Cron\CronTrigger; -use MailPoet\Cron\Workers\InactiveSubscribers; -use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\FormEntity; -use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Form\FormsRepository; -use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\WP\Functions as WPFunctions; -use MailPoetVendor\Carbon\Carbon; class SettingsController { @@ -30,9 +25,6 @@ class SettingsController { /** @var SettingsRepository */ private $settingsRepository; - /** @var ScheduledTasksRepository */ - private $tasksRepository; - /** @var FormsRepository */ private $formsRepository; @@ -40,11 +32,9 @@ class SettingsController { public function __construct( SettingsRepository $settingsRepository, - ScheduledTasksRepository $scheduledTasksRepository, FormsRepository $formsRepository ) { $this->settingsRepository = $settingsRepository; - $this->tasksRepository = $scheduledTasksRepository; $this->formsRepository = $formsRepository; } @@ -141,34 +131,6 @@ class SettingsController { unset($this->settings[$key]); } - public function onSubscribeOldWoocommerceCustomersChange(): void { - $task = $this->tasksRepository->findOneBy([ - 'type' => WooCommerceSync::TASK_TYPE, - 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, - ]); - if (!($task instanceof ScheduledTaskEntity)) { - $task = $this->createScheduledTask(WooCommerceSync::TASK_TYPE); - } - $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); - $task->setScheduledAt($datetime->subMinute()); - $this->tasksRepository->persist($task); - $this->tasksRepository->flush(); - } - - public function onInactiveSubscribersIntervalChange(): void { - $task = $this->tasksRepository->findOneBy([ - 'type' => InactiveSubscribers::TASK_TYPE, - 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, - ]); - if (!($task instanceof ScheduledTaskEntity)) { - $task = $this->createScheduledTask(InactiveSubscribers::TASK_TYPE); - } - $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); - $task->setScheduledAt($datetime->subMinute()); - $this->tasksRepository->persist($task); - $this->tasksRepository->flush(); - } - public function updateSuccessMessages(): void { $rightMessage = $this->getDefaultSuccessMessage(); $wrongMessage = ( @@ -195,13 +157,6 @@ class SettingsController { return __('You’ve been successfully subscribed to our newsletter!', 'mailpoet'); } - private function createScheduledTask(string $type): ScheduledTaskEntity { - $task = new ScheduledTaskEntity(); - $task->setType($type); - $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); - return $task; - } - private function ensureLoaded() { if ($this->loaded) { return; diff --git a/tests/integration/API/JSON/v1/SettingsTest.php b/tests/integration/API/JSON/v1/SettingsTest.php index 1023d07e9c..04a1fe0eb7 100644 --- a/tests/integration/API/JSON/v1/SettingsTest.php +++ b/tests/integration/API/JSON/v1/SettingsTest.php @@ -8,6 +8,8 @@ use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\v1\Settings; use MailPoet\Config\ServicesChecker; use MailPoet\Cron\Workers\InactiveSubscribers; +use MailPoet\Cron\Workers\WooCommerceSync; +use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Mailer\MailerLog; use MailPoet\Models\ScheduledTask; use MailPoet\Newsletter\NewslettersRepository; @@ -31,9 +33,13 @@ class SettingsTest extends \MailPoetTest { /** @var SettingsController */ private $settings; + /** @var ScheduledTasksRepository */ + private $tasksRepository; + public function _before() { parent::_before(); ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table); + $this->tasksRepository = $this->diContainer->get(ScheduledTasksRepository::class); $this->settings = SettingsController::getInstance(); $this->settings->set('some.setting.key', true); $this->endpoint = new Settings( @@ -179,7 +185,72 @@ class SettingsTest extends \MailPoetTest { expect($this->settings->get('reply_to'))->isEmpty(); } + public function testItReschedulesScheduledTaskForWoocommerceSync(): void { + $newTask = $this->createScheduledTask(WooCommerceSync::TASK_TYPE); + assert($newTask instanceof ScheduledTaskEntity); + + $this->endpoint->onSubscribeOldWoocommerceCustomersChange(); + + $this->entityManager->clear(); + $task = $this->getScheduledTaskByType(WooCommerceSync::TASK_TYPE); + assert($task instanceof ScheduledTaskEntity); + $scheduledAt = $task->getScheduledAt(); + assert($scheduledAt instanceof \DateTime); + $expectedScheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); + $expectedScheduledAt->subMinute(); + expect($scheduledAt)->equals($expectedScheduledAt); + expect($newTask->getId())->equals($task->getId()); + } + + public function testItCreatesScheduledTaskForWoocommerceSync(): void { + $task = $this->getScheduledTaskByType(WooCommerceSync::TASK_TYPE); + expect($task)->null(); + $this->endpoint->onSubscribeOldWoocommerceCustomersChange(); + $task = $this->getScheduledTaskByType(WooCommerceSync::TASK_TYPE); + expect($task)->isInstanceOf(ScheduledTaskEntity::class); + } + + public function testItReschedulesScheduledTaskForInactiveSubscribers(): void { + $newTask = $this->createScheduledTask(InactiveSubscribers::TASK_TYPE); + assert($newTask instanceof ScheduledTaskEntity); + $this->endpoint->onInactiveSubscribersIntervalChange(); + + $task = $this->getScheduledTaskByType(InactiveSubscribers::TASK_TYPE); + assert($task instanceof ScheduledTaskEntity); + $scheduledAt = $task->getScheduledAt(); + assert($scheduledAt instanceof \DateTime); + $expectedScheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); + $expectedScheduledAt->subMinute(); + expect($scheduledAt)->equals($expectedScheduledAt); + expect($newTask->getId())->equals($task->getId()); + } + + public function testItCreatesScheduledTaskForInactiveSubscribers(): void { + $task = $this->getScheduledTaskByType(InactiveSubscribers::TASK_TYPE); + expect($task)->null(); + $this->endpoint->onInactiveSubscribersIntervalChange(); + $task = $this->getScheduledTaskByType(InactiveSubscribers::TASK_TYPE); + expect($task)->isInstanceOf(ScheduledTaskEntity::class); + } + + private function createScheduledTask(string $type): ScheduledTaskEntity { + $task = new ScheduledTaskEntity(); + $task->setType($type); + $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); + $this->tasksRepository->persist($task); + $this->tasksRepository->flush(); + return $task; + } + + private function getScheduledTaskByType(string $type): ?ScheduledTaskEntity { + return $this->tasksRepository->findOneBy([ + 'type' => $type, + 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, + ]); + } + public function _after() { + $this->truncateEntity(ScheduledTaskEntity::class); $this->diContainer->get(SettingsRepository::class)->truncate(); } } diff --git a/tests/integration/Settings/SettingsControllerTest.php b/tests/integration/Settings/SettingsControllerTest.php index de5d4044fa..e23ddeaef4 100644 --- a/tests/integration/Settings/SettingsControllerTest.php +++ b/tests/integration/Settings/SettingsControllerTest.php @@ -3,33 +3,23 @@ namespace MailPoet\Test\Settings; use Codeception\Stub; -use MailPoet\Cron\Workers\InactiveSubscribers; -use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\Entities\FormEntity; -use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\SettingEntity; use MailPoet\Form\FormsRepository; -use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsRepository; -use MailPoet\WP\Functions as WPFunctions; -use MailPoetVendor\Carbon\Carbon; class SettingsControllerTest extends \MailPoetTest { /** @var SettingsController */ private $controller; - /** @var ScheduledTasksRepository */ - private $tasksRepository; - /** @var FormsRepository */ private $formsReposittory; public function _before() { parent::_before(); $this->controller = $this->diContainer->get(SettingsController::class); - $this->tasksRepository = $this->diContainer->get(ScheduledTasksRepository::class); $this->formsReposittory = $this->diContainer->get(FormsRepository::class); $this->clear(); } @@ -131,54 +121,6 @@ class SettingsControllerTest extends \MailPoetTest { $this->assertEquals(true, true); } - public function testItReschedulesScheduledTaskForWoocommerceSync(): void { - $newTask = $this->createScheduledTask(WooCommerceSync::TASK_TYPE); - assert($newTask instanceof ScheduledTaskEntity); - - $this->controller->onSubscribeOldWoocommerceCustomersChange(); - - $this->entityManager->clear(); - $task = $this->getScheduledTaskByType(WooCommerceSync::TASK_TYPE); - assert($task instanceof ScheduledTaskEntity); - $scheduledAt = $task->getScheduledAt(); - assert($scheduledAt instanceof \DateTime); - $expectedScheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); - $expectedScheduledAt->subMinute(); - expect($scheduledAt)->equals($expectedScheduledAt); - expect($newTask->getId())->equals($task->getId()); - } - - public function testItCreatesScheduledTaskForWoocommerceSync(): void { - $task = $this->getScheduledTaskByType(WooCommerceSync::TASK_TYPE); - expect($task)->null(); - $this->controller->onSubscribeOldWoocommerceCustomersChange(); - $task = $this->getScheduledTaskByType(WooCommerceSync::TASK_TYPE); - expect($task)->isInstanceOf(ScheduledTaskEntity::class); - } - - public function testItReschedulesScheduledTaskForInactiveSubscribers(): void { - $newTask = $this->createScheduledTask(InactiveSubscribers::TASK_TYPE); - assert($newTask instanceof ScheduledTaskEntity); - $this->controller->onInactiveSubscribersIntervalChange(); - - $task = $this->getScheduledTaskByType(InactiveSubscribers::TASK_TYPE); - assert($task instanceof ScheduledTaskEntity); - $scheduledAt = $task->getScheduledAt(); - assert($scheduledAt instanceof \DateTime); - $expectedScheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); - $expectedScheduledAt->subMinute(); - expect($scheduledAt)->equals($expectedScheduledAt); - expect($newTask->getId())->equals($task->getId()); - } - - public function testItCreatesScheduledTaskForInactiveSubscribers(): void { - $task = $this->getScheduledTaskByType(InactiveSubscribers::TASK_TYPE); - expect($task)->null(); - $this->controller->onInactiveSubscribersIntervalChange(); - $task = $this->getScheduledTaskByType(InactiveSubscribers::TASK_TYPE); - expect($task)->isInstanceOf(ScheduledTaskEntity::class); - } - public function testItReturnsCorrectSuccessMessage(): void { $this->controller->set('signup_confirmation.enabled', 1); expect($this->controller->getDefaultSuccessMessage())->equals(__('Check your inbox or spam folder to confirm your subscription.', 'mailpoet')); @@ -211,7 +153,6 @@ class SettingsControllerTest extends \MailPoetTest { } private function clear() { - $this->truncateEntity(ScheduledTaskEntity::class); $this->truncateEntity(SettingEntity::class); $this->truncateEntity(FormEntity::class); } @@ -220,22 +161,6 @@ class SettingsControllerTest extends \MailPoetTest { $this->clear(); } - private function getScheduledTaskByType(string $type): ?ScheduledTaskEntity { - return $this->tasksRepository->findOneBy([ - 'type' => $type, - 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, - ]); - } - - private function createScheduledTask(string $type): ScheduledTaskEntity { - $task = new ScheduledTaskEntity(); - $task->setType($type); - $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); - $this->tasksRepository->persist($task); - $this->tasksRepository->flush(); - return $task; - } - private function createOrUpdateSetting($name, $value) { $tableName = $this->entityManager->getClassMetadata(SettingEntity::class)->getTableName(); $this->connection->executeUpdate("