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\CongratulatoryMssEmailController::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Services\AuthorizedSenderDomainController::class)->setPublic(true);
|
||||
// Tasks
|
||||
$container->autowire(\MailPoet\Tasks\State::class);
|
||||
// Settings
|
||||
$container->autowire(\MailPoet\Settings\SettingsController::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