Check validity on activating newsletters

This prevents users from activating automatic emails from listing pages
that are not valid.

This also adds more checks for the content of a newsletter, requiring
that a newsletter have at least one content block in order to be valid.
This change makes the server side validation check match what we're
checking in the editor in mailpoet/assets/js/src/newsletter_editor
/components/save.js and mailpoet/assets/js/src/newsletters/send.jsx

[MAILPOET-4236]
This commit is contained in:
John Oleksowicz
2022-04-13 16:28:06 -05:00
committed by Veljko V
parent fdaf22d46b
commit 27a86d2ca6
4 changed files with 63 additions and 10 deletions

View File

@ -143,7 +143,21 @@ class SendingQueueTest extends \MailPoetTest {
$newsletter = new NewsletterEntity();
$newsletter->setSubject('subject');
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->setBody(['content' => ['type' => 'container', 'columnLayout' => false, 'orientation' => 'vertical']]);
$newsletter->setBody([
'content' =>
[
'type' => 'container',
'columnLayout' => false,
'orientation' => 'vertical',
'blocks' => [
[
'type' => 'header',
'link' => '',
'text' => 'Hello!'
]
]
]
]);
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
$sendingQueue = new SendingQueueAPI(
@ -165,6 +179,20 @@ class SendingQueueTest extends \MailPoetTest {
expect($response['errors'][0]['error'])->stringContainsString('bad_request');
}
public function testItRejectsNewslettersWithoutContentBlocks() {
$newsletter = new NewsletterEntity();
$newsletter->setSubject('subject');
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->setBody(['content' => ['type' => 'container', 'columnLayout' => false, 'orientation' => 'vertical']]);
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
$response = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
$result = $response->getData();
expect($result['errors'][0])->array();
expect($result['errors'][0]['message'])->stringContainsString('Poet, please add prose to your masterpiece before you send it to your followers');
}
private function _createOrUpdateNewsletterOptions(NewsletterEntity $newsletter, $newsletterType, $options) {
$newsletterOptionFieldRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
$newsletterOptionRepository = $this->diContainer->get(NewsletterOptionsRepository::class);