Use Newsletter entity in renderer

[MAILPOET-2899]
This commit is contained in:
Pavel Dohnal
2020-05-26 16:36:42 +02:00
committed by Veljko V
parent f8a16b5e5a
commit 7b0c5e61fe
8 changed files with 120 additions and 91 deletions

View File

@ -43,7 +43,7 @@ class SendPreviewController {
throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found"); throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found");
} }
$renderedNewsletter = $this->renderer->render($newsletterModel, $preview = true); $renderedNewsletter = $this->renderer->render($newsletter, $preview = true);
$divider = '***MailPoet***'; $divider = '***MailPoet***';
$dataForShortcodes = array_merge( $dataForShortcodes = array_merge(
[$newsletter->getSubject()], [$newsletter->getSubject()],

View File

@ -2,6 +2,7 @@
namespace MailPoet\Newsletter\Renderer\Blocks; namespace MailPoet\Newsletter\Renderer\Blocks;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterPost; use MailPoet\Models\NewsletterPost;
use MailPoet\Newsletter\AutomatedLatestContent; use MailPoet\Newsletter\AutomatedLatestContent;
@ -59,7 +60,7 @@ class Renderer {
$this->text = $text; $this->text = $text;
} }
public function render($newsletter, $data) { public function render(NewsletterEntity $newsletter, $data) {
$columnCount = count($data['blocks']); $columnCount = count($data['blocks']);
$columnsLayout = isset($data['columnLayout']) ? $data['columnLayout'] : null; $columnsLayout = isset($data['columnLayout']) ? $data['columnLayout'] : null;
$columnWidths = ColumnsHelper::columnWidth($columnCount, $columnsLayout); $columnWidths = ColumnsHelper::columnWidth($columnCount, $columnsLayout);
@ -73,7 +74,7 @@ class Renderer {
return $columnContent; return $columnContent;
} }
private function renderBlocksInColumn($newsletter, $block, $columnBaseWidth) { private function renderBlocksInColumn(NewsletterEntity $newsletter, $block, $columnBaseWidth) {
$blockContent = ''; $blockContent = '';
$_this = $this; $_this = $this;
array_map(function($block) use (&$blockContent, $columnBaseWidth, $newsletter, $_this) { array_map(function($block) use (&$blockContent, $columnBaseWidth, $newsletter, $_this) {
@ -91,7 +92,7 @@ class Renderer {
return $blockContent; return $blockContent;
} }
public function createElementFromBlockType($newsletter, $block, $columnBaseWidth) { public function createElementFromBlockType(NewsletterEntity $newsletter, $block, $columnBaseWidth) {
if ($block['type'] === 'automatedLatestContent') { if ($block['type'] === 'automatedLatestContent') {
return $this->processAutomatedLatestContent($newsletter, $block, $columnBaseWidth); return $this->processAutomatedLatestContent($newsletter, $block, $columnBaseWidth);
} }
@ -117,16 +118,20 @@ class Renderer {
return ''; return '';
} }
public function automatedLatestContentTransformedPosts($newsletter, $args) { public function automatedLatestContentTransformedPosts(NewsletterEntity $newsletter, $args) {
$newerThanTimestamp = false; $newerThanTimestamp = false;
$newsletterId = false; $newsletterId = false;
if ($newsletter['type'] === Newsletter::TYPE_NOTIFICATION_HISTORY) { if ($newsletter->getType() === Newsletter::TYPE_NOTIFICATION_HISTORY) {
$newsletterId = $newsletter['parent_id']; $parent = $newsletter->getParent();
if ($parent instanceof NewsletterEntity) {
$newsletterId = $parent->getId();
$lastPost = NewsletterPost::getNewestNewsletterPost($newsletterId); $lastPost = NewsletterPost::getNewestNewsletterPost($newsletterId);
if ($lastPost) { if ($lastPost) {
$newerThanTimestamp = $lastPost->createdAt; $newerThanTimestamp = $lastPost->createdAt;
} }
}
} }
$postsToExclude = $this->getPosts(); $postsToExclude = $this->getPosts();
$aLCPosts = $this->ALC->getPosts($args, $postsToExclude, $newsletterId, $newerThanTimestamp); $aLCPosts = $this->ALC->getPosts($args, $postsToExclude, $newsletterId, $newerThanTimestamp);
@ -137,7 +142,7 @@ class Renderer {
return $this->ALC->transformPosts($args, $aLCPosts); return $this->ALC->transformPosts($args, $aLCPosts);
} }
public function processAutomatedLatestContent($newsletter, $args, $columnBaseWidth) { public function processAutomatedLatestContent(NewsletterEntity $newsletter, $args, $columnBaseWidth) {
$transformedPosts = [ $transformedPosts = [
'blocks' => $this->automatedLatestContentTransformedPosts($newsletter, $args), 'blocks' => $this->automatedLatestContentTransformedPosts($newsletter, $args),
]; ];

View File

@ -2,6 +2,7 @@
namespace MailPoet\Newsletter\Renderer; namespace MailPoet\Newsletter\Renderer;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\Editor\LayoutHelper; use MailPoet\Newsletter\Editor\LayoutHelper;
use MailPoet\Newsletter\Renderer\Blocks\Renderer as BlocksRenderer; use MailPoet\Newsletter\Renderer\Blocks\Renderer as BlocksRenderer;
use MailPoet\WooCommerce\TransactionalEmails; use MailPoet\WooCommerce\TransactionalEmails;
@ -32,10 +33,10 @@ class Preprocessor {
/** /**
* @param array $content * @param array $content
* @param array $newsletter * @param NewsletterEntity $newsletter
* @return array * @return array
*/ */
public function process($newsletter, $content) { public function process(NewsletterEntity $newsletter, $content) {
if (!array_key_exists('blocks', $content)) { if (!array_key_exists('blocks', $content)) {
return $content; return $content;
} }
@ -47,12 +48,7 @@ class Preprocessor {
return $content; return $content;
} }
/** public function processBlock(NewsletterEntity $newsletter, array $block): array {
* @param array $block
* @param array $newsletter
* @return array
*/
public function processBlock($newsletter, $block) {
switch ($block['type']) { switch ($block['type']) {
case 'automatedLatestContentLayout': case 'automatedLatestContentLayout':
return $this->blocksRenderer->automatedLatestContentTransformedPosts($newsletter, $block); return $this->blocksRenderer->automatedLatestContentTransformedPosts($newsletter, $block);

View File

@ -3,14 +3,20 @@
namespace MailPoet\Newsletter\Renderer; namespace MailPoet\Newsletter\Renderer;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper; use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
use MailPoet\RuntimeException;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Util\License\License; use MailPoet\Util\License\License;
use MailPoet\Util\pQuery\DomNode; use MailPoet\Util\pQuery\DomNode;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class Renderer { class Renderer {
const NEWSLETTER_TEMPLATE = 'Template.html';
const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process';
/** @var Blocks\Renderer */ /** @var Blocks\Renderer */
private $blocksRenderer; private $blocksRenderer;
@ -29,8 +35,8 @@ class Renderer {
/** @var License */ /** @var License */
private $license; private $license;
const NEWSLETTER_TEMPLATE = 'Template.html'; /** @var NewslettersRepository */
const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process'; private $newslettersRepository;
public function __construct( public function __construct(
Blocks\Renderer $blocksRenderer, Blocks\Renderer $blocksRenderer,
@ -38,6 +44,7 @@ class Renderer {
Preprocessor $preprocessor, Preprocessor $preprocessor,
\MailPoetVendor\CSS $cSSInliner, \MailPoetVendor\CSS $cSSInliner,
Bridge $bridge, Bridge $bridge,
NewslettersRepository $newslettersRepository,
License $license License $license
) { ) {
$this->blocksRenderer = $blocksRenderer; $this->blocksRenderer = $blocksRenderer;
@ -46,15 +53,29 @@ class Renderer {
$this->cSSInliner = $cSSInliner; $this->cSSInliner = $cSSInliner;
$this->bridge = $bridge; $this->bridge = $bridge;
$this->license = $license; $this->license = $license;
$this->newslettersRepository = $newslettersRepository;
} }
/** /**
* @param \MailPoet\Models\Newsletter|array $newsletter * This is only temporary, when all calls are refactored to doctrine and only entity is passed we don't need this
* @param \MailPoet\Models\Newsletter|NewsletterEntity $newsletter
* @return NewsletterEntity|null
*/ */
private function getNewsletter($newsletter) {
if ($newsletter instanceof NewsletterEntity) return $newsletter;
if ($newsletter instanceof Newsletter) {
$newsletterId = $newsletter->id;
}
return $this->newslettersRepository->findOneById($newsletterId);
}
public function render($newsletter, $preview = false, $type = false) { public function render($newsletter, $preview = false, $type = false) {
$newsletter = ($newsletter instanceof Newsletter) ? $newsletter->asArray() : $newsletter; $newsletter = $this->getNewsletter($newsletter);
$body = (is_array($newsletter['body'])) if (!$newsletter instanceof NewsletterEntity) {
? $newsletter['body'] throw new RuntimeException('Newsletter was not found');
}
$body = (is_array($newsletter->getBody()))
? $newsletter->getBody()
: []; : [];
$content = (array_key_exists('content', $body)) $content = (array_key_exists('content', $body))
? $body['content'] ? $body['content']
@ -79,10 +100,10 @@ class Renderer {
$template = $this->injectContentIntoTemplate( $template = $this->injectContentIntoTemplate(
(string)file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE), (string)file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE),
[ [
htmlspecialchars($newsletter['subject']), htmlspecialchars($newsletter->getSubject()),
$renderedStyles, $renderedStyles,
$customFontsLinks, $customFontsLinks,
EHelper::escapeHtmlText($newsletter['preheader']), EHelper::escapeHtmlText($newsletter->getPreheader()),
$renderedBody, $renderedBody,
] ]
); );
@ -103,11 +124,11 @@ class Renderer {
} }
/** /**
* @param array $newsletter * @param NewsletterEntity $newsletter
* @param array $content * @param array $content
* @return string * @return string
*/ */
private function renderBody($newsletter, $content) { private function renderBody(NewsletterEntity $newsletter, array $content) {
$blocks = (array_key_exists('blocks', $content)) $blocks = (array_key_exists('blocks', $content))
? $content['blocks'] ? $content['blocks']
: []; : [];

View File

@ -3,6 +3,8 @@
namespace MailPoet\Test\Newsletter; namespace MailPoet\Test\Newsletter;
use Codeception\Util\Fixtures; use Codeception\Util\Fixtures;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\Button; use MailPoet\Newsletter\Renderer\Blocks\Button;
use MailPoet\Newsletter\Renderer\Blocks\Divider; use MailPoet\Newsletter\Renderer\Blocks\Divider;
use MailPoet\Newsletter\Renderer\Blocks\Footer; use MailPoet\Newsletter\Renderer\Blocks\Footer;
@ -22,8 +24,10 @@ class RendererTest extends \MailPoetTest {
public $dOMParser; public $dOMParser;
public $columnRenderer; public $columnRenderer;
/** @var Renderer & MockObject */ /** @var Renderer */
public $renderer; public $renderer;
/** @var NewsletterEntity */
public $newsletter; public $newsletter;
/** @var License & MockObject */ /** @var License & MockObject */
@ -35,16 +39,14 @@ class RendererTest extends \MailPoetTest {
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->newsletter = [ $this->newsletter = new NewsletterEntity();
'body' => json_decode( $this->newsletter->setBody(json_decode(
(string)file_get_contents(dirname(__FILE__) . '/RendererTestData.json'), true (string)file_get_contents(dirname(__FILE__) . '/RendererTestData.json'), true
), ));
'id' => 1, $this->newsletter->setSubject('Some subject');
'subject' => 'Some subject', $this->newsletter->setPreheader('Some preheader');
'preheader' => 'Some preheader', $this->newsletter->setType('standard');
'type' => 'standard', $this->newsletter->setStatus('active');
'status' => 'active',
];
$this->license = $this->createMock(License::class); $this->license = $this->createMock(License::class);
$this->bridge = $this->createMock(Bridge::class); $this->bridge = $this->createMock(Bridge::class);
$this->renderer = new Renderer( $this->renderer = new Renderer(
@ -53,6 +55,7 @@ class RendererTest extends \MailPoetTest {
$this->diContainer->get(Preprocessor::class), $this->diContainer->get(Preprocessor::class),
$this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(\MailPoetVendor\CSS::class),
$this->bridge, $this->bridge,
$this->diContainer->get(NewslettersRepository::class),
$this->license $this->license
); );
$this->columnRenderer = new ColumnRenderer(); $this->columnRenderer = new ColumnRenderer();
@ -247,7 +250,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersHeader() { public function testItRendersHeader() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][0]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][0];
$DOM = $this->dOMParser->parseStr((new Header)->render($template)); $DOM = $this->dOMParser->parseStr((new Header)->render($template));
// element should be properly nested, and styles should be applied // element should be properly nested, and styles should be applied
@ -258,7 +261,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersImage() { public function testItRendersImage() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][1]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][1];
$DOM = $this->dOMParser->parseStr((new Image)->render($template, self::COLUMN_BASE_WIDTH)); $DOM = $this->dOMParser->parseStr((new Image)->render($template, self::COLUMN_BASE_WIDTH));
// element should be properly nested, it's width set and style applied // element should be properly nested, it's width set and style applied
@ -266,7 +269,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersAlignedImage() { public function testItRendersAlignedImage() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][1]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][1];
// default alignment (center) // default alignment (center)
unset($template['styles']['block']['textAlign']); unset($template['styles']['block']['textAlign']);
@ -326,7 +329,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersImageWithLink() { public function testItRendersImageWithLink() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][1]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][1];
$template['link'] = 'http://example.com'; $template['link'] = 'http://example.com';
$DOM = $this->dOMParser->parseStr((new Image)->render($template, self::COLUMN_BASE_WIDTH)); $DOM = $this->dOMParser->parseStr((new Image)->render($template, self::COLUMN_BASE_WIDTH));
@ -404,7 +407,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersText() { public function testItRendersText() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][2]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][2];
$DOM = $this->dOMParser->parseStr((new Text)->render($template)); $DOM = $this->dOMParser->parseStr((new Text)->render($template));
// blockquotes and paragraphs should be converted to spans and placed inside a table // blockquotes and paragraphs should be converted to spans and placed inside a table
@ -444,7 +447,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersDivider() { public function testItRendersDivider() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][3]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][3];
$DOM = $this->dOMParser->parseStr((new Divider)->render($template)); $DOM = $this->dOMParser->parseStr((new Divider)->render($template));
// element should be properly nested and its border-top-width set // element should be properly nested and its border-top-width set
@ -456,7 +459,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersSpacer() { public function testItRendersSpacer() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][4]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][4];
$DOM = $this->dOMParser->parseStr((new Spacer)->render($template)); $DOM = $this->dOMParser->parseStr((new Spacer)->render($template));
// element should be properly nested and its height set // element should be properly nested and its height set
@ -464,7 +467,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItSetsSpacerBackground() { public function testItSetsSpacerBackground() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][4]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][4];
$DOM = $this->dOMParser->parseStr((new Spacer)->render($template)); $DOM = $this->dOMParser->parseStr((new Spacer)->render($template));
expect($DOM('tr > td.mailpoet_spacer', 0)->attr('bgcolor'))->null(); expect($DOM('tr > td.mailpoet_spacer', 0)->attr('bgcolor'))->null();
@ -475,7 +478,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItCalculatesButtonWidth() { public function testItCalculatesButtonWidth() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5];
$template['styles']['block']['width'] = '700px'; $template['styles']['block']['width'] = '700px';
$buttonWidth = (new Button)->calculateWidth($template, self::COLUMN_BASE_WIDTH); $buttonWidth = (new Button)->calculateWidth($template, self::COLUMN_BASE_WIDTH);
@ -483,7 +486,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersButton() { public function testItRendersButton() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5];
$DOM = $this->dOMParser->parseStr((new Button)->render($template, self::COLUMN_BASE_WIDTH)); $DOM = $this->dOMParser->parseStr((new Button)->render($template, self::COLUMN_BASE_WIDTH));
// element should be properly nested with arcsize/styles/fillcolor set // element should be properly nested with arcsize/styles/fillcolor set
@ -518,7 +521,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItUsesFullFontFamilyNameInElementStyles() { public function testItUsesFullFontFamilyNameInElementStyles() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][5];
$template['styles']['block']['fontFamily'] = 'Lucida'; $template['styles']['block']['fontFamily'] = 'Lucida';
$DOM = $this->dOMParser->parseStr((new Button)->render($template, self::COLUMN_BASE_WIDTH)); $DOM = $this->dOMParser->parseStr((new Button)->render($template, self::COLUMN_BASE_WIDTH));
@ -530,7 +533,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersSocialIcons() { public function testItRendersSocialIcons() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][6]; $template = $newsletter['content']['blocks'][0]['blocks'][0]['blocks'][6];
$DOM = $this->dOMParser->parseStr((new Social)->render($template)); $DOM = $this->dOMParser->parseStr((new Social)->render($template));
// element should be properly nested, contain social icons and // element should be properly nested, contain social icons and
@ -558,7 +561,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItRendersFooter() { public function testItRendersFooter() {
$newsletter = $this->newsletter['body']; $newsletter = (array)$this->newsletter->getBody();
$template = $newsletter['content']['blocks'][3]['blocks'][0]['blocks'][0]; $template = $newsletter['content']['blocks'][3]['blocks'][0]['blocks'][0];
$DOM = $this->dOMParser->parseStr((new Footer)->render($template)); $DOM = $this->dOMParser->parseStr((new Footer)->render($template));
// element should be properly nested, and styles should be applied // element should be properly nested, and styles should be applied
@ -569,26 +572,26 @@ class RendererTest extends \MailPoetTest {
} }
public function testItSetsSubject() { public function testItSetsSubject() {
$this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$template = $this->renderer->render($this->newsletter); $template = $this->renderer->render($this->newsletter);
$DOM = $this->dOMParser->parseStr($template['html']); $DOM = $this->dOMParser->parseStr($template['html']);
$subject = trim($DOM('title')->text()); $subject = trim($DOM('title')->text());
expect($subject)->equals($this->newsletter['subject']); expect($subject)->equals($this->newsletter->getSubject());
} }
public function testItSetsPreheader() { public function testItSetsPreheader() {
$this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$template = $this->renderer->render($this->newsletter); $template = $this->renderer->render($this->newsletter);
$DOM = $this->dOMParser->parseStr($template['html']); $DOM = $this->dOMParser->parseStr($template['html']);
$preheader = trim($DOM('td.mailpoet_preheader')->text()); $preheader = trim($DOM('td.mailpoet_preheader')->text());
expect($preheader)->equals($this->newsletter['preheader']); expect($preheader)->equals($this->newsletter->getPreheader());
} }
public function testItDoesNotAddMailpoetLogoWhenPremiumIsActive() { public function testItDoesNotAddMailpoetLogoWhenPremiumIsActive() {
$this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false); $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false);
$this->license->method('hasLicense')->willReturn(true); $this->license->method('hasLicense')->willReturn(true);
$this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$template = $this->renderer->render($this->newsletter, false); $template = $this->renderer->render($this->newsletter, false);
expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); expect($template['html'])->notContains('mailpoet_logo_newsletter.png');
} }
@ -597,7 +600,7 @@ class RendererTest extends \MailPoetTest {
$this->license->method('hasLicense')->willReturn(false); $this->license->method('hasLicense')->willReturn(false);
$this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(true); $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(true);
$this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$template = $this->renderer->render($this->newsletter, false); $template = $this->renderer->render($this->newsletter, false);
expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); expect($template['html'])->notContains('mailpoet_logo_newsletter.png');
} }
@ -606,13 +609,13 @@ class RendererTest extends \MailPoetTest {
$this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false); $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false);
$this->license->method('hasLicense')->willReturn(false); $this->license->method('hasLicense')->willReturn(false);
$this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$template = $this->renderer->render($this->newsletter, true); $template = $this->renderer->render($this->newsletter, true);
expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); expect($template['html'])->notContains('mailpoet_logo_newsletter.png');
} }
public function testItAddsMailpoetLogo() { public function testItAddsMailpoetLogo() {
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false); $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false);
$this->license->method('hasLicense')->willReturn(false); $this->license->method('hasLicense')->willReturn(false);
@ -621,7 +624,7 @@ class RendererTest extends \MailPoetTest {
} }
public function testItPostProcessesTemplate() { public function testItPostProcessesTemplate() {
$this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
$template = $this->renderer->render($this->newsletter); $template = $this->renderer->render($this->newsletter);
// !important should be stripped from everywhere except from with the <style> tag // !important should be stripped from everywhere except from with the <style> tag
expect(preg_match('/<style.*?important/s', $template['html']))->equals(1); expect(preg_match('/<style.*?important/s', $template['html']))->equals(1);

View File

@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce\TransactionalEmails;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\Editor\LayoutHelper as L;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Preprocessor; use MailPoet\Newsletter\Renderer\Preprocessor;
use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer; use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
@ -17,9 +18,7 @@ class RendererTest extends \MailPoetTest {
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->newsletter = Stub::make(Newsletter::class, [ $this->newsletter = Newsletter::createOrUpdate([
'asArray' => function() {
return [
'type' => Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL, 'type' => Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL,
'subject' => 'WooCommerce Transactional Email', 'subject' => 'WooCommerce Transactional Email',
'preheader' => '', 'preheader' => '',
@ -32,8 +31,6 @@ class RendererTest extends \MailPoetTest {
L::row([L::col([['type' => 'text', 'text' => 'Some text after content']])]), L::row([L::col([['type' => 'text', 'text' => 'Some text after content']])]),
]), ]),
], ],
];
},
]); ]);
} }
@ -55,6 +52,7 @@ class RendererTest extends \MailPoetTest {
), ),
$this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(\MailPoetVendor\CSS::class),
$this->diContainer->get(Bridge::class), $this->diContainer->get(Bridge::class),
$this->diContainer->get(NewslettersRepository::class),
$this->diContainer->get(License::class) $this->diContainer->get(License::class)
); );
@ -85,6 +83,7 @@ class RendererTest extends \MailPoetTest {
), ),
$this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(\MailPoetVendor\CSS::class),
$this->diContainer->get(Bridge::class), $this->diContainer->get(Bridge::class),
$this->diContainer->get(NewslettersRepository::class),
$this->diContainer->get(License::class) $this->diContainer->get(License::class)
); );
$renderer = new Renderer(new csstidy, $newsletterRenderer); $renderer = new Renderer(new csstidy, $newsletterRenderer);

View File

@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\SettingEntity;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
@ -29,6 +30,18 @@ class TransactionalEmailsTest extends \MailPoetTest {
private $newslettersRepository; private $newslettersRepository;
public function _before() { public function _before() {
$this->entityManager
->createQueryBuilder()
->delete()
->from(NewsletterEntity::class, 'n')
->getQuery()
->execute();
$this->entityManager
->createQueryBuilder()
->delete()
->from(SettingEntity::class, 's')
->getQuery()
->execute();
$this->wp = new WPFunctions(); $this->wp = new WPFunctions();
$this->settings = SettingsController::getInstance(); $this->settings = SettingsController::getInstance();
$this->originalWcSettings = $this->settings->get('woocommerce'); $this->originalWcSettings = $this->settings->get('woocommerce');
@ -40,6 +53,7 @@ class TransactionalEmailsTest extends \MailPoetTest {
Stub::makeEmpty(WooCommerceHelper::class), Stub::makeEmpty(WooCommerceHelper::class),
$this->newslettersRepository $this->newslettersRepository
); );
$this->settings->set('woocommerce', $this->originalWcSettings);
} }
public function testInitCreatesTransactionalEmailAndSavesItsId() { public function testInitCreatesTransactionalEmailAndSavesItsId() {
@ -91,14 +105,4 @@ class TransactionalEmailsTest extends \MailPoetTest {
expect($footerTextBlock['text'])->equals('<p style="text-align: center;">Text <a href="http://example.com">Link</a></p>'); expect($footerTextBlock['text'])->equals('<p style="text-align: center;">Text <a href="http://example.com">Link</a></p>');
$this->wp->updateOption('woocommerce_email_footer_text', $optionOriginalValue); $this->wp->updateOption('woocommerce_email_footer_text', $optionOriginalValue);
} }
public function _after() {
$this->entityManager
->createQueryBuilder()
->delete()
->from(NewsletterEntity::class, 'n')
->getQuery()
->execute();
$this->settings->set('woocommerce', $this->originalWcSettings);
}
} }

View File

@ -3,6 +3,7 @@
namespace MailPoet\Test\Newsletter; namespace MailPoet\Test\Newsletter;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\Renderer\Blocks\Renderer; use MailPoet\Newsletter\Renderer\Blocks\Renderer;
use MailPoet\Newsletter\Renderer\Preprocessor; use MailPoet\Newsletter\Renderer\Preprocessor;
use MailPoet\WooCommerce\TransactionalEmails; use MailPoet\WooCommerce\TransactionalEmails;
@ -17,7 +18,7 @@ class PreprocessorTest extends \MailPoetUnitTest {
], ],
]); ]);
$preprocessor = new Preprocessor($renderer, $transactionalEmails); $preprocessor = new Preprocessor($renderer, $transactionalEmails);
expect($preprocessor->processBlock([], ['type' => 'woocommerceHeading']))->equals([[ expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceHeading']))->equals([[
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',
'styles' => [ 'styles' => [
@ -42,7 +43,7 @@ class PreprocessorTest extends \MailPoetUnitTest {
public function testProcessWooCommerceContentBlock() { public function testProcessWooCommerceContentBlock() {
$renderer = Stub::make(Renderer::class); $renderer = Stub::make(Renderer::class);
$preprocessor = new Preprocessor($renderer, Stub::make(TransactionalEmails::class)); $preprocessor = new Preprocessor($renderer, Stub::make(TransactionalEmails::class));
expect($preprocessor->processBlock([], ['type' => 'woocommerceContent']))->equals([[ expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceContent']))->equals([[
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',
'styles' => [ 'styles' => [