Files
piratepoet/mailpoet/tests/integration/EmailEditor/Integrations/MailPoet/EmailApiControllerTest.php
Jan Lysý d0c1ad4aba Move email editor integration tests
[MAILPOET-6216]
2024-09-23 15:16:59 +02:00

97 lines
3.4 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\MailPoet;
use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\NotFoundException;
use MailPoet\Test\DataFactories\Newsletter as NewsletterFactory;
use MailPoet\UnexpectedValueException;
class EmailApiControllerTest extends \MailPoetTest {
/** @var EmailApiController */
private $emailApiController;
/** @var NewslettersRepository */
private $newslettersRepository;
public function _before() {
$this->emailApiController = $this->diContainer->get(EmailApiController::class);
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
}
public function testItGetsEmailDataFromNewsletterEntity(): void {
$wpPostId = 6;
$newsletter = (new NewsletterFactory())
->withSubject('New subject')
->withPreheader('New preheader')
->withWpPostId($wpPostId)
->create();
$emailData = $this->emailApiController->getEmailData(['id' => $wpPostId]);
verify($emailData['subject'])->equals('New subject');
verify($emailData['preheader'])->equals('New preheader');
verify($emailData['id'])->equals($newsletter->getId());
}
public function testItSaveEmailDataToNewsletterEntity(): void {
$wpPostId = 5;
$newsletter = (new NewsletterFactory())
->withWpPostId($wpPostId)
->create();
$this->emailApiController->saveEmailData([
'id' => $newsletter->getId(),
'subject' => 'New subject',
'preheader' => 'New preheader',
'theme' => ['styles' => ['spacing' => ['padding' => ['bottom' => '10px', 'left' => '10px', 'right' => '10px', 'top' => '10px']]]],
], new \WP_Post((object)['ID' => $wpPostId]));
$this->entityManager->clear();
$newsletter = $this->newslettersRepository->findOneById($newsletter->getId());
$this->assertInstanceOf(NewsletterEntity::class, $newsletter);
verify($newsletter->getSubject())->equals('New subject');
verify($newsletter->getPreheader())->equals('New preheader');
}
public function testItThrowsErrorWhenNewsletterDoesNotExist(): void {
try {
$this->emailApiController->saveEmailData([
'id' => 999,
'subject' => 'New subject',
'preheader' => 'New preheader',
], new \WP_Post((object)['ID' => 5]));
$this->fail('Incorrect state exception should have been thrown.');
} catch (NotFoundException $exception) {
verify($exception->getHttpStatusCode())->equals(APIResponse::STATUS_NOT_FOUND);
verify($exception->getMessage())->stringContainsString('Newsletter was not found');
}
}
public function testItThrowsErrorWhenNewsletterWpPostIdDoesNotMatchWpPostId(): void {
$newsletter = (new NewsletterFactory())
->withWpPostId(1)
->create();
try {
$this->emailApiController->saveEmailData([
'id' => $newsletter->getId(),
'subject' => 'New subject',
'preheader' => 'New preheader',
], new \WP_Post((object)['ID' => 2]));
$this->fail('Incorrect state exception should have been thrown.');
} catch (UnexpectedValueException $exception) {
verify($exception->getHttpStatusCode())->equals(APIResponse::STATUS_BAD_REQUEST);
verify($exception->getMessage())->stringContainsString('Newsletter ID does not match the post ID');
}
}
public function _after() {
parent::_after();
$this->truncateEntity(NewsletterEntity::class);
}
}