Rewrite newsletter template API tests to Doctrine

[MAILPOET-2645]
This commit is contained in:
Jan Jakeš
2020-03-12 16:21:51 +01:00
committed by Veljko V
parent 239e77256a
commit f1fb0c3529
2 changed files with 72 additions and 62 deletions

View File

@@ -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);
} }
} }

View File

@@ -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,
]; ];