Files
piratepoet/mailpoet/tests/integration/API/JSON/v1/NewsletterTemplatesTest.php
Rodrigo Primo 9b56fdc688 Replace expect()->count() with verify()->arrayCount()
codeception/verify 2.1 removed support for expect()->count() so we need
to replace it with verify()->arrayCount().

[MAILPOET-5664]
2023-10-24 08:58:22 +03:00

136 lines
5.3 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Test\API\JSON\v1;
use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\API\JSON\v1\NewsletterTemplates;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterTemplateEntity;
use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
class NewsletterTemplatesTest extends \MailPoetTest {
/** @var NewsletterTemplatesRepository */
private $newsletterTemplatesRepository;
public function _before() {
parent::_before();
$this->newsletterTemplatesRepository = $this->diContainer->get(NewsletterTemplatesRepository::class);
$template1 = new NewsletterTemplateEntity('Template #1');
$template1->setBody(['key1' => 'value1']);
$this->entityManager->persist($template1);
$template2 = new NewsletterTemplateEntity('Template #2');
$template2->setBody(['key2' => 'value2']);
$template2->setNewsletter($this->entityManager->getReference(NewsletterEntity::class, 1));
$this->entityManager->persist($template2);
$this->entityManager->flush();
}
public function testItCanGetANewsletterTemplate() {
$template = $this->newsletterTemplatesRepository->findOneBy(['name' => 'Template #1']);
$this->assertInstanceOf(NewsletterTemplateEntity::class, $template);
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
$response = $endpoint->get(/* missing id */);
verify($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
verify($response->errors[0]['message'])
->equals('This template does not exist.');
$response = $endpoint->get(['id' => 'not_an_id']);
verify($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
verify($response->errors[0]['message'])
->equals('This template does not exist.');
$response = $endpoint->get(['id' => $template->getId()]);
verify($response->status)->equals(APIResponse::STATUS_OK);
verify($response->data['name'])->same('Template #1');
verify($response->data['body'])->same(['key1' => 'value1']);
}
public function testItCanGetAllNewsletterTemplates() {
$templates = $this->newsletterTemplatesRepository->findAll();
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
$response = $endpoint->getAll();
verify($response->status)->equals(APIResponse::STATUS_OK);
verify($response->data)->arrayCount(count($templates));
}
public function testItCanSaveANewTemplate() {
$templateData = [
'name' => 'Template #3',
'body' => '{"key3": "value3"}',
];
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
$response = $endpoint->save($templateData);
verify($response->status)->equals(APIResponse::STATUS_OK);
verify($response->data['name'])->same('Template #3');
verify($response->data['body'])->same(['key3' => 'value3']);
}
public function testItCanSaveANewTemplateAssociatedWithANewsletter() {
$newsletter = new NewsletterEntity();
$newsletter->setSubject('Newsletter subject');
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
$templateData = [
'newsletter_id' => $newsletter->getId(),
'name' => 'Template #3',
'body' => '{"key3": "value3"}',
];
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
$response = $endpoint->save($templateData);
verify($response->status)->equals(APIResponse::STATUS_OK);
verify($response->data['name'])->same('Template #3');
verify($response->data['body'])->same(['key3' => 'value3']);
verify($response->data['newsletter_id'])->same($newsletter->getId());
}
public function testItCanUpdateTemplateAssociatedWithANewsletter() {
$newsletter = new NewsletterEntity();
$newsletter->setSubject('Newsletter subject');
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
$templateData = [
'newsletter_id' => $newsletter->getId(),
'name' => 'Template #2',
'body' => '{"key3": "value3"}',
];
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
$response = $endpoint->save($templateData);
verify($response->status)->equals(APIResponse::STATUS_OK);
$templateData['body'] = json_decode($templateData['body'], true);
verify($response->data['name'])->same('Template #2');
verify($response->data['body'])->same(['key3' => 'value3']);
verify($response->data['newsletter_id'])->same($newsletter->getId());
}
public function testItCanDeleteANewsletterTemplate() {
$endpoint = $this->diContainer->get(NewsletterTemplates::class);
$response = $endpoint->delete(/* missing id */);
verify($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
verify($response->errors[0]['message'])
->equals('This template does not exist.');
$template = $this->newsletterTemplatesRepository->findOneBy(['name' => 'Template #1']);
$this->assertInstanceOf(NewsletterTemplateEntity::class, $template);
$templateId = $template->getId();
$response = $endpoint->delete(['id' => $template->getId()]);
verify($response->status)->equals(APIResponse::STATUS_OK);
$deletedTemplate = $this->newsletterTemplatesRepository->findOneById($templateId);
verify($deletedTemplate)->null();
}
}