Remove Tasks\State class and relevant test file

[MAILPOET-4355]
This commit is contained in:
Sam Najian
2022-08-12 17:13:23 +02:00
committed by Veljko V
parent e30e1847e2
commit c22d23f91c
3 changed files with 0 additions and 227 deletions

View File

@ -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);

View File

@ -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,
],
];
}
}

View File

@ -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);
}
}