Refactor test to doctrine
[MAILPOET-3876]
This commit is contained in:
@ -7,32 +7,36 @@ use Codeception\Util\Stub;
|
|||||||
use MailPoet\API\JSON\Response as APIResponse;
|
use MailPoet\API\JSON\Response as APIResponse;
|
||||||
use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Entities\NewsletterOptionEntity;
|
||||||
use MailPoet\Models\NewsletterOption;
|
use MailPoet\Entities\NewsletterOptionFieldEntity;
|
||||||
use MailPoet\Models\NewsletterOptionField;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
|
use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository;
|
||||||
|
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||||
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
use MailPoet\Segments\SubscribersFinder;
|
use MailPoet\Segments\SubscribersFinder;
|
||||||
use MailPoet\Services\Bridge;
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Settings\SettingsRepository;
|
use MailPoet\Settings\SettingsRepository;
|
||||||
use MailPoet\Tasks\Sending;
|
use MailPoet\Tasks\Sending;
|
||||||
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
|
||||||
|
|
||||||
class SendingQueueTest extends \MailPoetTest {
|
class SendingQueueTest extends \MailPoetTest {
|
||||||
public $newsletter;
|
/** @var NewsletterEntity */
|
||||||
|
private $newsletter;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->newsletter = Newsletter::createOrUpdate(
|
$this->clean();
|
||||||
[
|
|
||||||
'subject' => 'My Standard Newsletter',
|
$this->newsletter = new NewsletterEntity();
|
||||||
'body' => Fixtures::get('newsletter_body_template'),
|
$this->newsletter->setSubject('My Standard Newsletter');
|
||||||
'type' => Newsletter::TYPE_STANDARD,
|
$this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
|
||||||
]
|
$this->newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||||
);
|
$this->entityManager->persist($this->newsletter);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
$settings = SettingsController::getInstance();
|
$settings = SettingsController::getInstance();
|
||||||
$settings->set('sender', [
|
$settings->set('sender', [
|
||||||
'name' => 'John Doe',
|
'name' => 'John Doe',
|
||||||
@ -42,25 +46,26 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItCreatesNewScheduledSendingQueueTask() {
|
public function testItCreatesNewScheduledSendingQueueTask() {
|
||||||
$newsletter = $this->newsletter;
|
$newsletter = $this->newsletter;
|
||||||
$newsletter->status = Newsletter::STATUS_SCHEDULED;
|
$newsletter->setStatus(NewsletterEntity::STATUS_SCHEDULED);
|
||||||
$newsletter->save();
|
$this->entityManager->flush();
|
||||||
$newletterOptions = [
|
$newletterOptions = [
|
||||||
'isScheduled' => 1,
|
'isScheduled' => 1,
|
||||||
'scheduledAt' => '2018-10-10 10:00:00',
|
'scheduledAt' => '2018-10-10 10:00:00',
|
||||||
];
|
];
|
||||||
$this->_createOrUpdateNewsletterOptions(
|
$this->_createOrUpdateNewsletterOptions(
|
||||||
$newsletter->id,
|
$newsletter,
|
||||||
Newsletter::TYPE_STANDARD,
|
NewsletterEntity::TYPE_STANDARD,
|
||||||
$newletterOptions
|
$newletterOptions
|
||||||
);
|
);
|
||||||
|
|
||||||
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
$result = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||||
$scheduledTask = ScheduledTask::findOne($result->data['task_id']);
|
$repo = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||||
assert($scheduledTask instanceof ScheduledTask);
|
$scheduledTask = $repo->findOneById($result->data['task_id']);
|
||||||
expect($scheduledTask->status)->equals(ScheduledTask::STATUS_SCHEDULED);
|
assert($scheduledTask instanceof ScheduledTaskEntity);
|
||||||
expect($scheduledTask->scheduledAt)->equals($newletterOptions['scheduledAt']);
|
expect($scheduledTask->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||||
expect($scheduledTask->type)->equals(Sending::TASK_TYPE);
|
expect($scheduledTask->getScheduledAt()->format('Y-m-d H:i:s'))->equals($newletterOptions['scheduledAt']);
|
||||||
|
expect($scheduledTask->getType())->equals(Sending::TASK_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReturnsErrorIfSubscribersLimitReached() {
|
public function testItReturnsErrorIfSubscribersLimitReached() {
|
||||||
@ -72,49 +77,52 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->diContainer->get(Bridge::class),
|
$this->diContainer->get(Bridge::class),
|
||||||
$this->diContainer->get(SubscribersFinder::class)
|
$this->diContainer->get(SubscribersFinder::class)
|
||||||
);
|
);
|
||||||
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->id]);
|
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->getId()]);
|
||||||
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
||||||
$res = $sendingQueue->resume(['newsletter_id' => $this->newsletter->id]);
|
$res = $sendingQueue->resume(['newsletter_id' => $this->newsletter->getId()]);
|
||||||
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
expect($res->status)->equals(APIResponse::STATUS_FORBIDDEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItReschedulesScheduledSendingQueueTask() {
|
public function testItReschedulesScheduledSendingQueueTask() {
|
||||||
$newsletter = $this->newsletter;
|
$newsletter = $this->newsletter;
|
||||||
$newsletter->status = Newsletter::STATUS_SCHEDULED;
|
$newsletter->setStatus(NewsletterEntity::STATUS_SCHEDULED);
|
||||||
$newsletter->save();
|
$this->entityManager->flush();
|
||||||
$newletterOptions = [
|
$newletterOptions = [
|
||||||
'isScheduled' => 1,
|
'isScheduled' => 1,
|
||||||
'scheduledAt' => '2018-10-10 10:00:00',
|
'scheduledAt' => '2018-10-10 10:00:00',
|
||||||
];
|
];
|
||||||
$this->_createOrUpdateNewsletterOptions(
|
$this->_createOrUpdateNewsletterOptions(
|
||||||
$newsletter->id,
|
$newsletter,
|
||||||
Newsletter::TYPE_STANDARD,
|
NewsletterEntity::TYPE_STANDARD,
|
||||||
$newletterOptions
|
$newletterOptions
|
||||||
);
|
);
|
||||||
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||||
|
|
||||||
// add scheduled task
|
// add scheduled task
|
||||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
$result = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||||
$scheduledTask = ScheduledTask::findOne($result->data['task_id']);
|
$repo = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||||
assert($scheduledTask instanceof ScheduledTask);
|
$scheduledTask = $repo->findOneById($result->data['task_id']);
|
||||||
expect($scheduledTask->scheduledAt)->equals('2018-10-10 10:00:00');
|
assert($scheduledTask instanceof ScheduledTaskEntity);
|
||||||
|
expect($scheduledTask->getScheduledAt()->format('Y-m-d H:i:s'))->equals('2018-10-10 10:00:00');
|
||||||
|
|
||||||
// update scheduled time
|
// update scheduled time
|
||||||
$newletterOptions = [
|
$newletterOptions = [
|
||||||
'scheduledAt' => '2018-11-11 11:00:00',
|
'scheduledAt' => '2018-11-11 11:00:00',
|
||||||
];
|
];
|
||||||
$this->_createOrUpdateNewsletterOptions(
|
$this->_createOrUpdateNewsletterOptions(
|
||||||
$newsletter->id,
|
$newsletter,
|
||||||
Newsletter::TYPE_STANDARD,
|
NewsletterEntity::TYPE_STANDARD,
|
||||||
$newletterOptions
|
$newletterOptions
|
||||||
);
|
);
|
||||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->id]);
|
$result = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||||
$rescheduledTask = ScheduledTask::findOne($result->data['task_id']);
|
$repo = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||||
assert($rescheduledTask instanceof ScheduledTask);
|
$this->entityManager->clear();
|
||||||
|
$rescheduledTask = $repo->findOneById($result->data['task_id']);
|
||||||
|
assert($rescheduledTask instanceof ScheduledTaskEntity);
|
||||||
// new task was not created
|
// new task was not created
|
||||||
expect($rescheduledTask->id)->equals($scheduledTask->id);
|
expect($rescheduledTask->getId())->equals($scheduledTask->getId());
|
||||||
// scheduled time was updated
|
// scheduled time was updated
|
||||||
expect($rescheduledTask->scheduledAt)->equals('2018-11-11 11:00:00');
|
expect($rescheduledTask->getScheduledAt()->format('Y-m-d H:i:s'))->equals('2018-11-11 11:00:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItRejectsNewsletterWithoutUnsubscribeLink() {
|
public function testItRejectsNewsletterWithoutUnsubscribeLink() {
|
||||||
@ -139,37 +147,35 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
expect($response['errors'][0]['error'])->stringContainsString('bad_request');
|
expect($response['errors'][0]['error'])->stringContainsString('bad_request');
|
||||||
}
|
}
|
||||||
|
|
||||||
private function _createOrUpdateNewsletterOptions($newsletterId, $newsletterType, $options) {
|
private function _createOrUpdateNewsletterOptions(NewsletterEntity $newsletter, $newsletterType, $options) {
|
||||||
|
$newsletterOptionFieldRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
|
||||||
|
$newsletterOptionRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
||||||
|
|
||||||
foreach ($options as $option => $value) {
|
foreach ($options as $option => $value) {
|
||||||
$newsletterOptionField = NewsletterOptionField::where('name', $option)->findOne();
|
$newsletterOptionField = $newsletterOptionFieldRepository->findOneBy(['name' => $option]);
|
||||||
if (!$newsletterOptionField) {
|
if (!$newsletterOptionField instanceof NewsletterOptionFieldEntity) {
|
||||||
$newsletterOptionField = NewsletterOptionField::create();
|
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||||
$newsletterOptionField->name = $option;
|
$newsletterOptionField->setName($option);
|
||||||
$newsletterOptionField->newsletterType = $newsletterType;
|
$newsletterOptionField->setNewsletterType($newsletterType);
|
||||||
$newsletterOptionField->save();
|
$this->entityManager->persist($newsletterOptionField);
|
||||||
expect($newsletterOptionField->getErrors())->false();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$newsletterOption = NewsletterOption::where('newsletter_id', $newsletterId)
|
$newsletterOption = $newsletterOptionRepository->findOneBy(['newsletter' => $newsletter, 'optionField' => $newsletterOptionField]);
|
||||||
->where('option_field_id', $newsletterOptionField->id)
|
if (!$newsletterOption instanceof NewsletterOptionEntity) {
|
||||||
->findOne();
|
$newsletterOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||||
if (!$newsletterOption) {
|
$this->entityManager->persist($newsletterOption);
|
||||||
$newsletterOption = NewsletterOption::create();
|
|
||||||
$newsletterOption->optionFieldId = (int)$newsletterOptionField->id;
|
|
||||||
$newsletterOption->newsletterId = $newsletterId;
|
|
||||||
}
|
}
|
||||||
$newsletterOption->value = $value;
|
$newsletterOption->setValue($value);
|
||||||
$newsletterOption->save();
|
|
||||||
expect($newsletterOption->getErrors())->false();
|
|
||||||
}
|
}
|
||||||
|
$this->entityManager->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function clean() {
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
|
||||||
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
|
||||||
ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
|
|
||||||
$this->diContainer->get(SettingsRepository::class)->truncate();
|
$this->diContainer->get(SettingsRepository::class)->truncate();
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueueModel::$_table);
|
$this->truncateEntity(NewsletterEntity::class);
|
||||||
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
|
$this->truncateEntity(NewsletterOptionEntity::class);
|
||||||
|
$this->truncateEntity(NewsletterOptionFieldEntity::class);
|
||||||
|
$this->truncateEntity(SendingQueueEntity::class);
|
||||||
|
$this->truncateEntity(ScheduledTaskEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user