Refactor InactiveSubscribers::proccessTaskStrategy() to use Doctrine

Replaces all instances of ScheduledTask with ScheduledTaskEntity

[MAILPOET-3843]
This commit is contained in:
Rodrigo Primo
2021-09-30 10:59:14 -03:00
committed by Veljko V
parent 963da3bf16
commit 8fcd84e03a
2 changed files with 34 additions and 27 deletions

View File

@@ -2,7 +2,7 @@
namespace MailPoet\Cron\Workers; namespace MailPoet\Cron\Workers;
use MailPoet\Models\ScheduledTask; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\InactiveSubscribersController; use MailPoet\Subscribers\InactiveSubscribersController;
@@ -27,7 +27,7 @@ class InactiveSubscribers extends SimpleWorker {
parent::__construct(); parent::__construct();
} }
public function processTaskStrategy(ScheduledTask $task, $timer) { public function processTaskStrategy(ScheduledTaskEntity $task, $timer) {
$trackingEnabled = (bool)$this->settings->get('tracking.enabled'); $trackingEnabled = (bool)$this->settings->get('tracking.enabled');
if (!$trackingEnabled) { if (!$trackingEnabled) {
$this->schedule(); $this->schedule();
@@ -50,8 +50,9 @@ class InactiveSubscribers extends SimpleWorker {
break; break;
} }
$lastSubscriberId += self::BATCH_SIZE; $lastSubscriberId += self::BATCH_SIZE;
$task->meta = ['last_subscriber_id' => $lastSubscriberId]; $task->setMeta(['last_subscriber_id' => $lastSubscriberId]);
$task->save(); $this->scheduledTasksRepository->persist($task);
$this->scheduledTasksRepository->flush();
$this->cronHelper->enforceExecutionLimit($timer); $this->cronHelper->enforceExecutionLimit($timer);
}; };
while ($this->inactiveSubscribersController->markActiveSubscribers($daysToInactive, self::BATCH_SIZE) === self::BATCH_SIZE) { while ($this->inactiveSubscribersController->markActiveSubscribers($daysToInactive, self::BATCH_SIZE) === self::BATCH_SIZE) {

View File

@@ -6,11 +6,11 @@ use Codeception\Stub;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Cron\Workers\InactiveSubscribers;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
use MailPoet\Models\ScheduledTask; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\InactiveSubscribersController; use MailPoet\Subscribers\InactiveSubscribersController;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Idiorm\ORM;
class InactiveSubscribersTest extends \MailPoetTest { class InactiveSubscribersTest extends \MailPoetTest {
public $cronHelper; public $cronHelper;
@@ -18,9 +18,13 @@ class InactiveSubscribersTest extends \MailPoetTest {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
/** @var ScheduledTasksRepository */
private $scheduledTasksRepository;
public function _before() { public function _before() {
$this->settings = SettingsController::getInstance(); $this->settings = SettingsController::getInstance();
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table); $this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
$this->truncateEntity(ScheduledTaskEntity::class);
$this->settings->set('tracking.enabled', true); $this->settings->set('tracking.enabled', true);
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class); $this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
parent::_before(); parent::_before();
@@ -35,15 +39,15 @@ class InactiveSubscribersTest extends \MailPoetTest {
], $this); ], $this);
$worker = new InactiveSubscribers($controllerMock, $this->settings); $worker = new InactiveSubscribers($controllerMock, $this->settings);
$worker->processTaskStrategy(ScheduledTask::createOrUpdate([]), microtime(true)); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
$task = ScheduledTask::where('type', InactiveSubscribers::TASK_TYPE) $task = $this->scheduledTasksRepository->findOneBy(
->where('status', ScheduledTask::STATUS_SCHEDULED) ['type' => InactiveSubscribers::TASK_TYPE, 'status' => ScheduledTaskEntity::STATUS_SCHEDULED]
->findOne(); );
assert($task instanceof ScheduledTask); assert($task instanceof ScheduledTaskEntity);
expect($task)->isInstanceOf(ScheduledTask::class); expect($task)->isInstanceOf(ScheduledTaskEntity::class);
expect($task->scheduledAt)->greaterThan(new Carbon()); expect($task->getScheduledAt())->greaterThan(new Carbon());
} }
public function testItDoesNotRunWhenTrackingIsDisabled() { public function testItDoesNotRunWhenTrackingIsDisabled() {
@@ -56,7 +60,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
], $this); ], $this);
$worker = new InactiveSubscribers($controllerMock, $this->settings); $worker = new InactiveSubscribers($controllerMock, $this->settings);
$worker->processTaskStrategy(ScheduledTask::createOrUpdate([]), microtime(true)); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
} }
public function testItSchedulesNextRunWhenFinished() { public function testItSchedulesNextRunWhenFinished() {
@@ -68,15 +72,15 @@ class InactiveSubscribersTest extends \MailPoetTest {
], $this); ], $this);
$worker = new InactiveSubscribers($controllerMock, $this->settings); $worker = new InactiveSubscribers($controllerMock, $this->settings);
$worker->processTaskStrategy(ScheduledTask::createOrUpdate([]), microtime(true)); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true));
$task = ScheduledTask::where('type', InactiveSubscribers::TASK_TYPE) $task = $this->scheduledTasksRepository->findOneBy(
->where('status', ScheduledTask::STATUS_SCHEDULED) ['type' => InactiveSubscribers::TASK_TYPE, 'status' => ScheduledTaskEntity::STATUS_SCHEDULED]
->findOne(); );
assert($task instanceof ScheduledTask); assert($task instanceof ScheduledTaskEntity);
expect($task)->isInstanceOf(ScheduledTask::class); expect($task)->isInstanceOf(ScheduledTaskEntity::class);
expect($task->scheduledAt)->greaterThan(new Carbon()); expect($task->getScheduledAt())->greaterThan(new Carbon());
} }
public function testRunBatchesUntilItIsFinished() { public function testRunBatchesUntilItIsFinished() {
@@ -88,9 +92,11 @@ class InactiveSubscribersTest extends \MailPoetTest {
], $this); ], $this);
$worker = new InactiveSubscribers($controllerMock, $this->settings); $worker = new InactiveSubscribers($controllerMock, $this->settings);
$worker->processTaskStrategy(ScheduledTask::createOrUpdate( $task = new ScheduledTaskEntity();
['meta' => ['max_subscriber_id' => 2001 /* 3 iterations of BATCH_SIZE in markInactiveSubscribers */]] $task->setMeta(['max_subscriber_id' => 2001 /* 3 iterations of BATCH_SIZE in markInactiveSubscribers */]);
), microtime(true)); $this->entityManager->persist($task);
$this->entityManager->flush();
$worker->processTaskStrategy($task, microtime(true));
expect($controllerMock->markInactiveSubscribers(5, 1000))->equals(0); expect($controllerMock->markInactiveSubscribers(5, 1000))->equals(0);
expect($controllerMock->markActiveSubscribers(5, 1000))->equals(0); expect($controllerMock->markActiveSubscribers(5, 1000))->equals(0);
@@ -104,7 +110,7 @@ class InactiveSubscribersTest extends \MailPoetTest {
'reactivateInactiveSubscribers' => Stub\Expected::never(), 'reactivateInactiveSubscribers' => Stub\Expected::never(),
], $this); ], $this);
$task = ScheduledTask::createOrUpdate([]); $task = new ScheduledTaskEntity();
$worker = new InactiveSubscribers($controllerMock, $this->settings); $worker = new InactiveSubscribers($controllerMock, $this->settings);
$worker->processTaskStrategy($task, microtime(true)); $worker->processTaskStrategy($task, microtime(true));
@@ -124,6 +130,6 @@ class InactiveSubscribersTest extends \MailPoetTest {
$worker = new InactiveSubscribers($controllerMock, $this->settings); $worker = new InactiveSubscribers($controllerMock, $this->settings);
$this->expectException(\Exception::class); $this->expectException(\Exception::class);
$this->expectExceptionMessage('Maximum execution time has been reached.'); $this->expectExceptionMessage('Maximum execution time has been reached.');
$worker->processTaskStrategy(ScheduledTask::createOrUpdate([]), microtime(true) - $this->cronHelper->getDaemonExecutionLimit()); $worker->processTaskStrategy(new ScheduledTaskEntity(), microtime(true) - $this->cronHelper->getDaemonExecutionLimit());
} }
} }