Migrate method findCompletedByType() to Doctrine

[MAILPOET-2996]
This commit is contained in:
Rodrigo Primo
2021-09-28 15:26:40 -03:00
committed by Veljko V
parent 709b4d8fcd
commit e69a3f9a53
8 changed files with 20 additions and 54 deletions

View File

@@ -9,7 +9,6 @@ use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Services\Bridge\API; use MailPoet\Services\Bridge\API;
@@ -40,9 +39,6 @@ class Bounce extends SimpleWorker {
/** @var SubscribersRepository */ /** @var SubscribersRepository */
private $subscribersRepository; private $subscribersRepository;
/** @var ScheduledTasksRepository */
private $scheduledTasksRepository;
/** @var SendingQueuesRepository */ /** @var SendingQueuesRepository */
private $sendingQueuesRepository; private $sendingQueuesRepository;
@@ -52,7 +48,6 @@ class Bounce extends SimpleWorker {
public function __construct( public function __construct(
SettingsController $settings, SettingsController $settings,
SubscribersRepository $subscribersRepository, SubscribersRepository $subscribersRepository,
ScheduledTasksRepository $scheduledTasksRepository,
SendingQueuesRepository $sendingQueuesRepository, SendingQueuesRepository $sendingQueuesRepository,
StatisticsBouncesRepository $statisticsBouncesRepository, StatisticsBouncesRepository $statisticsBouncesRepository,
Bridge $bridge Bridge $bridge
@@ -61,7 +56,6 @@ class Bounce extends SimpleWorker {
$this->bridge = $bridge; $this->bridge = $bridge;
parent::__construct(); parent::__construct();
$this->subscribersRepository = $subscribersRepository; $this->subscribersRepository = $subscribersRepository;
$this->scheduledTasksRepository = $scheduledTasksRepository;
$this->sendingQueuesRepository = $sendingQueuesRepository; $this->sendingQueuesRepository = $sendingQueuesRepository;
$this->statisticsBouncesRepository = $statisticsBouncesRepository; $this->statisticsBouncesRepository = $statisticsBouncesRepository;
} }

View File

@@ -8,6 +8,7 @@ use MailPoet\Cron\CronWorkerRunner;
use MailPoet\Cron\CronWorkerScheduler; use MailPoet\Cron\CronWorkerScheduler;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
@@ -27,6 +28,9 @@ abstract class SimpleWorker implements CronWorkerInterface {
/** @var WPFunctions */ /** @var WPFunctions */
protected $wp; protected $wp;
/** @var ScheduledTasksRepository */
protected $scheduledTasksRepository;
public function __construct( public function __construct(
WPFunctions $wp = null WPFunctions $wp = null
) { ) {
@@ -38,6 +42,7 @@ abstract class SimpleWorker implements CronWorkerInterface {
$this->wp = $wp; $this->wp = $wp;
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class); $this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
$this->cronWorkerScheduler = ContainerWrapper::getInstance()->get(CronWorkerScheduler::class); $this->cronWorkerScheduler = ContainerWrapper::getInstance()->get(CronWorkerScheduler::class);
$this->scheduledTasksRepository = ContainerWrapper::getInstance()->get(ScheduledTasksRepository::class);
} }
public function getTaskType() { public function getTaskType() {
@@ -88,6 +93,6 @@ abstract class SimpleWorker implements CronWorkerInterface {
} }
protected function getCompletedTasks() { protected function getCompletedTasks() {
return ScheduledTask::findCompletedByType(static::TASK_TYPE, CronWorkerRunner::TASK_BATCH_SIZE); return $this->scheduledTasksRepository->findCompletedByType(static::TASK_TYPE, CronWorkerRunner::TASK_BATCH_SIZE);
} }
} }

View File

@@ -5,7 +5,6 @@ namespace MailPoet\Cron\Workers;
use MailPoet\Cache\TransientCache; use MailPoet\Cache\TransientCache;
use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SegmentEntity;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Segments\SegmentsRepository; use MailPoet\Segments\SegmentsRepository;
use MailPoet\Subscribers\SubscribersCountsController; use MailPoet\Subscribers\SubscribersCountsController;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@@ -26,21 +25,16 @@ class SubscribersCountCacheRecalculation extends SimpleWorker {
/** @var SubscribersCountsController */ /** @var SubscribersCountsController */
private $subscribersCountsController; private $subscribersCountsController;
/** @var ScheduledTasksRepository */
private $scheduledTasksRepository;
public function __construct( public function __construct(
TransientCache $transientCache, TransientCache $transientCache,
SegmentsRepository $segmentsRepository, SegmentsRepository $segmentsRepository,
SubscribersCountsController $subscribersCountsController, SubscribersCountsController $subscribersCountsController,
ScheduledTasksRepository $scheduledTasksRepository,
WPFunctions $wp WPFunctions $wp
) { ) {
parent::__construct($wp); parent::__construct($wp);
$this->transientCache = $transientCache; $this->transientCache = $transientCache;
$this->segmentsRepository = $segmentsRepository; $this->segmentsRepository = $segmentsRepository;
$this->subscribersCountsController = $subscribersCountsController; $this->subscribersCountsController = $subscribersCountsController;
$this->scheduledTasksRepository = $scheduledTasksRepository;
} }
public function processTaskStrategy(ScheduledTask $task, $timer) { public function processTaskStrategy(ScheduledTask $task, $timer) {

View File

@@ -168,10 +168,6 @@ class ScheduledTask extends Model {
return self::findByTypeAndStatus($type, ScheduledTask::STATUS_SCHEDULED, $limit, true); return self::findByTypeAndStatus($type, ScheduledTask::STATUS_SCHEDULED, $limit, true);
} }
public static function findCompletedByType($type, $limit = null) {
return self::findByTypeAndStatus($type, ScheduledTask::STATUS_COMPLETED, $limit);
}
private static function findByTypeAndStatus($type, $status, $limit = null, $future = false) { private static function findByTypeAndStatus($type, $status, $limit = null, $future = false) {
$query = ScheduledTask::where('type', $type) $query = ScheduledTask::where('type', $type)
->whereNull('deleted_at'); ->whereNull('deleted_at');

View File

@@ -97,6 +97,10 @@ class ScheduledTasksRepository extends Repository {
return $this->findByTypeAndStatus($type, null, $limit); return $this->findByTypeAndStatus($type, null, $limit);
} }
public function findCompletedByType($type, $limit = null) {
return $this->findByTypeAndStatus($type, ScheduledTaskEntity::STATUS_COMPLETED, $limit);
}
protected function findByTypeAndStatus($type, $status, $limit = null, $future = false) { protected function findByTypeAndStatus($type, $status, $limit = null, $future = false) {
$queryBuilder = $this->doctrineRepository->createQueryBuilder('st') $queryBuilder = $this->doctrineRepository->createQueryBuilder('st')
->select('st') ->select('st')

View File

@@ -13,7 +13,6 @@ use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Services\Bridge\API; use MailPoet\Services\Bridge\API;
@@ -57,7 +56,6 @@ class BounceTest extends \MailPoetTest {
$this->worker = new Bounce( $this->worker = new Bounce(
$this->diContainer->get(SettingsController::class), $this->diContainer->get(SettingsController::class),
$this->subscribersRepository, $this->subscribersRepository,
$this->diContainer->get(ScheduledTasksRepository::class),
$this->diContainer->get(SendingQueuesRepository::class), $this->diContainer->get(SendingQueuesRepository::class),
$this->diContainer->get(StatisticsBouncesRepository::class), $this->diContainer->get(StatisticsBouncesRepository::class),
$this->diContainer->get(Bridge::class) $this->diContainer->get(Bridge::class)
@@ -77,7 +75,6 @@ class BounceTest extends \MailPoetTest {
$worker = new Bounce( $worker = new Bounce(
$this->diContainer->get(SettingsController::class), $this->diContainer->get(SettingsController::class),
$this->subscribersRepository, $this->subscribersRepository,
$this->diContainer->get(ScheduledTasksRepository::class),
$this->diContainer->get(SendingQueuesRepository::class), $this->diContainer->get(SendingQueuesRepository::class),
$this->diContainer->get(StatisticsBouncesRepository::class), $this->diContainer->get(StatisticsBouncesRepository::class),
$this->diContainer->get(Bridge::class) $this->diContainer->get(Bridge::class)

View File

@@ -181,40 +181,6 @@ class ScheduledTaskTest extends \MailPoetTest {
expect($timeout)->equals(ScheduledTask::MAX_RESCHEDULE_TIMEOUT); expect($timeout)->equals(ScheduledTask::MAX_RESCHEDULE_TIMEOUT);
} }
public function testItCanGetCompletedTasks() {
// completed (scheduled in past)
ScheduledTask::createOrUpdate([
'type' => 'test',
'status' => ScheduledTask::STATUS_COMPLETED,
'scheduled_at' => Carbon::now()->subDay(),
]);
// deleted (should not be fetched)
ScheduledTask::createOrUpdate([
'type' => 'test',
'status' => ScheduledTask::STATUS_COMPLETED,
'scheduled_at' => Carbon::now()->subDay(),
'deleted_at' => Carbon::now(),
]);
// scheduled in future (should not be fetched)
ScheduledTask::createOrUpdate([
'type' => 'test',
'status' => ScheduledTask::STATUS_COMPLETED,
'scheduled_at' => Carbon::now()->addDay(),
]);
// wrong status (should not be fetched)
ScheduledTask::createOrUpdate([
'type' => 'test',
'status' => ScheduledTask::STATUS_SCHEDULED,
'scheduled_at' => Carbon::now()->subDay(),
]);
$tasks = ScheduledTask::findCompletedByType('test', 10);
expect($tasks)->count(1);
}
public function testItCanGetFutureScheduledTasks() { public function testItCanGetFutureScheduledTasks() {
// scheduled (in future) // scheduled (in future)
ScheduledTask::createOrUpdate([ ScheduledTask::createOrUpdate([

View File

@@ -38,6 +38,16 @@ class ScheduledTasksRepositoryTest extends \MailPoetTest {
$this->assertSame($expectedResult, $tasks); $this->assertSame($expectedResult, $tasks);
} }
public function testItCanGetCompletedTasks() {
$expectedResult[] = $this->createScheduledTask('test', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->subDay()); // completed (scheduled in past)
$this->createScheduledTask('test', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->subDay(), Carbon::now()); // deleted (should not be fetched)
$this->createScheduledTask('test', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->addDay()); // scheduled in future (should not be fetched)
$this->createScheduledTask('test', ScheduledTaskEntity::STATUS_SCHEDULED, Carbon::now()->subDay()); // wrong status (should not be fetched)
$tasks = $this->repository->findCompletedByType('test', 10);
$this->assertSame($expectedResult, $tasks);
}
public function cleanup() { public function cleanup() {
$this->truncateEntity(ScheduledTaskEntity::class); $this->truncateEntity(ScheduledTaskEntity::class);
} }