With the new unique parameter added in the action scheduler 3.5.0 the as_schedule_single_action that schedules an immediate action seems to be more convenient for the action scheduler. We get better control over the scheduling of subsequent runs. Note: We don't want to use the async action that is also executed immediately, but it has the highest priority and we don't want to block actions scheduled by other plugins. [MAILPOET-4684]
72 lines
2.6 KiB
PHP
72 lines
2.6 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace MailPoet\Cron;
|
|
|
|
use MailPoet\Cron\ActionScheduler\Actions\DaemonRun;
|
|
use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger;
|
|
use MailPoet\Cron\ActionScheduler\ActionScheduler;
|
|
use MailPoet\Cron\ActionScheduler\ActionSchedulerTestHelper;
|
|
use MailPoet\Entities\ScheduledTaskEntity;
|
|
|
|
require_once __DIR__ . '/ActionScheduler/ActionSchedulerTestHelper.php';
|
|
|
|
class DaemonActionSchedulerRunnerTest extends \MailPoetTest {
|
|
|
|
/** @var DaemonActionSchedulerRunner */
|
|
private $actionSchedulerRunner;
|
|
|
|
/** @var ActionSchedulerTestHelper */
|
|
private $actionSchedulerHelper;
|
|
|
|
/** @var ActionScheduler */
|
|
private $actionScheduler;
|
|
|
|
public function _before(): void {
|
|
$this->actionSchedulerRunner = $this->diContainer->get(DaemonActionSchedulerRunner::class);
|
|
$this->actionScheduler = $this->diContainer->get(ActionScheduler::class);
|
|
$this->cleanup();
|
|
$this->actionSchedulerHelper = new ActionSchedulerTestHelper();
|
|
}
|
|
|
|
public function testItSchedulesTriggerActionOnInit(): void {
|
|
$actions = $this->actionSchedulerHelper->getMailPoetScheduledActions();
|
|
expect($actions)->count(0);
|
|
$this->actionSchedulerRunner->init();
|
|
$actions = $this->actionSchedulerHelper->getMailPoetScheduledActions();
|
|
expect($actions)->count(1);
|
|
$action = reset($actions);
|
|
$this->assertInstanceOf(\ActionScheduler_Action::class, $action);
|
|
expect($action->get_hook())->equals(DaemonTrigger::NAME);
|
|
}
|
|
|
|
public function testItDeactivateAllTasks(): void {
|
|
$this->actionSchedulerRunner->init();
|
|
$actions = $this->actionSchedulerHelper->getMailPoetScheduledActions();
|
|
expect($actions)->count(1);
|
|
$this->actionSchedulerRunner->deactivate();
|
|
$actions = $this->actionSchedulerHelper->getMailPoetScheduledActions();
|
|
expect($actions)->count(0);
|
|
}
|
|
|
|
public function testItDeactivatesAllTasksOnTrigger(): void {
|
|
$this->actionScheduler->scheduleRecurringAction(time() - 1, 100, DaemonTrigger::NAME);
|
|
$this->actionScheduler->scheduleImmediateSingleAction(DaemonRun::NAME);
|
|
$actions = $this->actionSchedulerHelper->getMailPoetScheduledActions();
|
|
expect($actions)->count(2);
|
|
$this->actionSchedulerRunner->init(false);
|
|
|
|
$runner = new \ActionScheduler_QueueRunner();
|
|
$runner->run();
|
|
|
|
$actions = $this->actionSchedulerHelper->getMailPoetScheduledActions();
|
|
expect($actions)->count(0);
|
|
}
|
|
|
|
private function cleanup(): void {
|
|
global $wpdb;
|
|
$actionsTable = $wpdb->prefix . 'actionscheduler_actions';
|
|
$wpdb->query('TRUNCATE ' . $actionsTable);
|
|
$this->truncateEntity(ScheduledTaskEntity::class);
|
|
}
|
|
}
|