diff --git a/mailpoet/tests/integration/API/JSON/v1/HelpTest.php b/mailpoet/tests/integration/API/JSON/v1/HelpTest.php new file mode 100644 index 0000000000..35ead34c19 --- /dev/null +++ b/mailpoet/tests/integration/API/JSON/v1/HelpTest.php @@ -0,0 +1,94 @@ +endpoint = $this->diContainer->get(Help::class); + $this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class); + } + + public function testItReturnsErrorWhenIdIsMissing() { + $response = $this->endpoint->cancelTask([]); + verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse'); + verify($response->status)->equals(400); + verify($response->errors[0]['message'])->equals('Missing mandatory argument `id`.'); + + $response = $this->endpoint->rescheduleTask([]); + verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse'); + verify($response->status)->equals(400); + verify($response->errors[0]['message'])->equals('Missing mandatory argument `id`.'); + } + + public function testItReturnsErrorWhenTaskDoesntExist() { + $response = $this->endpoint->cancelTask(['id' => 99999]); + verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse'); + verify($response->status)->equals(400); + verify($response->errors[0]['message'])->equals('Task not found.'); + + $response = $this->endpoint->rescheduleTask(['id' => 99999]); + verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse'); + verify($response->status)->equals(400); + verify($response->errors[0]['message'])->equals('Task not found.'); + } + + public function testItReturnsErrorWhenCancellingCompletedTask() { + $task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, new \DateTime()); + $response = $this->endpoint->cancelTask(['id' => $task->getId()]); + verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse'); + verify($response->status)->equals(400); + verify($response->errors[0]['message'])->equals('Only scheduled tasks can be cancelled'); + } + + public function testItReturnsErrorWhenReschedulingCompletedTask() { + $task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, new \DateTime()); + $response = $this->endpoint->rescheduleTask(['id' => $task->getId()]); + verify($response)->instanceOf('\MailPoet\API\JSON\ErrorResponse'); + verify($response->status)->equals(400); + verify($response->errors[0]['message'])->equals('Only cancelled tasks can be rescheduled'); + } + + public function testItCanCancelTask() { + $task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_SCHEDULED, new \DateTime()); + $response = $this->endpoint->cancelTask(['id' => $task->getId()]); + verify($response)->instanceOf(APIResponse::class); + verify($response->status)->equals(200); + + $task = $this->scheduledTasksRepository->findOneById($task->getId()); + verify($task)->instanceOf(ScheduledTaskEntity::class); + if ($task) { + verify($task->getStatus())->equals(ScheduledTaskEntity::STATUS_CANCELLED); + verify($task->getCancelledAt())->notNull(); + verify($task->getInProgress())->equals(0); + } + } + + public function testItCanRescheduleTask() { + $task = (new ScheduledTaskFactory())->create('sending', ScheduledTaskEntity::STATUS_CANCELLED, new \DateTime()); + $response = $this->endpoint->rescheduleTask(['id' => $task->getId()]); + verify($response)->instanceOf(APIResponse::class); + verify($response->status)->equals(200); + + $task = $this->scheduledTasksRepository->findOneById($task->getId()); + verify($task)->instanceOf(ScheduledTaskEntity::class); + if ($task) { + verify($task->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED); + verify($task->getCancelledAt())->null(); + verify($task->getInProgress())->null(); + } + } +}