diff --git a/mailpoet/lib/Cron/CronWorkerRunner.php b/mailpoet/lib/Cron/CronWorkerRunner.php index ecec2f21e8..868dfc9078 100644 --- a/mailpoet/lib/Cron/CronWorkerRunner.php +++ b/mailpoet/lib/Cron/CronWorkerRunner.php @@ -73,6 +73,8 @@ class CronWorkerRunner { foreach ($dueTasks as $task) { $this->prepareTask($worker, $task); } + // Re-fetch running tasks so that we can process tasks that were just prepared + $runningTasks = $this->getRunningTasks($worker); foreach ($runningTasks as $task) { $this->processTask($worker, $task); } diff --git a/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php b/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php index f5f1169723..14b2672079 100644 --- a/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php +++ b/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php @@ -47,10 +47,10 @@ class CronWorkerRunnerTest extends \MailPoetTest { $this->cronWorkerRunner->run($worker); } - public function testItPreparesTask() { + public function testItPreparesTaskAndProcessesItImmediately() { $worker = $this->make(SimpleWorkerMockImplementation::class, [ 'prepareTaskStrategy' => Expected::once(true), - 'processTaskStrategy' => Expected::never(), + 'processTaskStrategy' => Expected::once(true), ]); $task = $this->createScheduledTask(); @@ -58,7 +58,7 @@ class CronWorkerRunnerTest extends \MailPoetTest { expect($result)->true(); $scheduledTask = $this->scheduledTasksRepository->findOneById($task->getId()); assert($scheduledTask instanceof ScheduledTaskEntity); - expect($scheduledTask->getStatus())->null(); + expect($scheduledTask->getStatus())->same(ScheduledTaskEntity::STATUS_COMPLETED); } public function testItProcessesTask() { diff --git a/mailpoet/tests/integration/Cron/Workers/WooCommerceOrdersTest.php b/mailpoet/tests/integration/Cron/Workers/WooCommerceOrdersTest.php index c522e4f502..c6038a9864 100644 --- a/mailpoet/tests/integration/Cron/Workers/WooCommerceOrdersTest.php +++ b/mailpoet/tests/integration/Cron/Workers/WooCommerceOrdersTest.php @@ -83,15 +83,7 @@ class WooCommerceOrdersTest extends \MailPoetTest { assert($task instanceof ScheduledTaskEntity); expect($task->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED); - // 2. prepare - expect($this->worker->checkProcessingRequirements())->true(); - $this->cronWorkerRunner->run($this->worker); - $this->entityManager->clear(); - $task = $this->scheduledTaskRepository->findOneBy(['type' => WooCommercePastOrders::TASK_TYPE]); - assert($task instanceof ScheduledTaskEntity); - expect($task->getStatus())->null(); // null means 'running' - - // 3. run + // 2. prepare and run expect($this->worker->checkProcessingRequirements())->true(); $this->cronWorkerRunner->run($this->worker); $this->entityManager->clear(); @@ -99,7 +91,7 @@ class WooCommerceOrdersTest extends \MailPoetTest { assert($task instanceof ScheduledTaskEntity); expect($task->getStatus())->equals(ScheduledTaskEntity::STATUS_COMPLETED); - // 4. complete (do not schedule again) + // 3. complete (do not schedule again) expect($this->worker->checkProcessingRequirements())->false(); $this->cronWorkerRunner->run($this->worker); $this->entityManager->clear(); @@ -120,8 +112,7 @@ class WooCommerceOrdersTest extends \MailPoetTest { $this->woocommercePurchases->expects($this->exactly(3))->method('trackPurchase'); $this->cronWorkerRunner->run($this->worker); // schedule - $this->cronWorkerRunner->run($this->worker); // prepare - $this->cronWorkerRunner->run($this->worker); // run + $this->cronWorkerRunner->run($this->worker); // prepare and run $this->entityManager->clear(); $tasks = $this->scheduledTaskRepository->findBy(['type' => WooCommercePastOrders::TASK_TYPE]); @@ -137,8 +128,7 @@ class WooCommerceOrdersTest extends \MailPoetTest { $this->woocommercePurchases->expects($this->exactly(5))->method('trackPurchase'); $this->cronWorkerRunner->run($this->worker); // schedule - $this->cronWorkerRunner->run($this->worker); // prepare - $this->cronWorkerRunner->run($this->worker); // run for 1, 2, 3 + $this->cronWorkerRunner->run($this->worker); // prepare and run for 1, 2, 3 $task = $this->scheduledTaskRepository->findOneBy(['type' => WooCommercePastOrders::TASK_TYPE]); assert($task instanceof ScheduledTaskEntity);