Expand intregration test coverage for API/JSON/v1/SendingQueue.php
Doing this before refactoring this class to use Doctrine instead of Paris. [MAILPOET-5684]
This commit is contained in:
committed by
Aschepikov
parent
4d021eeceb
commit
8734d9762b
@@ -8,11 +8,16 @@ use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
|||||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
|
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
use MailPoet\Newsletter\NewsletterValidator;
|
use MailPoet\Newsletter\NewsletterValidator;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Test\DataFactories\Newsletter;
|
use MailPoet\Test\DataFactories\Newsletter as NewsletterFactory;
|
||||||
use MailPoet\Test\DataFactories\NewsletterOption;
|
use MailPoet\Test\DataFactories\NewsletterOption;
|
||||||
|
use MailPoet\Test\DataFactories\ScheduledTask as ScheduledTaskFactory;
|
||||||
|
use MailPoet\Test\DataFactories\Segment as SegmentFactory;
|
||||||
|
use MailPoet\Test\DataFactories\SendingQueue as SendingQueueFactory;
|
||||||
|
use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory;
|
||||||
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
||||||
|
|
||||||
class SendingQueueTest extends \MailPoetTest {
|
class SendingQueueTest extends \MailPoetTest {
|
||||||
@@ -26,7 +31,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
parent::_before();
|
parent::_before();
|
||||||
$this->newsletterOptionsFactory = new NewsletterOption();
|
$this->newsletterOptionsFactory = new NewsletterOption();
|
||||||
|
|
||||||
$this->newsletter = (new Newsletter())
|
$this->newsletter = (new NewsletterFactory())
|
||||||
->withSubject('My Standard Newsletter')
|
->withSubject('My Standard Newsletter')
|
||||||
->withDefaultBody()
|
->withDefaultBody()
|
||||||
->create();
|
->create();
|
||||||
@@ -48,16 +53,38 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
];
|
];
|
||||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, $newsletterOptions);
|
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, $newsletterOptions);
|
||||||
|
|
||||||
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
$sendingQueueApi = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
$result = $sendingQueueApi->add(['newsletter_id' => $newsletter->getId()]);
|
||||||
$repo = $this->diContainer->get(ScheduledTasksRepository::class);
|
$sendingQueue = $newsletter->getLatestQueue();
|
||||||
$scheduledTask = $repo->findOneById($result->data['task_id']);
|
$this->assertInstanceOf(SendingQueueEntity::class, $sendingQueue);
|
||||||
|
$scheduledTask = $sendingQueue->getTask();
|
||||||
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTask);
|
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTask);
|
||||||
verify($scheduledTask->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED);
|
verify($scheduledTask->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||||
$scheduled = $scheduledTask->getScheduledAt();
|
$scheduled = $scheduledTask->getScheduledAt();
|
||||||
$this->assertInstanceOf(\DateTimeInterface::class, $scheduled);
|
$this->assertInstanceOf(\DateTimeInterface::class, $scheduled);
|
||||||
verify($scheduled->format('Y-m-d H:i:s'))->equals($newsletterOptions['scheduledAt']);
|
verify($scheduled->format('Y-m-d H:i:s'))->equals($newsletterOptions['scheduledAt']);
|
||||||
verify($scheduledTask->getType())->equals(SendingQueue::TASK_TYPE);
|
verify($scheduledTask->getType())->equals(SendingQueue::TASK_TYPE);
|
||||||
|
|
||||||
|
$this->assertSame($sendingQueue->getId(), $result->data['id']);
|
||||||
|
$this->assertSame(SendingQueue::TASK_TYPE, $result->data['type']);
|
||||||
|
$this->assertSame(ScheduledTaskEntity::STATUS_SCHEDULED, $result->data['status']);
|
||||||
|
$this->assertSame(5, $result->data['priority']);
|
||||||
|
$this->assertMatchesRegularExpression('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $result->data['scheduled_at']);
|
||||||
|
$this->assertNull($result->data['processed_at']);
|
||||||
|
$this->assertMatchesRegularExpression('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $result->data['created_at']);
|
||||||
|
$this->assertMatchesRegularExpression('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $result->data['updated_at']);
|
||||||
|
$this->assertNull($result->data['deleted_at']);
|
||||||
|
$this->assertNull($result->data['in_progress']);
|
||||||
|
$this->assertSame(0, $result->data['reschedule_count']);
|
||||||
|
$this->assertNull($result->data['meta']);
|
||||||
|
$this->assertSame($scheduledTask->getId(), $result->data['task_id']);
|
||||||
|
$this->assertSame($newsletter->getId(), $result->data['newsletter_id']);
|
||||||
|
$this->assertNull($result->data['newsletter_rendered_body']);
|
||||||
|
$this->assertNull($result->data['newsletter_rendered_subject']);
|
||||||
|
$this->assertSame(0, $result->data['count_total']);
|
||||||
|
$this->assertSame(0, $result->data['count_processed']);
|
||||||
|
$this->assertSame(0, $result->data['count_to_process']);
|
||||||
|
$this->assertSame(200, $result->status);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsErrorIfSubscribersLimitReached() {
|
public function testItReturnsErrorIfSubscribersLimitReached() {
|
||||||
@@ -110,6 +137,67 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
verify($scheduled->format('Y-m-d H:i:s'))->equals('2018-11-11 11:00:00');
|
verify($scheduled->format('Y-m-d H:i:s'))->equals('2018-11-11 11:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAddReturnsErrorIfThereAreNoSubscribersAssociatedWithTheNewsletter() {
|
||||||
|
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
|
$expectedResult = [
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'error' => 'unknown',
|
||||||
|
'message' => 'There are no subscribers in that list!',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = $sendingQueue->add(['newsletter_id' => $this->newsletter->getId()])->getData();
|
||||||
|
$this->assertSame($expectedResult, $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAddChangesNewsletterStatus() {
|
||||||
|
$sendingQueueApi = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
|
|
||||||
|
$segment = (new SegmentFactory())->create();
|
||||||
|
$subscriber = (new SubscriberFactory())->withSegments([$segment])->create();
|
||||||
|
$newsletter = (new NewsletterFactory())
|
||||||
|
->withSegments([$segment])
|
||||||
|
->withSubscriber($subscriber)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$this->assertSame(NewsletterEntity::STATUS_DRAFT, $newsletter->getStatus());
|
||||||
|
|
||||||
|
$result = $sendingQueueApi->add(['newsletter_id' => $newsletter->getId()]);
|
||||||
|
$sendingQueue = $newsletter->getLatestQueue();
|
||||||
|
$this->assertInstanceOf(SendingQueueEntity::class, $sendingQueue);
|
||||||
|
$scheduledTask = $sendingQueue->getTask();
|
||||||
|
$this->assertInstanceOf(ScheduledTaskEntity::class, $scheduledTask);
|
||||||
|
$this->assertSame(NewsletterEntity::STATUS_SENDING, $newsletter->getStatus());
|
||||||
|
$this->assertSame(1, $sendingQueue->getCountTotal());
|
||||||
|
$this->assertSame(0, $sendingQueue->getCountProcessed());
|
||||||
|
$this->assertSame(1, $sendingQueue->getCountToProcess());
|
||||||
|
$this->assertNull($scheduledTask->getStatus());
|
||||||
|
$this->assertNull($scheduledTask->getScheduledAt());
|
||||||
|
|
||||||
|
$this->assertSame($sendingQueue->getId(), $result->data['id']);
|
||||||
|
$this->assertSame(SendingQueue::TASK_TYPE, $result->data['type']);
|
||||||
|
$this->assertNull($result->data['status']);
|
||||||
|
$this->assertSame(5, $result->data['priority']);
|
||||||
|
$this->assertNull($result->data['scheduled_at']);
|
||||||
|
$this->assertNull($result->data['processed_at']);
|
||||||
|
$this->assertMatchesRegularExpression('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $result->data['created_at']);
|
||||||
|
$this->assertMatchesRegularExpression('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $result->data['updated_at']);
|
||||||
|
$this->assertNull($result->data['deleted_at']);
|
||||||
|
$this->assertNull($result->data['in_progress']);
|
||||||
|
$this->assertSame(0, $result->data['reschedule_count']);
|
||||||
|
$this->assertNull($result->data['meta']);
|
||||||
|
$this->assertSame($scheduledTask->getId(), $result->data['task_id']);
|
||||||
|
$this->assertSame($newsletter->getId(), $result->data['newsletter_id']);
|
||||||
|
$this->assertNull($result->data['newsletter_rendered_body']);
|
||||||
|
$this->assertNull($result->data['newsletter_rendered_subject']);
|
||||||
|
$this->assertSame(1, $result->data['count_total']);
|
||||||
|
$this->assertSame(0, $result->data['count_processed']);
|
||||||
|
$this->assertSame(1, $result->data['count_to_process']);
|
||||||
|
$this->assertSame(200, $result->status);
|
||||||
|
}
|
||||||
|
|
||||||
public function testItRejectsInvalidNewsletters() {
|
public function testItRejectsInvalidNewsletters() {
|
||||||
$sendingQueue = $this->getServiceWithOverrides(SendingQueueAPI::class, [
|
$sendingQueue = $this->getServiceWithOverrides(SendingQueueAPI::class, [
|
||||||
'newsletterValidator' => Stub::make(NewsletterValidator::class, ['validate' => 'some error']),
|
'newsletterValidator' => Stub::make(NewsletterValidator::class, ['validate' => 'some error']),
|
||||||
@@ -120,4 +208,24 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
verify($response['errors'][0]['message'])->stringContainsString('some error');
|
verify($response['errors'][0]['message'])->stringContainsString('some error');
|
||||||
verify($response['errors'][0]['error'])->stringContainsString('bad_request');
|
verify($response['errors'][0]['error'])->stringContainsString('bad_request');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAddReturnsErrorIfNewsletterIsAlreadyBeingSent() {
|
||||||
|
$scheduledTask = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, null);
|
||||||
|
(new SendingQueueFactory())->create($scheduledTask, $this->newsletter);
|
||||||
|
|
||||||
|
$expectedResult = [
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'error' => 'not_found',
|
||||||
|
'message' => 'This newsletter is already being sent.',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
|
|
||||||
|
$data = $sendingQueue->add(['newsletter_id' => $this->newsletter->getId()])->getData();
|
||||||
|
|
||||||
|
$this->assertSame($expectedResult, $data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user