From 2ce6fd8688b9d18c72e0810dd8f04c78a2bc51df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Fri, 27 Oct 2023 08:57:03 +0200 Subject: [PATCH] Remove BlocksRenderer and fix tests [MAILPOET-5591] --- mailpoet/lib/DI/ContainerConfigurator.php | 1 - .../Engine/Renderer/BlocksRenderer.php | 35 -------- .../EmailEditor/Engine/Renderer/Renderer.php | 23 ++++-- .../Engine/Renderer/BlocksRendererTest.php | 79 ------------------- .../Engine/Renderer/DummyBlockRenderer.php | 6 +- .../Engine/Renderer/RendererTest.php | 14 ++-- .../Core/Renderer/Blocks/ColumnsTest.php | 29 +------ 7 files changed, 31 insertions(+), 156 deletions(-) delete mode 100644 mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php delete mode 100644 mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php diff --git a/mailpoet/lib/DI/ContainerConfigurator.php b/mailpoet/lib/DI/ContainerConfigurator.php index 653d957ae9..2214508d03 100644 --- a/mailpoet/lib/DI/ContainerConfigurator.php +++ b/mailpoet/lib/DI/ContainerConfigurator.php @@ -341,7 +341,6 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessors\TopLevelPreprocessor::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessors\TypographyPreprocessor::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Renderer::class)->setPublic(true); - $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRegistry::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\PreprocessManager::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Integrations\Core\Initializer::class)->setPublic(true); diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php b/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php deleted file mode 100644 index 8d19854cd0..0000000000 --- a/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php +++ /dev/null @@ -1,35 +0,0 @@ -blockRenderersRegistry = $blockRenderersRegistry; - } - - public function render(array $parsedBlocks): string { - if (!$this->blocksInitialized) { - $this->blocksInitialized = true; - do_action('mailpoet_blocks_renderer_initialized', $this->blockRenderersRegistry); - } - - $content = ''; - foreach ($parsedBlocks as $parsedBlock) { - $content .= render_block($parsedBlock); - } - - do_action('mailpoet_blocks_renderer_uninitialized', $this->blockRenderersRegistry); - $this->blocksInitialized = false; - - return $content; - } -} diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php b/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php index 326abef3d2..2aaa988162 100644 --- a/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php @@ -11,8 +11,8 @@ class Renderer { /** @var \MailPoetVendor\CSS */ private $cssInliner; - /** @var BlocksRenderer */ - private $blocksRenderer; + /** @var BlocksRegistry */ + private $blocksRegistry; /** @var PreprocessManager */ private $preprocessManager; @@ -29,12 +29,12 @@ class Renderer { public function __construct( \MailPoetVendor\CSS $cssInliner, PreprocessManager $preprocessManager, - BlocksRenderer $blocksRenderer, + BlocksRegistry $blocksRegistry, SettingsController $settingsController ) { $this->cssInliner = $cssInliner; $this->preprocessManager = $preprocessManager; - $this->blocksRenderer = $blocksRenderer; + $this->blocksRegistry = $blocksRegistry; $this->settingsController = $settingsController; } @@ -44,7 +44,7 @@ class Renderer { $layoutStyles = $this->settingsController->getEmailLayoutStyles(); $parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks, $layoutStyles); - $renderedBody = $this->blocksRenderer->render($parsedBlocks); + $renderedBody = $this->renderBlocks($parsedBlocks); $styles = (string)file_get_contents(dirname(__FILE__) . '/' . self::TEMPLATE_STYLES_FILE); $styles = apply_filters('mailpoet_email_renderer_styles', $styles, $post); @@ -87,6 +87,19 @@ class Renderer { ]; } + public function renderBlocks(array $parsedBlocks): string { + do_action('mailpoet_blocks_renderer_initialized', $this->blocksRegistry); + + $content = ''; + foreach ($parsedBlocks as $parsedBlock) { + $content .= render_block($parsedBlock); + } + + do_action('mailpoet_blocks_renderer_uninitialized', $this->blocksRegistry); + + return $content; + } + private function injectContentIntoTemplate($template, array $content) { return preg_replace_callback('/{{\w+}}/', function($matches) use (&$content) { return array_shift($content); diff --git a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php deleted file mode 100644 index a8e0d6bdee..0000000000 --- a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php +++ /dev/null @@ -1,79 +0,0 @@ -getBlocksRenderer(); - $content = $renderer->render([ - [ - 'blockName' => 'dummy/block', - 'innerHTML' => 'Hello', - ], - [ - 'blockName' => 'dummy/block', - 'innerHTML' => 'Buddy!', - ], - ]); - verify($content)->equals('HelloBuddy!'); - } - - public function testItSkipsUnknownBlocks() { - $renderer = $this->getBlocksRenderer(); - $content = $renderer->render([ - [ - 'blockName' => 'dummy/block', - 'innerHTML' => 'Hello', - ], - [ - 'blockName' => 'unknown/block', - 'innerHTML' => 'Buddy!', - ], - ]); - verify($content)->equals('Hello'); - } - - public function testItCanProcessNestedBlocks() { - $renderer = $this->getBlocksRenderer(); - $content = $renderer->render([ - [ - 'blockName' => 'dummy/block', - 'innerBlocks' => [[ - 'blockName' => 'dummy/block', - 'innerHTML' => 'Hello', - ], - [ - 'blockName' => 'dummy/block', - 'innerHTML' => 'Buddy!', - ], - ], - ], - ]); - verify($content)->equals('[HelloBuddy!]'); - } - - public function _after() { - parent::_after(); - remove_action('mailpoet_blocks_renderer_initialized', [$this, 'postRegisterCallback']); - } - - public function registerDummyBlock(BlocksRegistry $registry) { - $registry->addBlockRenderer('dummy/block', new DummyBlockRenderer()); - } - - private function getBlocksRenderer() { - return new BlocksRenderer( - new BlocksRegistry(), - new SettingsController() - ); - } -} diff --git a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php index 252528f6e1..5a949abff8 100644 --- a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php +++ b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php @@ -2,14 +2,12 @@ namespace MailPoet\EmailEditor\Engine\Renderer; -use MailPoet\EmailEditor\Engine\SettingsController; - class DummyBlockRenderer implements BlockRenderer { - public function render($parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string { + public function render(string $blockContent, array $parsedBlock): string { if (!isset($parsedBlock['innerBlocks']) || empty($parsedBlock['innerBlocks'])) { return $parsedBlock['innerHTML']; } // Wrapper is rendered in parent Columns block because it needs to operate with columns count etc. - return '[' . $blocksRenderer->render($parsedBlock['innerBlocks']) . ']'; + return '[' . $this->render('', $parsedBlock['innerBlocks']) . ']'; } } diff --git a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php index 8ab07df112..4083b780d6 100644 --- a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php +++ b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php @@ -72,23 +72,23 @@ class RendererTest extends \MailPoetTest { } $this->assertInstanceOf(\DOMElement::class, $body); $style = $body->getAttribute('style'); - verify($style)->stringContainsString('font-family:Arial,\'Helvetica Neue\',Helvetica,sans-serif;'); + verify($style)->stringContainsString('margin:0;padding:0;'); } public function testItAppliesLayoutStyles() { $settingsControllerMock = $this->createMock(SettingsController::class); $settingsControllerMock->method('getEmailLayoutStyles')->willReturn([ - 'width' => 123, + 'width' => '123px', 'background' => '#123456', 'padding' => [ - 'left' => 1, - 'right' => 2, - 'top' => 3, - 'bottom' => 4, + 'left' => '1px', + 'right' => '2px', + 'top' => '3px', + 'bottom' => '4px', ], ]); $renderer = $this->getServiceWithOverrides(Renderer::class, [ - 'stylesController' => $settingsControllerMock, + 'settingsController' => $settingsControllerMock, ]); $rendered = $renderer->render($this->emailPost, 'Subject', '', 'en'); $doc = new \DOMDocument(); diff --git a/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php b/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php index 64b882f6c4..1a90c699d7 100644 --- a/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php +++ b/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php @@ -3,13 +3,8 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks; use MailPoet\EmailEditor\Engine\EmailEditor; -use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; -use MailPoet\EmailEditor\Engine\SettingsController; class ColumnsTest extends \MailPoetTest { - /** @var BlocksRenderer */ - private $blocksRenderer; - /** @var Columns */ private $columnsRenderer; @@ -17,6 +12,9 @@ class ColumnsTest extends \MailPoetTest { private $parsedColumns = [ 'blockName' => 'core/columns', 'attrs' => [], + 'email_attrs' => [ + 'width' => '784px', + ], 'innerBlocks' => [ 0 => [ 'blockName' => 'core/column', @@ -44,31 +42,12 @@ class ColumnsTest extends \MailPoetTest { public function _before() { $this->diContainer->get(EmailEditor::class)->initialize(); - $this->blocksRenderer = $this->diContainer->get(BlocksRenderer::class); $this->columnsRenderer = new Columns(); } public function testItRendersInnerColumn() { - $settingsController = $this->diContainer->get(SettingsController::class); - $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController); + $rendered = $this->columnsRenderer->render('', $this->parsedColumns); verify($rendered)->stringContainsString('Column 1'); - } - - public function testItRendersWidthForOneColumn() { - $settingsController = $this->createMock(SettingsController::class); - $settingsController->method('getEmailLayoutStyles') - ->willReturn(['width' => 800]); - $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController); verify($rendered)->stringContainsString('width:784px;'); } - - public function testItRendersWidthForTwoColumns() { - $settingsController = $this->createMock(SettingsController::class); - $settingsController->method('getEmailLayoutStyles') - ->willReturn(['width' => 800]); - $parsedColumns = $this->parsedColumns; - $parsedColumns['innerBlocks'][] = $parsedColumns['innerBlocks'][0]; // Insert another column - $rendered = $this->columnsRenderer->render($parsedColumns, $this->blocksRenderer, $settingsController); - verify($rendered)->stringContainsString('width:392px;'); - } }