Refactor help endpoint
[MAILPOET-5755]
This commit is contained in:
committed by
Ján Mikláš
parent
5253d79e81
commit
4af5720741
@ -1,9 +1,10 @@
|
|||||||
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
<?php declare(strict_types = 1);
|
||||||
|
|
||||||
namespace MailPoet\API\JSON\v1;
|
namespace MailPoet\API\JSON\v1;
|
||||||
|
|
||||||
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
||||||
use MailPoet\API\JSON\Error as APIError;
|
use MailPoet\API\JSON\Error as APIError;
|
||||||
|
use MailPoet\API\JSON\Response;
|
||||||
use MailPoet\Config\AccessControl;
|
use MailPoet\Config\AccessControl;
|
||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
@ -22,47 +23,46 @@ class Help extends APIEndpoint {
|
|||||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cancelTask($data) {
|
public function cancelTask($data): Response {
|
||||||
$task = $this->validateAndFindTask($data);
|
|
||||||
if (!($task instanceof ScheduledTaskEntity)) {
|
|
||||||
return $task;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
|
$this->validateTaskId($data);
|
||||||
|
|
||||||
|
$task = $this->scheduledTasksRepository->findOneById($data['id']);
|
||||||
|
if (!$task instanceof ScheduledTaskEntity) {
|
||||||
|
return $this->errorResponse([
|
||||||
|
APIError::NOT_FOUND => __('Task not found.', 'mailpoet'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
$this->scheduledTasksRepository->cancelTask($task);
|
$this->scheduledTasksRepository->cancelTask($task);
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->handleException($e->getMessage());
|
return $this->badRequest([ApiError::BAD_REQUEST => $e->getMessage()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function rescheduleTask($data) {
|
public function rescheduleTask($data): Response {
|
||||||
$task = $this->validateAndFindTask($data);
|
|
||||||
if (!($task instanceof ScheduledTaskEntity)) {
|
|
||||||
return $task;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
|
$this->validateTaskId($data);
|
||||||
|
|
||||||
|
$task = $this->scheduledTasksRepository->findOneById($data['id']);
|
||||||
|
if (!$task instanceof ScheduledTaskEntity) {
|
||||||
|
return $this->errorResponse([
|
||||||
|
APIError::NOT_FOUND => __('Task not found.', 'mailpoet'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
$this->scheduledTasksRepository->rescheduleTask($task);
|
$this->scheduledTasksRepository->rescheduleTask($task);
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->handleException($e->getMessage());
|
return $this->badRequest([ApiError::BAD_REQUEST => $e->getMessage()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function validateAndFindTask($data) {
|
private function validateTaskId($data): void {
|
||||||
if (!isset($data['id'])) {
|
$isValid = isset($data['id']) && is_numeric($data['id']);
|
||||||
return $this->handleException(__('Missing mandatory argument `id`.', 'mailpoet'));
|
if (!$isValid) {
|
||||||
|
throw new \Exception(__('Invalid or missing parameter `id`.', 'mailpoet'));
|
||||||
}
|
}
|
||||||
$id = $data['id'];
|
|
||||||
$task = $this->scheduledTasksRepository->findOneById($id);
|
|
||||||
if (!$task) {
|
|
||||||
return $this->handleException(__('Task not found.', 'mailpoet'));
|
|
||||||
}
|
|
||||||
return $task;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function handleException($message): \MailPoet\API\JSON\ErrorResponse {
|
|
||||||
return $this->badRequest([
|
|
||||||
ApiError::BAD_REQUEST => $message,
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Test\API\JSON\v1;
|
namespace MailPoet\Test\API\JSON\v1;
|
||||||
|
|
||||||
|
use MailPoet\API\JSON\ErrorResponse;
|
||||||
use MailPoet\API\JSON\Response as APIResponse;
|
use MailPoet\API\JSON\Response as APIResponse;
|
||||||
use MailPoet\API\JSON\v1\Help;
|
use MailPoet\API\JSON\v1\Help;
|
||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
@ -10,11 +11,8 @@ use MailPoet\Test\DataFactories\ScheduledTask as ScheduledTaskFactory;
|
|||||||
|
|
||||||
class HelpTest extends \MailPoetTest {
|
class HelpTest extends \MailPoetTest {
|
||||||
|
|
||||||
/** @var Help */
|
private Help $endpoint;
|
||||||
private $endpoint;
|
private ScheduledTasksRepository $scheduledTasksRepository;
|
||||||
|
|
||||||
/** @var ScheduledTasksRepository */
|
|
||||||
private $scheduledTasksRepository;
|
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
@ -23,31 +21,36 @@ class HelpTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsErrorWhenIdIsMissing() {
|
public function testItReturnsErrorWhenIdIsMissing() {
|
||||||
|
/** @var ErrorResponse $response */
|
||||||
$response = $this->endpoint->cancelTask([]);
|
$response = $this->endpoint->cancelTask([]);
|
||||||
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
||||||
verify($response->status)->equals(400);
|
verify($response->status)->equals(400);
|
||||||
verify($response->errors[0]['message'])->equals('Missing mandatory argument `id`.');
|
verify($response->errors[0]['message'])->equals('Invalid or missing parameter `id`.');
|
||||||
|
|
||||||
|
/** @var ErrorResponse $response */
|
||||||
$response = $this->endpoint->rescheduleTask([]);
|
$response = $this->endpoint->rescheduleTask([]);
|
||||||
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
||||||
verify($response->status)->equals(400);
|
verify($response->status)->equals(400);
|
||||||
verify($response->errors[0]['message'])->equals('Missing mandatory argument `id`.');
|
verify($response->errors[0]['message'])->equals('Invalid or missing parameter `id`.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsErrorWhenTaskDoesntExist() {
|
public function testItReturnsErrorWhenTaskDoesntExist() {
|
||||||
|
/** @var ErrorResponse $response */
|
||||||
$response = $this->endpoint->cancelTask(['id' => 99999]);
|
$response = $this->endpoint->cancelTask(['id' => 99999]);
|
||||||
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
||||||
verify($response->status)->equals(400);
|
verify($response->status)->equals(404);
|
||||||
verify($response->errors[0]['message'])->equals('Task not found.');
|
verify($response->errors[0]['message'])->equals('Task not found.');
|
||||||
|
|
||||||
|
/** @var ErrorResponse $response */
|
||||||
$response = $this->endpoint->rescheduleTask(['id' => 99999]);
|
$response = $this->endpoint->rescheduleTask(['id' => 99999]);
|
||||||
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
||||||
verify($response->status)->equals(400);
|
verify($response->status)->equals(404);
|
||||||
verify($response->errors[0]['message'])->equals('Task not found.');
|
verify($response->errors[0]['message'])->equals('Task not found.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsErrorWhenCancellingCompletedTask() {
|
public function testItReturnsErrorWhenCancellingCompletedTask() {
|
||||||
$task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, new \DateTime());
|
$task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, new \DateTime());
|
||||||
|
/** @var ErrorResponse $response */
|
||||||
$response = $this->endpoint->cancelTask(['id' => $task->getId()]);
|
$response = $this->endpoint->cancelTask(['id' => $task->getId()]);
|
||||||
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
||||||
verify($response->status)->equals(400);
|
verify($response->status)->equals(400);
|
||||||
@ -56,6 +59,7 @@ class HelpTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItReturnsErrorWhenReschedulingCompletedTask() {
|
public function testItReturnsErrorWhenReschedulingCompletedTask() {
|
||||||
$task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, new \DateTime());
|
$task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, new \DateTime());
|
||||||
|
/** @var ErrorResponse $response */
|
||||||
$response = $this->endpoint->rescheduleTask(['id' => $task->getId()]);
|
$response = $this->endpoint->rescheduleTask(['id' => $task->getId()]);
|
||||||
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse');
|
||||||
verify($response->status)->equals(400);
|
verify($response->status)->equals(400);
|
||||||
|
Reference in New Issue
Block a user