Remove Tasks\State class and relevant test file
[MAILPOET-4355]
This commit is contained in:
@ -375,8 +375,6 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Services\AuthorizedEmailsController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Services\AuthorizedEmailsController::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Services\CongratulatoryMssEmailController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Services\CongratulatoryMssEmailController::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Services\AuthorizedSenderDomainController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Services\AuthorizedSenderDomainController::class)->setPublic(true);
|
||||||
// Tasks
|
|
||||||
$container->autowire(\MailPoet\Tasks\State::class);
|
|
||||||
// Settings
|
// Settings
|
||||||
$container->autowire(\MailPoet\Settings\SettingsController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Settings\SettingsController::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Settings\SettingsChangeHandler::class)->setPublic(true);
|
$container->autowire(\MailPoet\Settings\SettingsChangeHandler::class)->setPublic(true);
|
||||||
|
@ -1,113 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace MailPoet\Tasks;
|
|
||||||
|
|
||||||
use MailPoet\Cron\Workers\Scheduler;
|
|
||||||
use MailPoet\Models\ScheduledTask;
|
|
||||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
|
||||||
use MailPoet\Newsletter\Url as NewsletterUrl;
|
|
||||||
|
|
||||||
class State {
|
|
||||||
/** @var NewsletterUrl */
|
|
||||||
private $newsletterUrl;
|
|
||||||
|
|
||||||
/*** @var SendingQueuesRepository */
|
|
||||||
private $sendingQueuesRepository;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
NewsletterUrl $newsletterUrl,
|
|
||||||
SendingQueuesRepository $sendingQueuesRepository
|
|
||||||
) {
|
|
||||||
$this->newsletterUrl = $newsletterUrl;
|
|
||||||
$this->sendingQueuesRepository = $sendingQueuesRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getCountsPerStatus() {
|
|
||||||
$stats = [
|
|
||||||
ScheduledTask::STATUS_COMPLETED => 0,
|
|
||||||
ScheduledTask::STATUS_PAUSED => 0,
|
|
||||||
ScheduledTask::STATUS_SCHEDULED => 0,
|
|
||||||
ScheduledTask::VIRTUAL_STATUS_RUNNING => 0,
|
|
||||||
];
|
|
||||||
$counts = ScheduledTask::rawQuery(
|
|
||||||
"SELECT COUNT(*) as value, status
|
|
||||||
FROM `" . ScheduledTask::$_table . "`
|
|
||||||
WHERE deleted_at IS NULL AND `type` = 'sending'
|
|
||||||
GROUP BY status;"
|
|
||||||
)->findMany();
|
|
||||||
foreach ($counts as $count) {
|
|
||||||
if ($count->status === null) {
|
|
||||||
$stats[ScheduledTask::VIRTUAL_STATUS_RUNNING] = (int)$count->value;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$stats[$count->status] = (int)$count->value;
|
|
||||||
}
|
|
||||||
return $stats;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getLatestTasks(
|
|
||||||
$type = null,
|
|
||||||
$statuses = [
|
|
||||||
ScheduledTask::STATUS_COMPLETED,
|
|
||||||
ScheduledTask::STATUS_SCHEDULED,
|
|
||||||
ScheduledTask::VIRTUAL_STATUS_RUNNING,
|
|
||||||
],
|
|
||||||
$limit = Scheduler::TASK_BATCH_SIZE
|
|
||||||
) {
|
|
||||||
$tasks = [];
|
|
||||||
foreach ($statuses as $status) {
|
|
||||||
$query = ScheduledTask::orderByDesc('id')
|
|
||||||
->whereNull('deleted_at')
|
|
||||||
->limit($limit);
|
|
||||||
if ($type) {
|
|
||||||
$query = $query->where('type', $type);
|
|
||||||
}
|
|
||||||
if ($status === ScheduledTask::VIRTUAL_STATUS_RUNNING) {
|
|
||||||
$query = $query->whereNull('status');
|
|
||||||
} else {
|
|
||||||
$query = $query->where('status', $status);
|
|
||||||
}
|
|
||||||
$tasks = array_merge($tasks, $query->findMany());
|
|
||||||
}
|
|
||||||
|
|
||||||
return array_map(function ($task) {
|
|
||||||
return $this->buildTaskData($task);
|
|
||||||
}, $tasks);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private function buildTaskData(ScheduledTask $task) {
|
|
||||||
$queue = $newsletter = null;
|
|
||||||
if ($task->type === Sending::TASK_TYPE) {
|
|
||||||
$queue = $this->sendingQueuesRepository->findOneBy(['task' => $task->id]);
|
|
||||||
$newsletter = $queue ? $queue->getNewsletter() : null;
|
|
||||||
}
|
|
||||||
return [
|
|
||||||
'id' => (int)$task->id,
|
|
||||||
'type' => $task->type,
|
|
||||||
'priority' => (int)$task->priority,
|
|
||||||
'updated_at' => $task->updatedAt,
|
|
||||||
'scheduled_at' => $task->scheduledAt ? $task->scheduledAt : null,
|
|
||||||
'status' => $task->status,
|
|
||||||
'newsletter' => $queue && $newsletter ? [
|
|
||||||
'newsletter_id' => $newsletter->getId(),
|
|
||||||
'queue_id' => $queue->getId(),
|
|
||||||
'subject' => $queue->getNewsletterRenderedSubject() ?: $newsletter->getSubject(),
|
|
||||||
'preview_url' => $this->newsletterUrl->getViewInBrowserUrl($newsletter, null, $queue),
|
|
||||||
] : [
|
|
||||||
'newsletter_id' => null,
|
|
||||||
'queue_id' => null,
|
|
||||||
'subject' => null,
|
|
||||||
'preview_url' => null,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,112 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace MailPoet\Test\Tasks;
|
|
||||||
|
|
||||||
use MailPoet\Cron\Workers\SendingQueue\Migration;
|
|
||||||
use MailPoet\Models\Newsletter;
|
|
||||||
use MailPoet\Models\ScheduledTask;
|
|
||||||
use MailPoet\Models\SendingQueue;
|
|
||||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
|
||||||
use MailPoet\Newsletter\Url;
|
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
|
||||||
use MailPoet\Tasks\State;
|
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
|
||||||
|
|
||||||
class StateTest extends \MailPoetTest {
|
|
||||||
|
|
||||||
/** @var State */
|
|
||||||
private $tasksState;
|
|
||||||
|
|
||||||
public function _before() {
|
|
||||||
parent::_before();
|
|
||||||
$this->tasksState = new State(
|
|
||||||
$this->diContainer->get(Url::class),
|
|
||||||
$this->diContainer->get(SendingQueuesRepository::class)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItCanFetchBasicTasksData() {
|
|
||||||
$this->createNewScheduledTask(SendingTask::TASK_TYPE);
|
|
||||||
$this->createNewScheduledTask(Migration::TASK_TYPE);
|
|
||||||
$data = $this->tasksState->getLatestTasks();
|
|
||||||
expect(count($data))->equals(2);
|
|
||||||
expect($data[1]['id'])->equals(1);
|
|
||||||
expect($data[1]['type'])->equals(SendingTask::TASK_TYPE);
|
|
||||||
expect(is_int($data[1]['priority']))->true();
|
|
||||||
expect(is_string($data[1]['updated_at']))->true();
|
|
||||||
expect($data[1])->hasKey('scheduled_at');
|
|
||||||
expect($data[1]['status'])->notEmpty();
|
|
||||||
expect($data[1])->hasKey('newsletter');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItCanFilterTasksByType() {
|
|
||||||
$this->createNewScheduledTask(SendingTask::TASK_TYPE);
|
|
||||||
$this->createNewScheduledTask(Migration::TASK_TYPE);
|
|
||||||
$data = $this->tasksState->getLatestTasks(Migration::TASK_TYPE);
|
|
||||||
expect(count($data))->equals(1);
|
|
||||||
expect($data[0]['type'])->equals(Migration::TASK_TYPE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItCanFilterTasksByStatus() {
|
|
||||||
$this->createNewScheduledTask(SendingTask::TASK_TYPE, ScheduledTask::STATUS_COMPLETED);
|
|
||||||
$this->createNewScheduledTask(SendingTask::TASK_TYPE, ScheduledTask::STATUS_PAUSED);
|
|
||||||
$data = $this->tasksState->getLatestTasks(null, [ScheduledTask::STATUS_COMPLETED]);
|
|
||||||
expect(count($data))->equals(1);
|
|
||||||
expect($data[0]['status'])->equals(ScheduledTask::STATUS_COMPLETED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItFetchesNewsletterDataForSendingTasks() {
|
|
||||||
$task = $this->createNewScheduledTask(SendingTask::TASK_TYPE);
|
|
||||||
$newsletter = $this->createNewNewsletter();
|
|
||||||
$this->createNewSendingQueue($task->id, $newsletter->id, 'Rendered Subject');
|
|
||||||
$data = $this->tasksState->getLatestTasks();
|
|
||||||
expect($data[0]['newsletter']['newsletter_id'])->equals(1);
|
|
||||||
expect($data[0]['newsletter']['queue_id'])->equals(1);
|
|
||||||
expect($data[0]['newsletter']['subject'])->equals('Rendered Subject');
|
|
||||||
expect($data[0]['newsletter']['preview_url'])->notEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItDoesNotFailForSendingTaskWithMissingNewsletterInconsistentData() {
|
|
||||||
$task = $this->createNewScheduledTask(SendingTask::TASK_TYPE);
|
|
||||||
$this->createNewSendingQueue($task->id);
|
|
||||||
$data = $this->tasksState->getLatestTasks();
|
|
||||||
expect($data[0]['newsletter']['newsletter_id'])->equals(null);
|
|
||||||
expect($data[0]['newsletter']['queue_id'])->equals(null);
|
|
||||||
expect($data[0]['newsletter']['subject'])->equals(null);
|
|
||||||
expect($data[0]['newsletter']['preview_url'])->equals(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItDoesNotFailForSendingTaskWithoutQueue() {
|
|
||||||
$this->createNewScheduledTask(SendingTask::TASK_TYPE);
|
|
||||||
$data = $this->tasksState->getLatestTasks();
|
|
||||||
expect(count($data))->equals(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function createNewScheduledTask($type, $status = ScheduledTask::STATUS_COMPLETED) {
|
|
||||||
$task = ScheduledTask::create();
|
|
||||||
$task->type = $type;
|
|
||||||
$task->status = $status;
|
|
||||||
return $task->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function createNewNewsletter($subject = 'Test Subject') {
|
|
||||||
$newsletter = Newsletter::create();
|
|
||||||
$newsletter->type = Newsletter::TYPE_STANDARD;
|
|
||||||
$newsletter->subject = $subject;
|
|
||||||
return $newsletter->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function createNewSendingQueue($taskId, $newsletterId = null, $renderedSubject = null) {
|
|
||||||
$queue = SendingQueue::create();
|
|
||||||
$queue->newsletterId = $newsletterId;
|
|
||||||
$queue->taskId = $taskId;
|
|
||||||
$queue->newsletterRenderedSubject = $renderedSubject;
|
|
||||||
return $queue->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function _after() {
|
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
|
||||||
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user