Rewrite newsletter template API tests to Doctrine
[MAILPOET-2645]
This commit is contained in:
@@ -4,52 +4,62 @@ namespace MailPoet\Test\API\JSON\v1;
|
|||||||
|
|
||||||
use MailPoet\API\JSON\Response as APIResponse;
|
use MailPoet\API\JSON\Response as APIResponse;
|
||||||
use MailPoet\API\JSON\v1\NewsletterTemplates;
|
use MailPoet\API\JSON\v1\NewsletterTemplates;
|
||||||
use MailPoet\Models\NewsletterTemplate;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
|
use MailPoet\Entities\NewsletterTemplateEntity;
|
||||||
|
use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
|
||||||
|
|
||||||
class NewsletterTemplatesTest extends \MailPoetTest {
|
class NewsletterTemplatesTest extends \MailPoetTest {
|
||||||
|
/** @var NewsletterTemplatesRepository */
|
||||||
|
private $newsletterTemplatesRepository;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
NewsletterTemplate::deleteMany();
|
$this->truncateEntity(NewsletterEntity::class);
|
||||||
NewsletterTemplate::createOrUpdate([
|
$this->truncateEntity(NewsletterTemplateEntity::class);
|
||||||
'name' => 'Template #1',
|
$this->newsletterTemplatesRepository = $this->diContainer->get(NewsletterTemplatesRepository::class);
|
||||||
'body' => '{"key1": "value1"}',
|
|
||||||
]);
|
|
||||||
|
|
||||||
NewsletterTemplate::createOrUpdate([
|
$template1 = new NewsletterTemplateEntity();
|
||||||
'name' => 'Template #2',
|
$template1->setName('Template #1');
|
||||||
'newsletter_id' => 1,
|
$template1->setBody(['key1' => 'value1']);
|
||||||
'body' => '{"key2": "value2"}',
|
$this->entityManager->persist($template1);
|
||||||
]);
|
|
||||||
|
$template2 = new NewsletterTemplateEntity();
|
||||||
|
$template2->setName('Template #2');
|
||||||
|
$template2->setBody(['key2' => 'value2']);
|
||||||
|
$template2->setNewsletter($this->entityManager->getReference(NewsletterEntity::class, 1));
|
||||||
|
$this->entityManager->persist($template2);
|
||||||
|
|
||||||
|
$this->entityManager->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanGetANewsletterTemplate() {
|
public function testItCanGetANewsletterTemplate() {
|
||||||
$template = NewsletterTemplate::where('name', 'Template #1')->findOne();
|
$template = $this->newsletterTemplatesRepository->findOneBy(['name' => 'Template #1']);
|
||||||
|
assert($template instanceof NewsletterTemplateEntity);
|
||||||
|
|
||||||
$router = new NewsletterTemplates();
|
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
|
||||||
$response = $router->get(/* missing id */);
|
$response = $endpoint->get(/* missing id */);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||||
expect($response->errors[0]['message'])
|
expect($response->errors[0]['message'])
|
||||||
->equals('This template does not exist.');
|
->equals('This template does not exist.');
|
||||||
|
|
||||||
$response = $router->get(['id' => 'not_an_id']);
|
$response = $endpoint->get(['id' => 'not_an_id']);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||||
expect($response->errors[0]['message'])
|
expect($response->errors[0]['message'])
|
||||||
->equals('This template does not exist.');
|
->equals('This template does not exist.');
|
||||||
|
|
||||||
$response = $router->get(['id' => $template->id]);
|
$response = $endpoint->get(['id' => $template->getId()]);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->equals(
|
expect($response->data['name'])->same('Template #1');
|
||||||
$template->asArray()
|
expect($response->data['body'])->same(['key1' => 'value1']);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanGetAllNewsletterTemplates() {
|
public function testItCanGetAllNewsletterTemplates() {
|
||||||
$templates = NewsletterTemplate::count();
|
$templates = $this->newsletterTemplatesRepository->findAll();
|
||||||
|
|
||||||
$router = new NewsletterTemplates();
|
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
|
||||||
$response = $router->getAll();
|
$response = $endpoint->getAll();
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->count($templates);
|
expect($response->data)->count(count($templates));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanSaveANewTemplate() {
|
public function testItCanSaveANewTemplate() {
|
||||||
@@ -58,77 +68,77 @@ class NewsletterTemplatesTest extends \MailPoetTest {
|
|||||||
'body' => '{"key3": "value3"}',
|
'body' => '{"key3": "value3"}',
|
||||||
];
|
];
|
||||||
|
|
||||||
$router = new NewsletterTemplates();
|
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
|
||||||
$response = $router->save($templateData);
|
$response = $endpoint->save($templateData);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->equals(
|
expect($response->data['name'])->same('Template #3');
|
||||||
NewsletterTemplate::findOne($response->data['id'])->asArray()
|
expect($response->data['body'])->same(['key3' => 'value3']);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanSaveANewTemplateAssociatedWithANewsletter() {
|
public function testItCanSaveANewTemplateAssociatedWithANewsletter() {
|
||||||
|
$newsletter = new NewsletterEntity();
|
||||||
|
$newsletter->setSubject('Newsletter subject');
|
||||||
|
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||||
|
$this->entityManager->persist($newsletter);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
$templateData = [
|
$templateData = [
|
||||||
'newsletter_id' => 2,
|
'newsletter_id' => $newsletter->getId(),
|
||||||
'name' => 'Template #3',
|
'name' => 'Template #3',
|
||||||
'body' => '{"key3": "value3"}',
|
'body' => '{"key3": "value3"}',
|
||||||
];
|
];
|
||||||
|
|
||||||
$router = new NewsletterTemplates();
|
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
|
||||||
$response = $router->save($templateData);
|
$response = $endpoint->save($templateData);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
expect($response->data)->equals(
|
expect($response->data['name'])->same('Template #3');
|
||||||
NewsletterTemplate::findOne($response->data['id'])->asArray()
|
expect($response->data['body'])->same(['key3' => 'value3']);
|
||||||
);
|
expect($response->data['newsletter_id'])->same($newsletter->getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanUpdateTemplateAssociatedWithANewsletter() {
|
public function testItCanUpdateTemplateAssociatedWithANewsletter() {
|
||||||
|
$newsletter = new NewsletterEntity();
|
||||||
|
$newsletter->setSubject('Newsletter subject');
|
||||||
|
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||||
|
$this->entityManager->persist($newsletter);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
$templateData = [
|
$templateData = [
|
||||||
'newsletter_id' => '1',
|
'newsletter_id' => $newsletter->getId(),
|
||||||
'name' => 'Template #2',
|
'name' => 'Template #2',
|
||||||
'body' => '{"key3": "value3"}',
|
'body' => '{"key3": "value3"}',
|
||||||
];
|
];
|
||||||
|
|
||||||
$templateId = NewsletterTemplate::whereEqual('newsletter_id', 1)->findOne()->id;
|
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
|
||||||
|
$response = $endpoint->save($templateData);
|
||||||
$router = new NewsletterTemplates();
|
|
||||||
$response = $router->save($templateData);
|
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
$templateData['body'] = json_decode($templateData['body'], true);
|
$templateData['body'] = json_decode($templateData['body'], true);
|
||||||
|
|
||||||
$normalize = function($array) {
|
expect($response->data['name'])->same('Template #2');
|
||||||
$result = [];
|
expect($response->data['body'])->same(['key3' => 'value3']);
|
||||||
foreach ($array as $key => $value) {
|
expect($response->data['newsletter_id'])->same($newsletter->getId());
|
||||||
if (in_array($key, ['newsletter_id', 'name', 'body'])) {
|
|
||||||
$result[$key] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $result;
|
|
||||||
};
|
|
||||||
|
|
||||||
expect($normalize($response->data))->equals($templateData);
|
|
||||||
$template = NewsletterTemplate::findOne($templateId)->asArray();
|
|
||||||
expect($normalize($template))->equals($templateData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanDeleteANewsletterTemplate() {
|
public function testItCanDeleteANewsletterTemplate() {
|
||||||
$template = NewsletterTemplate::where('name', 'Template #2')->findOne();
|
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
|
||||||
expect($template->deletedAt)->null();
|
$response = $endpoint->delete(/* missing id */);
|
||||||
|
|
||||||
$router = new NewsletterTemplates();
|
|
||||||
$response = $router->delete(/* missing id */);
|
|
||||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||||
expect($response->errors[0]['message'])
|
expect($response->errors[0]['message'])
|
||||||
->equals('This template does not exist.');
|
->equals('This template does not exist.');
|
||||||
|
|
||||||
$response = $router->delete(['id' => $template->id]);
|
$template = $this->newsletterTemplatesRepository->findOneBy(['name' => 'Template #1']);
|
||||||
|
assert($template instanceof NewsletterTemplateEntity);
|
||||||
|
$templateId = $template->getId();
|
||||||
|
$response = $endpoint->delete(['id' => $template->getId()]);
|
||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
|
||||||
$deletedTemplate = NewsletterTemplate::findOne($template->id);
|
$deletedTemplate = $this->newsletterTemplatesRepository->findOneById($templateId);
|
||||||
expect($deletedTemplate)->false();
|
expect($deletedTemplate)->null();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
NewsletterTemplate::deleteMany();
|
$this->truncateEntity(NewsletterEntity::class);
|
||||||
|
$this->truncateEntity(NewsletterTemplateEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,6 @@ $models = [
|
|||||||
'NewsletterLink',
|
'NewsletterLink',
|
||||||
'NewsletterPost',
|
'NewsletterPost',
|
||||||
'NewsletterSegment',
|
'NewsletterSegment',
|
||||||
'NewsletterTemplate',
|
|
||||||
'NewsletterOption',
|
'NewsletterOption',
|
||||||
'NewsletterOptionField',
|
'NewsletterOptionField',
|
||||||
'Segment',
|
'Segment',
|
||||||
@@ -44,6 +43,7 @@ $models = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
$entities = [
|
$entities = [
|
||||||
|
MailPoet\Entities\NewsletterTemplateEntity::class,
|
||||||
MailPoet\Entities\SettingEntity::class,
|
MailPoet\Entities\SettingEntity::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user