Migrate integration tests in Integrations directory to WordPress Coding Standard

[MAILPOET-6240]
This commit is contained in:
Jan Lysý
2024-11-04 15:05:52 +01:00
committed by Jan Lysý
parent e69666776d
commit 853bf6fcfe
9 changed files with 589 additions and 259 deletions

View File

@@ -68,8 +68,8 @@ class Renderer_Test extends \MailPoetTest {
$this->renderer = $this->getServiceWithOverrides(
Renderer::class,
array(
'settingsController' => $settings_controller_mock,
'themeController' => $theme_controller_mock,
'settings_controller' => $settings_controller_mock,
'theme_controller' => $theme_controller_mock,
)
);
$this->email_post = $this->tester->create_post(

View File

@@ -1,16 +1,33 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for Button class
*/
class Button_Test extends \MailPoetTest {
/** @var Button */
private $buttonRenderer;
/**
* Instance of Button class
*
* @var Button
*/
private $button_renderer;
/** @var array */
private $parsedButton = array(
/**
* Configuration for parsed button block
*
* @var array
*/
private $parsed_button = array(
'blockName' => 'core/button',
'attrs' => array(
'width' => 50,
@@ -38,58 +55,80 @@ class Button_Test extends \MailPoetTest {
),
);
/** @var Settings_Controller */
private $settingsController;
/**
* Instance of Settings_Controller class
*
* @var Settings_Controller
*/
private $settings_controller;
/**
* Set up before each test
*/
public function _before(): void {
$this->di_container->get( Email_Editor::class )->initialize();
$this->buttonRenderer = new Button();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->button_renderer = new Button();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test in renders link
*/
public function testItRendersLink(): void {
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'href="http://example.com"' );
verify( $output )->stringContainsString( 'Button Text' );
}
/**
* Test it renders padding based on attributes value
*/
public function testItRendersPaddingBasedOnAttributesValue(): void {
$this->parsedButton['attrs']['style']['spacing']['padding'] = array(
$this->parsed_button['attrs']['style']['spacing']['padding'] = array(
'left' => '10px',
'right' => '20px',
'top' => '30px',
'bottom' => '40px',
);
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'padding-left:10px;' );
verify( $output )->stringContainsString( 'padding-right:20px;' );
verify( $output )->stringContainsString( 'padding-top:30px;' );
verify( $output )->stringContainsString( 'padding-bottom:40px;' );
}
/**
* Test it renders colors
*/
public function testItRendersColors(): void {
$this->parsedButton['attrs']['style']['color'] = array(
$this->parsed_button['attrs']['style']['color'] = array(
'background' => '#000000',
'text' => '#111111',
);
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'background-color:#000000;' );
verify( $output )->stringContainsString( 'color:#111111;' );
}
/**
* Test it renders border
*/
public function testItRendersBorder(): void {
$this->parsedButton['attrs']['style']['border'] = array(
$this->parsed_button['attrs']['style']['border'] = array(
'width' => '10px',
'color' => '#111111',
);
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'border-color:#111111;' );
verify( $output )->stringContainsString( 'border-width:10px;' );
verify( $output )->stringContainsString( 'border-style:solid;' );
}
/**
* Test it renders each side specific border
*/
public function testItRendersEachSideSpecificBorder(): void {
$this->parsedButton['attrs']['style']['border'] = array(
$this->parsed_button['attrs']['style']['border'] = array(
'top' => array(
'width' => '1px',
'color' => '#111111',
@@ -107,7 +146,7 @@ class Button_Test extends \MailPoetTest {
'color' => '#444444',
),
);
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'border-top-width:1px;' );
verify( $output )->stringContainsString( 'border-top-color:#111111;' );
@@ -123,51 +162,66 @@ class Button_Test extends \MailPoetTest {
verify( $output )->stringContainsString( 'border-style:solid;' );
}
/**
* Test it renders border radius
*/
public function testItRendersBorderRadius(): void {
$this->parsedButton['attrs']['style']['border'] = array(
$this->parsed_button['attrs']['style']['border'] = array(
'radius' => '10px',
);
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'border-radius:10px;' );
}
/**
* Test it renders font size
*/
public function testItRendersFontSize(): void {
$this->parsedButton['attrs']['style']['typography']['fontSize'] = '10px';
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$this->parsed_button['attrs']['style']['typography']['fontSize'] = '10px';
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'font-size:10px;' );
}
/**
* Test in renders corner specific border radius
*/
public function testItRendersCornerSpecificBorderRadius(): void {
$this->parsedButton['attrs']['style']['border']['radius'] = array(
$this->parsed_button['attrs']['style']['border']['radius'] = array(
'topLeft' => '1px',
'topRight' => '2px',
'bottomLeft' => '3px',
'bottomRight' => '4px',
);
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
verify( $output )->stringContainsString( 'border-top-left-radius:1px;' );
verify( $output )->stringContainsString( 'border-top-right-radius:2px;' );
verify( $output )->stringContainsString( 'border-bottom-left-radius:3px;' );
verify( $output )->stringContainsString( 'border-bottom-right-radius:4px;' );
}
/**
* Test it renders background color set by slug
*/
public function testItRendersBackgroundColorSetBySlug(): void {
unset( $this->parsedButton['attrs']['style']['color'] );
unset( $this->parsedButton['attrs']['style']['spacing']['padding'] );
$this->parsedButton['attrs']['backgroundColor'] = 'black';
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
unset( $this->parsed_button['attrs']['style']['color'] );
unset( $this->parsed_button['attrs']['style']['spacing']['padding'] );
$this->parsed_button['attrs']['backgroundColor'] = 'black';
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
// For other blocks this is handled by CSS-inliner, but for button we need to handle it manually
// because of special email HTML markup
// because of special email HTML markup.
verify( $output )->stringContainsString( 'background-color:#000000;' );
}
/**
* Test if it renders font color set by slug
*/
public function testItRendersFontColorSetBySlug(): void {
unset( $this->parsedButton['attrs']['style']['color'] );
unset( $this->parsedButton['attrs']['style']['spacing']['padding'] );
$this->parsedButton['attrs']['textColor'] = 'white';
$output = $this->buttonRenderer->render( $this->parsedButton['innerHTML'], $this->parsedButton, $this->settingsController );
unset( $this->parsed_button['attrs']['style']['color'] );
unset( $this->parsed_button['attrs']['style']['spacing']['padding'] );
$this->parsed_button['attrs']['textColor'] = 'white';
$output = $this->button_renderer->render( $this->parsed_button['innerHTML'], $this->parsed_button, $this->settings_controller );
// For other blocks this is handled by CSS-inliner, but for button we need to handle it manually
// because of special email HTML markup
// because of special email HTML markup.
verify( $output )->stringContainsString( 'color:#fff' );
}
}

View File

@@ -1,16 +1,32 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for Column class
*/
class Column_Test extends \MailPoetTest {
/** @var Column */
private $columnRenderer;
/** @var array */
private $parsedColumn = array(
/**
* Column renderer instance
*
* @var Column
*/
private $column_renderer;
/**
* Parsed column block
*
* @var array
*/
private $parsed_column = array(
'blockName' => 'core/column',
'email_attrs' => array(
'width' => '300px',
@@ -34,25 +50,37 @@ class Column_Test extends \MailPoetTest {
2 => '</div>',
),
);
/**
* Instance of Settings_Controller class
*
* @var Settings_Controller
*/
private $settings_controller;
/** @var Settings_Controller */
private $settingsController;
/**
* Set up before each test
*/
public function _before() {
$this->di_container->get( Email_Editor::class )->initialize();
$this->columnRenderer = new Column();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->column_renderer = new Column();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test it renders column content
*/
public function testItRendersColumnContent() {
$rendered = $this->columnRenderer->render( '', $this->parsedColumn, $this->settingsController );
$rendered = $this->column_renderer->render( '', $this->parsed_column, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'Column content', $rendered );
}
/**
* Test it contains columns styles
*/
public function testItContainsColumnsStyles(): void {
$parsedColumn = $this->parsedColumn;
$parsedColumn['attrs'] = array(
$parsed_column = $this->parsed_column;
$parsed_column['attrs'] = array(
'style' => array(
'border' => array(
'bottom' => array(
@@ -91,7 +119,7 @@ class Column_Test extends \MailPoetTest {
),
),
);
$rendered = $this->columnRenderer->render( '', $parsedColumn, $this->settingsController );
$rendered = $this->column_renderer->render( '', $parsed_column, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'background-color:#abcdef;', $rendered );
$this->assertStringContainsString( 'border-bottom-left-radius:5px;', $rendered );
@@ -111,32 +139,41 @@ class Column_Test extends \MailPoetTest {
$this->assertStringContainsString( 'padding-left:15px;', $rendered );
$this->assertStringContainsString( 'padding-right:20px;', $rendered );
$this->assertStringContainsString( 'padding-top:10px;', $rendered );
$this->assertStringContainsString( 'vertical-align:top;', $rendered ); // Check for the default value of vertical alignment
$this->assertStringContainsString( 'vertical-align:top;', $rendered ); // Check for the default value of vertical alignment.
}
/**
* Test it contains expected vertical alignment
*/
public function testItContainsExpectedVerticalAlignment(): void {
$parsedColumn = $this->parsedColumn;
$parsedColumn['attrs']['verticalAlignment'] = 'bottom';
$rendered = $this->columnRenderer->render( '', $parsedColumn, $this->settingsController );
$parsed_column = $this->parsed_column;
$parsed_column['attrs']['verticalAlignment'] = 'bottom';
$rendered = $this->column_renderer->render( '', $parsed_column, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'vertical-align:bottom;', $rendered );
}
/**
* Test it sets custom color and background
*/
public function testItSetsCustomColorAndBackground(): void {
$parsedColumn = $this->parsedColumn;
$parsedColumn['attrs']['style']['color']['text'] = '#123456';
$parsedColumn['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->columnRenderer->render( '', $parsedColumn, $this->settingsController );
$parsed_column = $this->parsed_column;
$parsed_column['attrs']['style']['color']['text'] = '#123456';
$parsed_column['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->column_renderer->render( '', $parsed_column, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'color:#123456;', $rendered );
$this->assertStringContainsString( 'background-color:#654321;', $rendered );
}
/**
* Test it preserves classes set by editor
*/
public function testItPreservesClassesSetByEditor(): void {
$parsedColumn = $this->parsedColumn;
$parsed_column = $this->parsed_column;
$content = '<div class="wp-block-column editor-class-1 another-class"></div>';
$parsedColumn['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->columnRenderer->render( $content, $parsedColumn, $this->settingsController );
$parsed_column['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->column_renderer->render( $content, $parsed_column, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'wp-block-column editor-class-1 another-class', $rendered );
}

View File

@@ -1,16 +1,33 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for Columns class
*/
class Columns_Test extends \MailPoetTest {
/** @var Columns */
private $columnsRenderer;
/**
* Columns renderer instance
*
* @var Columns
*/
private $columns_renderer;
/** @var array */
private $parsedColumns = array(
/**
* Columns block configuration
*
* @var array
*/
private $parsed_columns = array(
'blockName' => 'core/columns',
'attrs' => array(),
'email_attrs' => array(
@@ -41,24 +58,36 @@ class Columns_Test extends \MailPoetTest {
),
),
);
/**
* Settings controller instance
*
* @var Settings_Controller
*/
private $settings_controller;
/** @var Settings_Controller */
private $settingsController;
/**
* Set up before each test
*/
public function _before() {
$this->di_container->get( Email_Editor::class )->initialize();
$this->columnsRenderer = new Columns();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->columns_renderer = new Columns();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test it renders inner column
*/
public function testItRendersInnerColumn() {
$rendered = $this->columnsRenderer->render( '', $this->parsedColumns, $this->settingsController );
$rendered = $this->columns_renderer->render( '', $this->parsed_columns, $this->settings_controller );
verify( $rendered )->stringContainsString( 'Column 1' );
}
/**
* Test it contains columns styles
*/
public function testItContainsColumnsStyles(): void {
$parsedColumns = $this->parsedColumns;
$parsedColumns['attrs'] = array(
$parsed_columns = $this->parsed_columns;
$parsed_columns['attrs'] = array(
'style' => array(
'border' => array(
'color' => '#123456',
@@ -78,7 +107,7 @@ class Columns_Test extends \MailPoetTest {
),
),
);
$rendered = $this->columnsRenderer->render( '', $parsedColumns, $this->settingsController );
$rendered = $this->columns_renderer->render( '', $parsed_columns, $this->settings_controller );
verify( $rendered )->stringContainsString( 'background-color:#abcdef;' );
verify( $rendered )->stringContainsString( 'border-color:#123456;' );
verify( $rendered )->stringContainsString( 'border-radius:10px;' );
@@ -90,21 +119,27 @@ class Columns_Test extends \MailPoetTest {
verify( $rendered )->stringContainsString( 'padding-top:10px;' );
}
/**
* Test it sets custom color and background
*/
public function testItSetsCustomColorAndBackground(): void {
$parsedColumns = $this->parsedColumns;
$parsedColumns['attrs']['style']['color']['text'] = '#123456';
$parsedColumns['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->columnsRenderer->render( '', $parsedColumns, $this->settingsController );
$parsed_columns = $this->parsed_columns;
$parsed_columns['attrs']['style']['color']['text'] = '#123456';
$parsed_columns['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->columns_renderer->render( '', $parsed_columns, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'color:#123456;', $rendered );
$this->assertStringContainsString( 'background-color:#654321;', $rendered );
}
/**
* Test it preserves classes set by editor
*/
public function testItPreservesClassesSetByEditor(): void {
$parsedColumns = $this->parsedColumns;
$parsed_columns = $this->parsed_columns;
$content = '<div class="wp-block-columns editor-class-1 another-class"></div>';
$parsedColumns['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->columnsRenderer->render( $content, $parsedColumns, $this->settingsController );
$parsed_columns['attrs']['style']['color']['background'] = '#654321';
$rendered = $this->columns_renderer->render( $content, $parsed_columns, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'wp-block-columns editor-class-1 another-class', $rendered );
}

View File

@@ -1,16 +1,33 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for Heading class
*/
class Heading_Test extends \MailPoetTest {
/** @var Text */
private $headingRenderer;
/**
* Text renderer instance
*
* @var Text
*/
private $heading_renderer;
/** @var array */
private $parsedHeading = array(
/**
* Heading block configuration
*
* @var array
*/
private $parsed_heading = array(
'blockName' => 'core/heading',
'attrs' => array(
'level' => 1,
@@ -34,39 +51,58 @@ class Heading_Test extends \MailPoetTest {
),
);
/** @var Settings_Controller */
private $settingsController;
/**
* Settings controller instance
*
* @var Settings_Controller
*/
private $settings_controller;
/**
* Set up before each test
*/
public function _before() {
$this->di_container->get( Email_Editor::class )->initialize();
$this->headingRenderer = new Text();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->heading_renderer = new Text();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test it renders content
*/
public function testItRendersContent(): void {
$rendered = $this->headingRenderer->render( '<h1>This is Heading 1</h1>', $this->parsedHeading, $this->settingsController );
$rendered = $this->heading_renderer->render( '<h1>This is Heading 1</h1>', $this->parsed_heading, $this->settings_controller );
verify( $rendered )->stringContainsString( 'This is Heading 1' );
verify( $rendered )->stringContainsString( 'width:100%;' );
verify( $rendered )->stringContainsString( 'font-size:24px;' );
verify( $rendered )->stringNotContainsString( 'width:640px;' );
}
/**
* Test it renders block attributes
*/
public function testItRendersBlockAttributes(): void {
$rendered = $this->headingRenderer->render( '<h1>This is Heading 1</h1>', $this->parsedHeading, $this->settingsController );
$rendered = $this->heading_renderer->render( '<h1>This is Heading 1</h1>', $this->parsed_heading, $this->settings_controller );
verify( $rendered )->stringContainsString( 'text-transform:lowercase;' );
verify( $rendered )->stringContainsString( 'text-align:center;' );
}
/**
* Test it renders custom set colors
*/
public function testItRendersCustomSetColors(): void {
$this->parsedHeading['attrs']['style']['color']['background'] = '#000000';
$this->parsedHeading['attrs']['style']['color']['text'] = '#ff0000';
$rendered = $this->headingRenderer->render( '<h1>This is Heading 1</h1>', $this->parsedHeading, $this->settingsController );
$this->parsed_heading['attrs']['style']['color']['background'] = '#000000';
$this->parsed_heading['attrs']['style']['color']['text'] = '#ff0000';
$rendered = $this->heading_renderer->render( '<h1>This is Heading 1</h1>', $this->parsed_heading, $this->settings_controller );
verify( $rendered )->stringContainsString( 'background-color:#000000' );
verify( $rendered )->stringContainsString( 'color:#ff0000;' );
}
/**
* Test it replaces fluid font size in content
*/
public function testItReplacesFluidFontSizeInContent(): void {
$rendered = $this->headingRenderer->render( '<h1 style="font-size:clamp(10px, 20px, 24px)">This is Heading 1</h1>', $this->parsedHeading, $this->settingsController );
$rendered = $this->heading_renderer->render( '<h1 style="font-size:clamp(10px, 20px, 24px)">This is Heading 1</h1>', $this->parsed_heading, $this->settings_controller );
verify( $rendered )->stringContainsString( 'font-size:24px' );
}
}

View File

@@ -1,22 +1,44 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for Image class
*/
class Image_Test extends \MailPoetTest {
/** @var Image */
private $imageRenderer;
/**
* Image renderer instance
*
* @var Image
*/
private $image_renderer;
private $imageContent = '
/**
* Content of the image block
*
* @var string
*/
private $image_content = '
<figure class="wp-block-image alignleft size-full is-style-default">
<img src="https://test.com/wp-content/uploads/2023/05/image.jpg" alt="" style="" srcset="https://test.com/wp-content/uploads/2023/05/image.jpg 1000w"/>
</figure>
';
/** @var array */
private $parsedImage = array(
/**
* Parse image block configuration
*
* @var array
*/
private $parsed_image = array(
'blockName' => 'core/image',
'attrs' => array(
'align' => 'left',
@@ -31,21 +53,30 @@ class Image_Test extends \MailPoetTest {
'innerHTML' => '',
'innerContent' => array(),
);
/**
* Settings controller instance
*
* @var Settings_Controller
*/
private $settings_controller;
/** @var Settings_Controller */
private $settingsController;
/**
* Set up before each test
*/
public function _before() {
$this->di_container->get( Email_Editor::class )->initialize();
$this->imageRenderer = new Image();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->image_renderer = new Image();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test it renders mandatory image styles
*/
public function testItRendersMandatoryImageStyles(): void {
$parsedImage = $this->parsedImage;
$parsedImage['innerHTML'] = $this->imageContent; // To avoid repetition of the image content in the test we need to add it to the parsed block
$parsed_image = $this->parsed_image;
$parsed_image['innerHTML'] = $this->image_content; // To avoid repetition of the image content in the test we need to add it to the parsed block.
$rendered = $this->imageRenderer->render( $this->imageContent, $parsedImage, $this->settingsController );
$rendered = $this->image_renderer->render( $this->image_content, $parsed_image, $this->settings_controller );
$this->assertStringNotContainsString( '<figure', $rendered );
$this->assertStringNotContainsString( '<figcaption', $rendered );
$this->assertStringNotContainsString( '</figure>', $rendered );
@@ -56,12 +87,15 @@ class Image_Test extends \MailPoetTest {
$this->assertStringContainsString( '<img ', $rendered );
}
/**
* Test it renders border radius style
*/
public function testItRendersBorderRadiusStyle(): void {
$parsedImage = $this->parsedImage;
$parsedImage['attrs']['className'] = 'is-style-rounded';
$parsedImage['innerHTML'] = $this->imageContent; // To avoid repetition of the image content in the test we need to add it to the parsed block
$parsed_image = $this->parsed_image;
$parsed_image['attrs']['className'] = 'is-style-rounded';
$parsed_image['innerHTML'] = $this->image_content; // To avoid repetition of the image content in the test we need to add it to the parsed block.
$rendered = $this->imageRenderer->render( $this->imageContent, $parsedImage, $this->settingsController );
$rendered = $this->image_renderer->render( $this->image_content, $parsed_image, $this->settings_controller );
$this->assertStringNotContainsString( '<figure', $rendered );
$this->assertStringNotContainsString( '<figcaption', $rendered );
$this->assertStringNotContainsString( '</figure>', $rendered );
@@ -72,24 +106,30 @@ class Image_Test extends \MailPoetTest {
$this->assertStringContainsString( 'border-radius: 9999px;', $rendered );
}
/**
* Test it renders caption
*/
public function testItRendersCaption(): void {
$imageContent = str_replace( '</figure>', '<figcaption class="wp-element-caption">Caption</figcaption></figure>', $this->imageContent );
$parsedImage = $this->parsedImage;
$parsedImage['innerHTML'] = $imageContent; // To avoid repetition of the image content in the test we need to add it to the parsed block
$image_content = str_replace( '</figure>', '<figcaption class="wp-element-caption">Caption</figcaption></figure>', $this->image_content );
$parsed_image = $this->parsed_image;
$parsed_image['innerHTML'] = $image_content; // To avoid repetition of the image content in the test we need to add it to the parsed block.
$rendered = $this->imageRenderer->render( $imageContent, $parsedImage, $this->settingsController );
$rendered = $this->image_renderer->render( $image_content, $parsed_image, $this->settings_controller );
$this->assertStringContainsString( '>Caption</span>', $rendered );
$this->assertStringContainsString( 'text-align:center;', $rendered );
}
/**
* Test it renders image alignment
*/
public function testItRendersImageAlignment(): void {
$imageContent = str_replace( 'style=""', 'style="width:400px;height:300px;"', $this->imageContent );
$parsedImage = $this->parsedImage;
$parsedImage['attrs']['align'] = 'center';
$parsedImage['attrs']['width'] = '400px';
$parsedImage['innerHTML'] = $imageContent; // To avoid repetition of the image content in the test we need to add it to the parsed block
$image_content = str_replace( 'style=""', 'style="width:400px;height:300px;"', $this->image_content );
$parsed_image = $this->parsed_image;
$parsed_image['attrs']['align'] = 'center';
$parsed_image['attrs']['width'] = '400px';
$parsed_image['innerHTML'] = $image_content; // To avoid repetition of the image content in the test we need to add it to the parsed block.
$rendered = $this->imageRenderer->render( $imageContent, $parsedImage, $this->settingsController );
$rendered = $this->image_renderer->render( $image_content, $parsed_image, $this->settings_controller );
$this->assertStringContainsString( 'align="center"', $rendered );
$this->assertStringContainsString( 'width="400"', $rendered );
$this->assertStringContainsString( 'height="300"', $rendered );
@@ -97,54 +137,60 @@ class Image_Test extends \MailPoetTest {
$this->assertStringContainsString( 'width:400px;', $rendered );
}
/**
* Test it renders image with borders
*/
public function testItRendersBorders(): void {
$imageContent = $this->imageContent;
$parsedImage = $this->parsedImage;
$parsedImage['attrs']['style']['border'] = array(
$image_content = $this->image_content;
$parsed_image = $this->parsed_image;
$parsed_image['attrs']['style']['border'] = array(
'width' => '10px',
'color' => '#000001',
'radius' => '20px',
);
$rendered = $this->imageRenderer->render( $imageContent, $parsedImage, $this->settingsController );
$rendered = $this->image_renderer->render( $image_content, $parsed_image, $this->settings_controller );
$html = new \WP_HTML_Tag_Processor( $rendered );
// Border is rendered on the wrapping table cell
// Border is rendered on the wrapping table cell.
$html->next_tag(
array(
'tag_name' => 'td',
'class_name' => 'email-image-cell',
)
);
$tableCellStyle = $html->get_attribute( 'style' );
$this->assertStringContainsString( 'border-color:#000001', $tableCellStyle );
$this->assertStringContainsString( 'border-radius:20px', $tableCellStyle );
$this->assertStringContainsString( 'border-style:solid;', $tableCellStyle );
$table_cell_style = $html->get_attribute( 'style' );
$this->assertStringContainsString( 'border-color:#000001', $table_cell_style );
$this->assertStringContainsString( 'border-radius:20px', $table_cell_style );
$this->assertStringContainsString( 'border-style:solid;', $table_cell_style );
$html->next_tag( array( 'tag_name' => 'img' ) );
$imgStyle = $html->get_attribute( 'style' );
$this->assertStringNotContainsString( 'border', $imgStyle );
$img_style = $html->get_attribute( 'style' );
$this->assertStringNotContainsString( 'border', $img_style );
}
/**
* Test it moves border related classes
*/
public function testItMovesBorderRelatedClasses(): void {
$imageContent = str_replace( '<img', '<img class="custom-class has-border-color has-border-red-color"', $this->imageContent );
$parsedImage = $this->parsedImage;
$parsedImage['attrs']['style']['border'] = array(
$image_content = str_replace( '<img', '<img class="custom-class has-border-color has-border-red-color"', $this->image_content );
$parsed_image = $this->parsed_image;
$parsed_image['attrs']['style']['border'] = array(
'width' => '10px',
'color' => '#000001',
'radius' => '20px',
);
$rendered = $this->imageRenderer->render( $imageContent, $parsedImage, $this->settingsController );
$rendered = $this->image_renderer->render( $image_content, $parsed_image, $this->settings_controller );
$html = new \WP_HTML_Tag_Processor( $rendered );
// Border is rendered on the wrapping table cell and the border classes are moved to the wrapping table cell
// Border is rendered on the wrapping table cell and the border classes are moved to the wrapping table cell.
$html->next_tag(
array(
'tag_name' => 'td',
'class_name' => 'email-image-cell',
)
);
$tableCellClass = $html->get_attribute( 'class' );
$this->assertStringContainsString( 'has-border-red-color', $tableCellClass );
$this->assertStringContainsString( 'has-border-color', $tableCellClass );
$this->assertStringNotContainsString( 'custom-class', $tableCellClass );
$table_cell_class = $html->get_attribute( 'class' );
$this->assertStringContainsString( 'has-border-red-color', $table_cell_class );
$this->assertStringContainsString( 'has-border-color', $table_cell_class );
$this->assertStringNotContainsString( 'custom-class', $table_cell_class );
}
}

View File

@@ -1,16 +1,32 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for List_Block class
*/
class List_Block_Test extends \MailPoetTest {
/** @var List_Block */
private $listRenderer;
/** @var array */
private $parsedList = array(
/**
* List_Block renderer instance
*
* @var List_Block
*/
private $list_renderer;
/**
* List block configuration
*
* @var array
*/
private $parsed_list = array(
'blockName' => 'core/list',
'attrs' => array(),
'innerBlocks' => array(
@@ -40,38 +56,53 @@ class List_Block_Test extends \MailPoetTest {
2 => '</ul>',
),
);
/**
* Settings controller instance
*
* @var Settings_Controller
*/
private $settings_controller;
/** @var Settings_Controller */
private $settingsController;
/**
* Set up before each test
*/
public function _before() {
$this->di_container->get( Email_Editor::class )->initialize();
$this->listRenderer = new List_Block();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->list_renderer = new List_Block();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test it renders list content
*/
public function testItRendersListContent(): void {
$rendered = $this->listRenderer->render( '<ul><li>Item 1</li><li>Item 2</li></ul>', $this->parsedList, $this->settingsController );
$rendered = $this->list_renderer->render( '<ul><li>Item 1</li><li>Item 2</li></ul>', $this->parsed_list, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'Item 1', $rendered );
$this->assertStringContainsString( 'Item 2', $rendered );
}
/**
* Test it renders font size from preprocessor
*/
public function testItRendersFontSizeFromPreprocessor(): void {
$parsedList = $this->parsedList;
$parsedList['email_attrs'] = array(
$parsed_list = $this->parsed_list;
$parsed_list['email_attrs'] = array(
'font-size' => '20px',
);
$rendered = $this->listRenderer->render( '<ul><li>Item 1</li><li>Item 2</li></ul>', $parsedList, $this->settingsController );
$rendered = $this->list_renderer->render( '<ul><li>Item 1</li><li>Item 2</li></ul>', $parsed_list, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'Item 1', $rendered );
$this->assertStringContainsString( 'Item 2', $rendered );
$this->assertStringContainsString( 'font-size:20px;', $rendered );
}
/**
* Test it preserves custom set colors
*/
public function testItPreservesCustomSetColors(): void {
$parsedList = $this->parsedList;
$rendered = $this->listRenderer->render( '<ul style="color:#ff0000;background-color:#000000"><li>Item 1</li><li>Item 2</li></ul>', $parsedList, $this->settingsController );
$parsed_list = $this->parsed_list;
$rendered = $this->list_renderer->render( '<ul style="color:#ff0000;background-color:#000000"><li>Item 1</li><li>Item 2</li></ul>', $parsed_list, $this->settings_controller );
$this->checkValidHTML( $rendered );
$this->assertStringContainsString( 'color:#ff0000;', $rendered );
$this->assertStringContainsString( 'background-color:#000000', $rendered );

View File

@@ -1,16 +1,33 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Settings_Controller;
/**
* Integration test for Paragraph class
*/
class Paragraph_Test extends \MailPoetTest {
/** @var Text */
private $paragraphRenderer;
/**
* Paragraph renderer instance
*
* @var Text
*/
private $paragraph_renderer;
/** @var array */
private $parsedParagraph = array(
/**
* Paragraph block configuration
*
* @var array
*/
private $parsed_paragraph = array(
'blockName' => 'core/paragraph',
'attrs' => array(
'style' => array(
@@ -26,33 +43,46 @@ class Paragraph_Test extends \MailPoetTest {
),
);
/** @var Settings_Controller */
private $settingsController;
/**
* Settings controller instance
*
* @var Settings_Controller
*/
private $settings_controller;
/**
* Set up the test
*/
public function _before() {
$this->di_container->get( Email_Editor::class )->initialize();
$this->paragraphRenderer = new Text();
$this->settingsController = $this->di_container->get( Settings_Controller::class );
$this->paragraph_renderer = new Text();
$this->settings_controller = $this->di_container->get( Settings_Controller::class );
}
/**
* Test it renders content
*/
public function testItRendersContent(): void {
$rendered = $this->paragraphRenderer->render( '<p>Lorem Ipsum</p>', $this->parsedParagraph, $this->settingsController );
$rendered = $this->paragraph_renderer->render( '<p>Lorem Ipsum</p>', $this->parsed_paragraph, $this->settings_controller );
$this->assertStringContainsString( 'width:100%', $rendered );
$this->assertStringContainsString( 'Lorem Ipsum', $rendered );
$this->assertStringContainsString( 'font-size:16px;', $rendered );
$this->assertStringContainsString( 'text-align:left;', $rendered ); // Check the default text-align
$this->assertStringContainsString( 'align="left"', $rendered ); // Check the default align
$this->assertStringContainsString( 'text-align:left;', $rendered ); // Check the default text-align.
$this->assertStringContainsString( 'align="left"', $rendered ); // Check the default align.
}
/**
* Test it renders content with padding
*/
public function testItRendersContentWithPadding(): void {
$parsedParagraph = $this->parsedParagraph;
$parsedParagraph['attrs']['style']['spacing']['padding']['top'] = '10px';
$parsedParagraph['attrs']['style']['spacing']['padding']['right'] = '20px';
$parsedParagraph['attrs']['style']['spacing']['padding']['bottom'] = '30px';
$parsedParagraph['attrs']['style']['spacing']['padding']['left'] = '40px';
$parsedParagraph['attrs']['align'] = 'center';
$parsed_paragraph = $this->parsed_paragraph;
$parsed_paragraph['attrs']['style']['spacing']['padding']['top'] = '10px';
$parsed_paragraph['attrs']['style']['spacing']['padding']['right'] = '20px';
$parsed_paragraph['attrs']['style']['spacing']['padding']['bottom'] = '30px';
$parsed_paragraph['attrs']['style']['spacing']['padding']['left'] = '40px';
$parsed_paragraph['attrs']['align'] = 'center';
$rendered = $this->paragraphRenderer->render( '<p>Lorem Ipsum</p>', $parsedParagraph, $this->settingsController );
$rendered = $this->paragraph_renderer->render( '<p>Lorem Ipsum</p>', $parsed_paragraph, $this->settings_controller );
$this->assertStringContainsString( 'padding-top:10px;', $rendered );
$this->assertStringContainsString( 'padding-right:20px;', $rendered );
$this->assertStringContainsString( 'padding-bottom:30px;', $rendered );
@@ -62,39 +92,45 @@ class Paragraph_Test extends \MailPoetTest {
$this->assertStringContainsString( 'Lorem Ipsum', $rendered );
}
/**
* Test in renders paragraph borders
*/
public function testItRendersBorders(): void {
$parsedParagraph = $this->parsedParagraph;
$parsedParagraph['attrs']['style']['border']['width'] = '10px';
$parsedParagraph['attrs']['style']['border']['color'] = '#000001';
$parsedParagraph['attrs']['style']['border']['radius'] = '20px';
$parsed_paragraph = $this->parsed_paragraph;
$parsed_paragraph['attrs']['style']['border']['width'] = '10px';
$parsed_paragraph['attrs']['style']['border']['color'] = '#000001';
$parsed_paragraph['attrs']['style']['border']['radius'] = '20px';
$content = '<p class="has-border-color test-class has-red-border-color">Lorem Ipsum</p>';
$parsedParagraph['innerHTML'] = $content;
$parsedParagraph['innerContent'] = array( $content );
$parsed_paragraph['innerHTML'] = $content;
$parsed_paragraph['innerContent'] = array( $content );
$rendered = $this->paragraphRenderer->render( $content, $parsedParagraph, $this->settingsController );
$rendered = $this->paragraph_renderer->render( $content, $parsed_paragraph, $this->settings_controller );
$html = new \WP_HTML_Tag_Processor( $rendered );
$html->next_tag( array( 'tag_name' => 'table' ) );
$tableStyle = $html->get_attribute( 'style' );
// Table needs to have border-collapse: separate to make border-radius work
$this->assertStringContainsString( 'border-collapse: separate', $tableStyle );
$table_style = $html->get_attribute( 'style' );
// Table needs to have border-collapse: separate to make border-radius work.
$this->assertStringContainsString( 'border-collapse: separate', $table_style );
$html->next_tag( array( 'tag_name' => 'td' ) );
$tableCellStyle = $html->get_attribute( 'style' );
// Border styles are applied to the table cell
$this->assertStringContainsString( 'border-color:#000001', $tableCellStyle );
$this->assertStringContainsString( 'border-radius:20px', $tableCellStyle );
$this->assertStringContainsString( 'border-width:10px', $tableCellStyle );
$tableCellClasses = $html->get_attribute( 'class' );
$this->assertStringContainsString( 'has-border-color test-class has-red-border-color', $tableCellClasses );
$table_cell_style = $html->get_attribute( 'style' );
// Border styles are applied to the table cell.
$this->assertStringContainsString( 'border-color:#000001', $table_cell_style );
$this->assertStringContainsString( 'border-radius:20px', $table_cell_style );
$this->assertStringContainsString( 'border-width:10px', $table_cell_style );
$table_cell_classes = $html->get_attribute( 'class' );
$this->assertStringContainsString( 'has-border-color test-class has-red-border-color', $table_cell_classes );
$html->next_tag( array( 'tag_name' => 'p' ) );
// There are no border styles on the paragraph
$paragraphStyle = $html->get_attribute( 'style' );
$this->assertStringNotContainsString( 'border', $paragraphStyle );
// There are no border styles on the paragraph.
$paragraph_style = $html->get_attribute( 'style' );
$this->assertStringNotContainsString( 'border', $paragraph_style );
}
/**
* Test it converts block typography
*/
public function testItConvertsBlockTypography(): void {
$parsedParagraph = $this->parsedParagraph;
$parsedParagraph['attrs']['style']['typography'] = array(
$parsed_paragraph = $this->parsed_paragraph;
$parsed_paragraph['attrs']['style']['typography'] = array(
'textTransform' => 'uppercase',
'letterSpacing' => '1px',
'textDecoration' => 'underline',
@@ -103,7 +139,7 @@ class Paragraph_Test extends \MailPoetTest {
'fontSize' => '20px',
);
$rendered = $this->paragraphRenderer->render( '<p>Lorem Ipsum</p>', $parsedParagraph, $this->settingsController );
$rendered = $this->paragraph_renderer->render( '<p>Lorem Ipsum</p>', $parsed_paragraph, $this->settings_controller );
$this->assertStringContainsString( 'text-transform:uppercase;', $rendered );
$this->assertStringContainsString( 'letter-spacing:1px;', $rendered );
$this->assertStringContainsString( 'text-decoration:underline;', $rendered );

View File

@@ -1,15 +1,31 @@
<?php declare(strict_types = 1);
<?php
/**
* This file is part of the MailPoet plugin.
*
* @package MailPoet\EmailEditor
*/
declare(strict_types = 1);
namespace MailPoet\EmailEditor\Integrations\Core\Renderer;
use MailPoet\EmailEditor\Engine\Email_Editor;
use MailPoet\EmailEditor\Engine\Renderer\Renderer;
use MailPoet\EmailEditor\Integrations\Core\Initializer;
/**
* Integration test for Renderer class
*/
class Renderer_Test extends \MailPoetTest {
/** @var Renderer */
/**
* Instance of Renderer
*
* @var Renderer
*/
private $renderer;
/**
* Set up before each test
*/
public function _before() {
parent::_before();
$this->renderer = $this->di_container->get( Renderer::class );
@@ -17,71 +33,89 @@ class Renderer_Test extends \MailPoetTest {
$this->di_container->get( Initializer::class )->initialize();
}
/**
* Test it inlines button default styles
*/
public function testItInlinesButtonDefaultStyles() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:button --><div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button">Button</a></div><!-- /wp:button -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$buttonHtml = $this->extractBlockHtml( $rendered['html'], 'wp-block-button', 'td' );
verify( $buttonHtml )->stringContainsString( 'color: #fff' );
verify( $buttonHtml )->stringContainsString( 'padding-bottom: .7em;' );
verify( $buttonHtml )->stringContainsString( 'padding-left: 1.4em;' );
verify( $buttonHtml )->stringContainsString( 'padding-right: 1.4em;' );
verify( $buttonHtml )->stringContainsString( 'padding-top: .7em;' );
verify( $buttonHtml )->stringContainsString( 'background-color: #32373c' );
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$button_html = $this->extractBlockHtml( $rendered['html'], 'wp-block-button', 'td' );
verify( $button_html )->stringContainsString( 'color: #fff' );
verify( $button_html )->stringContainsString( 'padding-bottom: .7em;' );
verify( $button_html )->stringContainsString( 'padding-left: 1.4em;' );
verify( $button_html )->stringContainsString( 'padding-right: 1.4em;' );
verify( $button_html )->stringContainsString( 'padding-top: .7em;' );
verify( $button_html )->stringContainsString( 'background-color: #32373c' );
}
/**
* Test it overrides button default styles with user set styles
*/
public function testButtonDefaultStylesDontOverwriteUserSetStyles() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:button {"backgroundColor":"white","textColor":"vivid-cyan-blue"} --><div class="wp-block-button"><a class="wp-block-button__link has-background wp-element-button">Button</a></div><!-- /wp:button -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$buttonHtml = $this->extractBlockHtml( $rendered['html'], 'wp-block-button', 'td' );
verify( $buttonHtml )->stringContainsString( 'color: #0693e3' );
verify( $buttonHtml )->stringContainsString( 'background-color: #ffffff' );
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$button_html = $this->extractBlockHtml( $rendered['html'], 'wp-block-button', 'td' );
verify( $button_html )->stringContainsString( 'color: #0693e3' );
verify( $button_html )->stringContainsString( 'background-color: #ffffff' );
}
/**
* Test it inlines heading font size
*/
public function testItInlinesHeadingFontSize() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:heading {"level":1,"style":{"typography":{"fontSize":"large"}}} --><h1 class="wp-block-heading">Hello</h1><!-- /wp:heading -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$headingHtml = $this->extractBlockHtml( $rendered['html'], 'wp-block-heading', 'h1' );
verify( $headingHtml )->stringContainsString( 'font-size: 42px' ); // large is 42px in theme.json
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$heading_html = $this->extractBlockHtml( $rendered['html'], 'wp-block-heading', 'h1' );
verify( $heading_html )->stringContainsString( 'font-size: 42px' ); // large is 42px in theme.json.
}
/**
* Test it inlines heading colors
*/
public function testItInlinesHeadingColors() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:heading {"level":1, "backgroundColor":"black", "textColor":"luminous-vivid-orange"} --><h1 class="wp-block-heading has-luminous-vivid-orange-color has-black-background-color">Hello</h1><!-- /wp:heading -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$headingWrapperStyle = $this->extractBlockStyle( $rendered['html'], 'has-luminous-vivid-orange-color', 'td' );
verify( $headingWrapperStyle )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900
verify( $headingWrapperStyle )->stringContainsString( 'background-color: #000' ); // black is #000
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$heading_wrapper_style = $this->extractBlockStyle( $rendered['html'], 'has-luminous-vivid-orange-color', 'td' );
verify( $heading_wrapper_style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900.
verify( $heading_wrapper_style )->stringContainsString( 'background-color: #000' ); // black is #000.
}
/**
* Test it inlines paragraph colors
*/
public function testItInlinesParagraphColors() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:paragraph {style":{"color":{"background":"black", "text":"luminous-vivid-orange"}}} --><p class="has-luminous-vivid-orange-color has-black-background-color">Hello</p><!-- /wp:paragraph -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$paragraphWrapperStyle = $this->extractBlockStyle( $rendered['html'], 'has-luminous-vivid-orange-color', 'td' );
verify( $paragraphWrapperStyle )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900
verify( $paragraphWrapperStyle )->stringContainsString( 'background-color: #000' ); // black is #000
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$paragraph_wrapper_style = $this->extractBlockStyle( $rendered['html'], 'has-luminous-vivid-orange-color', 'td' );
verify( $paragraph_wrapper_style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900.
verify( $paragraph_wrapper_style )->stringContainsString( 'background-color: #000' ); // black is #000.
}
/**
* Test it inlines list colors
*/
public function testItInlinesListColors() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:list {"backgroundColor":"black","textColor":"luminous-vivid-orange","style":{"elements":{"link":{"color":{"text":"var:preset|color|vivid-red"}}}}} -->
<ul class="has-black-background-color has-luminous-vivid-orange-color has-text-color has-background has-link-color"><!-- wp:list-item -->
@@ -94,28 +128,34 @@ class Renderer_Test extends \MailPoetTest {
<!-- /wp:list -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$listStyle = $this->extractBlockStyle( $rendered['html'], 'has-luminous-vivid-orange-color', 'ul' );
verify( $listStyle )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900
verify( $listStyle )->stringContainsString( 'background-color: #000' ); // black is #000
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$list_style = $this->extractBlockStyle( $rendered['html'], 'has-luminous-vivid-orange-color', 'ul' );
verify( $list_style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900.
verify( $list_style )->stringContainsString( 'background-color: #000' ); // black is #000.
}
/**
* Test it inlines columns background color
*/
public function testItInlinesColumnsColors() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '<!-- wp:columns {"backgroundColor":"vivid-green-cyan", "textColor":"black"} -->
<div class="wp-block-columns has-black-background-color has-luminous-vivid-orange-color"><!-- wp:column --><!-- /wp:column --></div>
<!-- /wp:columns -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$style = $this->extractBlockStyle( $rendered['html'], 'wp-block-columns', 'table' );
verify( $style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900
verify( $style )->stringContainsString( 'background-color: #000' ); // black is #000
verify( $style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900.
verify( $style )->stringContainsString( 'background-color: #000' ); // black is #000.
}
/**
* Test it inlines column colors
*/
public function testItInlinesColumnColors() {
$emailPost = $this->tester->create_post(
$email_post = $this->tester->create_post(
array(
'post_content' => '
<!-- wp:column {"verticalAlignment":"stretch","backgroundColor":"black","textColor":"luminous-vivid-orange"} -->
@@ -123,31 +163,46 @@ class Renderer_Test extends \MailPoetTest {
<!-- /wp:column -->',
)
);
$rendered = $this->renderer->render( $emailPost, 'Subject', '', 'en' );
$rendered = $this->renderer->render( $email_post, 'Subject', '', 'en' );
$style = $this->extractBlockStyle( $rendered['html'], 'wp-block-column-test', 'td' );
verify( $style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900
verify( $style )->stringContainsString( 'background-color: #000' ); // black is #000
verify( $style )->stringContainsString( 'color: #ff6900' ); // luminous-vivid-orange is #ff6900.
verify( $style )->stringContainsString( 'background-color: #000' ); // black is #000.
}
private function extractBlockHtml( string $html, string $blockClass, string $tag ): string {
/**
* Extracts the HTML of a block
*
* @param string $html HTML content.
* @param string $block_class Block class.
* @param string $tag Tag name.
* @return string
*/
private function extractBlockHtml( string $html, string $block_class, string $tag ): string {
$doc = new \DOMDocument();
$doc->loadHTML( $html );
$xpath = new \DOMXPath( $doc );
$nodes = $xpath->query( '//' . $tag . '[contains(@class, "' . $blockClass . '")]' );
$nodes = $xpath->query( '//' . $tag . '[contains(@class, "' . $block_class . '")]' );
$block = null;
if ( ( $nodes instanceof \DOMNodeList ) && $nodes->length > 0 ) {
$block = $nodes->item( 0 );
}
$this->assertInstanceOf( \DOMElement::class, $block );
$this->assertInstanceOf( \DOMDocument::class, $block->ownerDocument );
return (string) $block->ownerDocument->saveHTML( $block );
$this->assertInstanceOf( \DOMDocument::class, $block->ownerDocument ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
return (string) $block->ownerDocument->saveHTML( $block ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
}
private function extractBlockStyle( string $html, string $blockClass, string $tag ): string {
/**
* Extracts the style attribute of a block
*
* @param string $html HTML content.
* @param string $block_class Block class.
* @param string $tag Tag name.
*/
private function extractBlockStyle( string $html, string $block_class, string $tag ): string {
$doc = new \DOMDocument();
$doc->loadHTML( $html );
$xpath = new \DOMXPath( $doc );
$nodes = $xpath->query( '//' . $tag . '[contains(@class, "' . $blockClass . '")]' );
$nodes = $xpath->query( '//' . $tag . '[contains(@class, "' . $block_class . '")]' );
$block = null;
if ( ( $nodes instanceof \DOMNodeList ) && $nodes->length > 0 ) {
$block = $nodes->item( 0 );