Migrate method findCompletedByType() to Doctrine
[MAILPOET-2996]
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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');
|
||||||
|
@@ -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')
|
||||||
|
@@ -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)
|
||||||
|
@@ -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([
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user