Fix rendering issues in form blocks

[MAILPOET-3415]
This commit is contained in:
Rostislav Wolny
2021-02-11 12:45:49 +01:00
committed by Veljko V
parent 6e911ffd1d
commit c1aef842d2
29 changed files with 196 additions and 58 deletions

View File

@ -81,7 +81,7 @@ class BlockRendererHelper {
if (is_bool($value)) {
$value = ($value) ? 'true' : 'false';
}
$validation[] = 'data-parsley-' . $rule . '="' . $value . '"';
$validation[] = 'data-parsley-' . $rule . '="' . $this->wp->escAttr($value) . '"';
}
}
return join(' ', $validation);
@ -132,7 +132,7 @@ class BlockRendererHelper {
if (isset($styles['bold'])) {
$rules[] = 'font-weight: bold;';
}
return $rules ? 'style="' . implode("", $rules) . '"' : '';
return $rules ? 'style="' . $this->wp->escAttr(implode("", $rules)) . '"' : '';
}
public function renderInputPlaceholder(array $block): string {
@ -168,7 +168,7 @@ class BlockRendererHelper {
public function getFieldLabel(array $block = []): string {
return (isset($block['params']['label'])
&& strlen(trim($block['params']['label'])) > 0)
? trim($block['params']['label']) : '';
? $this->wp->escHtml(trim($block['params']['label'])) : '';
}
public function getFieldValue($block = []) {

View File

@ -3,6 +3,7 @@
namespace MailPoet\Form\Block;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Checkbox {
@ -12,9 +13,13 @@ class Checkbox {
/** @var BlockWrapperRenderer */
private $wrapper;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper) {
/** @var WPFunctions */
private $wp;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
public function render(array $block, array $formSettings): string {
@ -51,12 +56,12 @@ class Checkbox {
$html .= $fieldValidation;
$html .= ' /> ' . $option['value'];
$html .= ' /> ' . $this->wp->escHtml($option['value']);
$html .= '</label>';
}
$html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
$html .= '<span class="mailpoet_error_' . $this->wp->escAttr($block['id']) . '"></span>';
return $this->wrapper->render($block, $html);
}

View File

@ -2,14 +2,23 @@
namespace MailPoet\Form\Block;
use MailPoet\WP\Functions as WPFunctions;
class Column {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
public function render(array $block, string $content): string {
return "<div {$this->getClass($block['params'])}{$this->getStyles($block['params'])}>$content</div>";
}
private function getStyles(array $params): string {
if (isset($params['width'])) {
return " style=\"flex-basis:{$params['width']}%;\"";
return " style=\"flex-basis:{$this->wp->escAttr($params['width'])}%;\"";
}
return '';
}
@ -23,6 +32,6 @@ class Column {
$classes[] = $params['class_name'];
}
$classes = implode(' ', $classes);
return "class=\"$classes\"";
return "class=\"{$this->wp->escAttr($classes)}\"";
}
}

View File

@ -2,7 +2,16 @@
namespace MailPoet\Form\Block;
use MailPoet\WP\Functions as WPFunctions;
class Columns {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
public function render(array $block, string $content): string {
return "<div {$this->getClass($block['params'] ?? [])}{$this->getStyles($block['params'] ?? [])}>$content</div>";
}
@ -19,7 +28,7 @@ class Columns {
$styles[] = "background:{$params['gradient']};";
}
if (count($styles)) {
return ' style="' . implode('', $styles) . '"';
return ' style="' . $this->wp->escAttr(implode('', $styles)) . '"';
}
return '';
}
@ -39,6 +48,6 @@ class Columns {
$classes[] = $params['class_name'];
}
$classes = implode(' ', $classes);
return "class=\"$classes\"";
return "class=\"{$this->wp->escAttr($classes)}\"";
}
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Form\Block;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Date {
@ -16,14 +17,19 @@ class Date {
/** @var BlockStylesRenderer */
private $blockStylesRenderer;
/** @var WPFunctions */
private $wp;
public function __construct(
BlockRendererHelper $rendererHelper,
BlockStylesRenderer $blockStylesRenderer,
BlockWrapperRenderer $wrapper
BlockWrapperRenderer $wrapper,
WPFunctions $wp
) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->blockStylesRenderer = $blockStylesRenderer;
$this->wp = $wp;
}
public function render(array $block, array $formSettings): string {
@ -55,7 +61,7 @@ class Date {
foreach ($dateSelectors as $dateSelector) {
if ($dateSelector === 'DD') {
$html .= '<select class="mailpoet_date_day" ';
$html .= ' style="' . $this->blockStylesRenderer->renderForSelect([], $formSettings) . '"';
$html .= ' style="' . $this->wp->escAttr($this->blockStylesRenderer->renderForSelect([], $formSettings)) . '"';
$html .= $this->rendererHelper->getInputValidation($block, [
'required-message' => __('Please select a day', 'mailpoet'),
]);
@ -64,7 +70,7 @@ class Date {
$html .= '</select>';
} else if ($dateSelector === 'MM') {
$html .= '<select class="mailpoet_select mailpoet_date_month" data-automation-id="form_date_month" ';
$html .= ' style="' . $this->blockStylesRenderer->renderForSelect([], $formSettings) . '"';
$html .= ' style="' . $this->wp->escAttr($this->blockStylesRenderer->renderForSelect([], $formSettings)) . '"';
$html .= $this->rendererHelper->getInputValidation($block, [
'required-message' => __('Please select a month', 'mailpoet'),
]);
@ -73,7 +79,7 @@ class Date {
$html .= '</select>';
} else if ($dateSelector === 'YYYY') {
$html .= '<select class="mailpoet_date_year" data-automation-id="form_date_year" ';
$html .= ' style="' . $this->blockStylesRenderer->renderForSelect([], $formSettings) . '"';
$html .= ' style="' . $this->wp->escAttr($this->blockStylesRenderer->renderForSelect([], $formSettings)) . '"';
$html .= $this->rendererHelper->getInputValidation($block, [
'required-message' => __('Please select a year', 'mailpoet'),
]);
@ -83,7 +89,7 @@ class Date {
}
}
$html .= '<span class="mailpoet_error_' . $block['id'] . '"></span>';
$html .= '<span class="mailpoet_error_' . $this->wp->escAttr($block['id']) . '"></span>';
return $html;
}

View File

@ -2,7 +2,16 @@
namespace MailPoet\Form\Block;
use MailPoet\WP\Functions as WPFunctions;
class Divider {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
const DEFAULT_ATTRIBUTES = [
'height' => 1,
'type' => 'divider',
@ -20,8 +29,8 @@ class Divider {
if (!empty($block['params']['class_name'])) {
$classes[] = $block['params']['class_name'];
}
$classAttr = join(' ', $classes);
$height = $block['params']['height'] ?? self::DEFAULT_ATTRIBUTES['height'];
$classAttr = $this->wp->escAttr(join(' ', $classes));
$height = $this->wp->escAttr($block['params']['height'] ?? self::DEFAULT_ATTRIBUTES['height']);
return "<div class='{$classAttr}' style='height: {$height}px;'>"
. $this->renderDivider($block)
. '</div>';
@ -43,7 +52,7 @@ class Divider {
"height: {$dividerHeight}px",
"width: $width%",
];
$style = implode(";", $dividerStyles);
$style = $this->wp->escAttr(implode(";", $dividerStyles));
return "<div class='mailpoet_divider' data-automation-id='form_divider' style='$style'></div>";
}
}

View File

@ -2,7 +2,16 @@
namespace MailPoet\Form\Block;
use MailPoet\WP\Functions as WPFunctions;
class Heading {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
public function render(array $block): string {
$content = ($block['params']['content'] ?? '');
return $this->wrapContent($content, $block);
@ -63,7 +72,7 @@ class Heading {
}
return 'class="'
. join(' ', $classes)
. $this->wp->escAttr(join(' ', $classes))
. '"';
}
@ -94,7 +103,7 @@ class Heading {
return '';
}
return 'style="'
. join('; ', $styles)
. $this->wp->escAttr(join('; ', $styles))
. '"';
}
}

View File

@ -22,13 +22,13 @@ class Image {
private function renderImage(array $params): string {
$attributes = [];
$styles = [];
$attributes[] = 'src="' . $params['url'] . '"';
$attributes[] = $params['alt'] ? 'alt="' . $params['alt'] . '"' : 'alt';
$attributes[] = 'src="' . $this->wp->escAttr($params['url']) . '"';
$attributes[] = $params['alt'] ? 'alt="' . $this->wp->escAttr($params['alt']) . '"' : 'alt';
if ($params['title']) {
$attributes[] = 'title="' . $params['title'] . '"';
$attributes[] = 'title="' . $this->wp->escAttr($params['title']) . '"';
}
if ($params['id']) {
$attributes[] = 'class="wp-image-' . $params['id'] . '"';
$attributes[] = 'class="wp-image-' . $this->wp->escAttr($params['id']) . '"';
$attributes[] = 'srcset="' . $this->wp->wpGetAttachmentImageSrcset(intval($params['id']), $params['size_slug']) . '"';
}
if ($params['width']) {
@ -40,7 +40,7 @@ class Image {
$styles[] = 'height: ' . intval($params['height']) . 'px';
}
if ($styles) {
$attributes[] = 'style="' . implode(';', $styles) . '"';
$attributes[] = 'style="' . $this->wp->escAttr(implode(';', $styles)) . '"';
}
return '<img ' . implode(' ', $attributes) . '>';
}
@ -55,26 +55,26 @@ class Image {
if ($params['href']) {
$img = $this->wrapToLink($params, $img);
}
$caption = $params['caption'] ? "<figcaption>{$params['caption']}</figcaption>" : '';
$figure = '<figure class="' . implode(' ', $figureClasses) . '">' . $img . $caption . '</figure>';
$caption = $params['caption'] ? "<figcaption>{$this->wp->escHtml($params['caption'])}</figcaption>" : '';
$figure = '<figure class="' . $this->wp->escAttr(implode(' ', $figureClasses)) . '">' . $img . $caption . '</figure>';
// Main wrapper
$divClasses = ['mailpoet_form_image'];
if (trim($params['class_name'])) {
$divClasses[] = trim($params['class_name']);
}
return '<div class="' . implode(' ', $divClasses) . '">' . $figure . '</div>';
return '<div class="' . $this->wp->escAttr(implode(' ', $divClasses)) . '">' . $figure . '</div>';
}
private function wrapToLink(array $params, string $img): string {
$attributes = ['href="' . $params['href'] . '"'];
$attributes = ['href="' . $this->wp->escAttr($params['href']) . '"'];
if ($params['link_class']) {
$attributes[] = 'class="' . $params['link_class'] . '"';
$attributes[] = 'class="' . $this->wp->escAttr($params['link_class']) . '"';
}
if ($params['link_target']) {
$attributes[] = 'target="' . $params['link_target'] . '"';
$attributes[] = 'target="' . $this->wp->escAttr($params['link_target']) . '"';
}
if ($params['rel']) {
$attributes[] = 'rel="' . $params['rel'] . '"';
$attributes[] = 'rel="' . $this->wp->escAttr($params['rel']) . '"';
}
return '<a ' . implode(' ', $attributes) . ' >' . $img . '</a>';
}

View File

@ -2,7 +2,16 @@
namespace MailPoet\Form\Block;
use MailPoet\WP\Functions as WPFunctions;
class Paragraph {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
public function render(array $block): string {
$content = ($block['params']['content'] ?? '');
return $this->wrapContent($content, $block);
@ -51,7 +60,7 @@ class Paragraph {
return null;
}
return 'class="'
. join(' ', $classes)
. $this->wp->escAttr(join(' ', $classes))
. '"';
}
@ -76,7 +85,7 @@ class Paragraph {
return null;
}
return 'style="'
. join('; ', $styles)
. $this->wp->escAttr(join('; ', $styles))
. '"';
}
}

View File

@ -43,7 +43,7 @@ class Select {
class="mailpoet_select"
name="' . $fieldName . '" '
. $automationId
. 'style="' . $this->blockStylesRenderer->renderForSelect([], $formSettings) . '"'
. 'style="' . $this->wp->escAttr($this->blockStylesRenderer->renderForSelect([], $formSettings)) . '"'
. '>';
if (isset($block['params']['label_within']) && $block['params']['label_within']) {

View File

@ -4,6 +4,7 @@ namespace MailPoet\Form\Block;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Submit {
@ -16,10 +17,19 @@ class Submit {
/** @var BlockStylesRenderer */
private $stylesRenderer;
public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, BlockStylesRenderer $stylesRenderer) {
/** @var WPFunctions */
private $wp;
public function __construct(
BlockRendererHelper $rendererHelper,
BlockWrapperRenderer $wrapper,
BlockStylesRenderer $stylesRenderer,
WPFunctions $wp
) {
$this->rendererHelper = $rendererHelper;
$this->wrapper = $wrapper;
$this->stylesRenderer = $stylesRenderer;
$this->wp = $wp;
}
public function render(array $block, array $formSettings): string {
@ -32,13 +42,13 @@ class Submit {
$html .= 'data-automation-id="subscribe-submit-button" ';
if (isset($block['styles']['font_family'])) {
$html .= "data-font-family='{$block['styles']['font_family']}' " ;
$html .= "data-font-family='{$this->wp->escAttr($block['styles']['font_family'])}' " ;
}
$styles = $this->stylesRenderer->renderForButton($block['styles'] ?? [], $formSettings);
if ($styles) {
$html .= 'style="' . $styles . '" ';
$html .= 'style="' . $this->wp->escAttr($styles) . '" ';
}
$html .= '/>';

View File

@ -4,6 +4,7 @@ namespace MailPoet\Form\Block;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Text {
/** @var BlockRendererHelper */
@ -15,14 +16,19 @@ class Text {
/** @var BlockWrapperRenderer */
private $wrapper;
/** @var WPFunctions */
private $wp;
public function __construct(
BlockRendererHelper $rendererHelper,
BlockStylesRenderer $inputStylesRenderer,
BlockWrapperRenderer $wrapper
BlockWrapperRenderer $wrapper,
WPFunctions $wp
) {
$this->rendererHelper = $rendererHelper;
$this->inputStylesRenderer = $inputStylesRenderer;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
public function render(array $block, array $formSettings): string {
@ -33,7 +39,7 @@ class Text {
}
if (in_array($block['id'], ['email', 'last_name', 'first_name'], true)) {
$automationId = 'data-automation-id="form_' . $block['id'] . '" ';
$automationId = 'data-automation-id="form_' . $this->wp->escAttr($block['id']) . '" ';
}
$styles = $this->inputStylesRenderer->renderForTextInput($block['styles'] ?? [], $formSettings);
@ -57,7 +63,7 @@ class Text {
$html .= 'value="' . $this->rendererHelper->getFieldValue($block) . '" ';
if ($styles) {
$html .= 'style="' . $styles . '" ';
$html .= 'style="' . $this->wp->escAttr($styles) . '" ';
}
$html .= $automationId;

View File

@ -4,6 +4,7 @@ namespace MailPoet\Form\Block;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class Textarea {
/** @var BlockRendererHelper */
@ -15,14 +16,19 @@ class Textarea {
/** @var BlockWrapperRenderer */
private $wrapper;
/** @var WPFunctions */
private $wp;
public function __construct(
BlockRendererHelper $rendererHelper,
BlockStylesRenderer $inputStylesRenderer,
BlockWrapperRenderer $wrapper
BlockWrapperRenderer $wrapper,
WPFunctions $wp
) {
$this->rendererHelper = $rendererHelper;
$this->inputStylesRenderer = $inputStylesRenderer;
$this->wrapper = $wrapper;
$this->wp = $wp;
}
public function render(array $block, array $formSettings): string {
@ -46,7 +52,7 @@ class Textarea {
$html .= $this->rendererHelper->getInputModifiers($block);
if ($styles) {
$html .= 'style="' . $styles . '" ';
$html .= 'style="' . $this->wp->escAttr($styles) . '" ';
}
$html .= '>' . $this->rendererHelper->getFieldValue($block) . '</textarea>';

View File

@ -2,7 +2,16 @@
namespace MailPoet\Form;
use MailPoet\WP\Functions as WPFunctions;
class BlockStylesRenderer {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
public function renderForTextInput(array $styles, array $formSettings = []): string {
$rules = [];
if (isset($styles['full_width']) && intval($styles['full_width'])) {
@ -95,7 +104,7 @@ class BlockStylesRenderer {
) {
return '<style>'
. $selector . '::placeholder{'
. 'color:' . $block['styles']['font_color'] . ';'
. 'color:' . $this->wp->escAttr($block['styles']['font_color']) . ';'
. 'opacity: 1;'
. '}'
. '</style>';

View File

@ -2,9 +2,18 @@
namespace MailPoet\Form;
use MailPoet\WP\Functions as WPFunctions;
class BlockWrapperRenderer {
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
public function render(array $block, string $blockContent): string {
$classes = isset($block['params']['class_name']) ? " " . $block['params']['class_name'] : '';
return '<div class="mailpoet_paragraph' . $classes . '">' . $blockContent . '</div>';
return '<div class="mailpoet_paragraph' . $this->wp->escAttr($classes) . '">' . $blockContent . '</div>';
}
}

View File

@ -35,6 +35,7 @@ class BlockRendererHelperTest extends \MailPoetUnitTest {
parent::_before();
$this->wpMock = $this->createMock(WPFunctions::class);
$this->wpMock->method('escAttr')->will($this->returnArgument(0));
$this->wpMock->method('escHtml')->will($this->returnArgument(0));
$this->obfuscatorMock = $this->createMock(FieldNameObfuscator::class);
$this->obfuscatorMock->method('obfuscate')->will($this->returnArgument(0));
$this->rendererHelper = new BlockRendererHelper($this->obfuscatorMock, $this->wpMock);

View File

@ -6,6 +6,7 @@ use MailPoet\Form\Block\BlockRendererHelper;
use MailPoet\Form\Block\Checkbox;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
require_once __DIR__ . '/../HtmlParser.php';
@ -46,7 +47,10 @@ class CheckboxTest extends \MailPoetUnitTest {
$this->rendererHelperMock = $this->createMock(BlockRendererHelper::class);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->checkbox = new Checkbox($this->rendererHelperMock, $this->wrapperMock);
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$wpMock->method('escHtml')->will($this->returnArgument(0));
$this->checkbox = new Checkbox($this->rendererHelperMock, $this->wrapperMock, $wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\Column;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
require_once __DIR__ . '/../HtmlParser.php';
@ -22,7 +23,9 @@ class ColumnTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->columns = new Column();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->columns = new Column($wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\Columns;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
require_once __DIR__ . '/../HtmlParser.php';
@ -21,7 +22,9 @@ class ColumnsTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->columns = new Columns();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->columns = new Columns($wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -7,6 +7,7 @@ use MailPoet\Form\Block\Date;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
use PHPUnit\Framework\MockObject\MockObject;
@ -51,7 +52,9 @@ class DateTest extends \MailPoetUnitTest {
$this->baseMock = $this->createMock(BlockRendererHelper::class);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->date = new Date($this->baseMock, $this->blockStylesRenderer, $this->wrapperMock);
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->date = new Date($this->baseMock, $this->blockStylesRenderer, $this->wrapperMock, $wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -3,6 +3,7 @@
namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\Divider;
use MailPoet\WP\Functions as WPFunctions;
class DividerTest extends \MailPoetUnitTest {
/** @var Divider */
@ -20,7 +21,9 @@ class DividerTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->divider = new Divider();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->divider = new Divider($wpMock);
}
public function testItRendersOldDividerWithNoParams() {

View File

@ -3,6 +3,7 @@
namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\Heading;
use MailPoet\WP\Functions as WPFunctions;
class HeadingTest extends \MailPoetUnitTest {
/** @var Heading */
@ -10,7 +11,9 @@ class HeadingTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->heading = new Heading();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->heading = new Heading($wpMock);
}
public function testItShouldRenderHeading() {

View File

@ -46,6 +46,8 @@ class ImageTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->wpMock = $this->createMock(WPFunctions::class);
$this->wpMock->method('escAttr')->will($this->returnArgument(0));
$this->wpMock->method('escHtml')->will($this->returnArgument(0));
$this->image = new Image($this->wpMock);
$this->htmlParser = new HtmlParser();

View File

@ -3,6 +3,7 @@
namespace MailPoet\Test\Form\Block;
use MailPoet\Form\Block\Paragraph;
use MailPoet\WP\Functions as WPFunctions;
class ParagraphTest extends \MailPoetUnitTest {
/** @var Paragraph */
@ -10,7 +11,9 @@ class ParagraphTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->paragraph = new Paragraph();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->paragraph = new Paragraph($wpMock);
}
public function testItShouldRenderParagraph() {

View File

@ -7,6 +7,7 @@ use MailPoet\Form\Block\Submit;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
require_once __DIR__ . '/../HtmlParser.php';
@ -45,7 +46,9 @@ class SubmitTest extends \MailPoetUnitTest {
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->stylesRendererMock = $this->createMock(BlockStylesRenderer::class);
$this->submit = new Submit($this->rendererHelperMock, $this->wrapperMock, $this->stylesRendererMock);
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->submit = new Submit($this->rendererHelperMock, $this->wrapperMock, $this->stylesRendererMock, $wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -7,6 +7,7 @@ use MailPoet\Form\Block\Text;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
require_once __DIR__ . '/../HtmlParser.php';
@ -47,7 +48,9 @@ class TextTest extends \MailPoetUnitTest {
$this->stylesRendererMock = $this->createMock(BlockStylesRenderer::class);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->text = new Text($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock);
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->text = new Text($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock, $wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -7,6 +7,7 @@ use MailPoet\Form\Block\Textarea;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\Test\Form\HtmlParser;
use MailPoet\WP\Functions as WPFunctions;
use PHPUnit\Framework\MockObject\MockObject;
require_once __DIR__ . '/../HtmlParser.php';
@ -48,7 +49,9 @@ class TextareaTest extends \MailPoetUnitTest {
$this->stylesRendererMock = $this->createMock(BlockStylesRenderer::class);
$this->wrapperMock = $this->createMock(BlockWrapperRenderer::class);
$this->wrapperMock->method('render')->will($this->returnArgument(1));
$this->textarea = new Textarea($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock);
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->textarea = new Textarea($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock, $wpMock);
$this->htmlParser = new HtmlParser();
}

View File

@ -3,6 +3,7 @@
namespace MailPoet\Test\Form;
use MailPoet\Form\BlockStylesRenderer;
use MailPoet\WP\Functions as WPFunctions;
require_once __DIR__ . '/HtmlParser.php';
@ -12,7 +13,9 @@ class BlockStylesRendererTest extends \MailPoetUnitTest {
public function _before() {
parent::_before();
$this->renderer = new BlockStylesRenderer();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$this->renderer = new BlockStylesRenderer($wpMock);
}
public function testItShouldReturnEmptyStringForNoStylesOrUnsupportedStyles() {

View File

@ -4,17 +4,22 @@ namespace MailPoet\Test\Form;
use Codeception\Util\Fixtures;
use MailPoet\Form\BlockWrapperRenderer;
use MailPoet\WP\Functions as WPFunctions;
class BlockWrapperRendererTest extends \MailPoetUnitTest {
public function testItShouldWrapBlockContent() {
$renderer = new BlockWrapperRenderer();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$renderer = new BlockWrapperRenderer($wpMock);
$block = Fixtures::get('simple_form_body')[0];
$result = $renderer->render($block, 'content');
expect($result)->equals('<div class="mailpoet_paragraph">content</div>');
}
public function testItShouldWrapRenderCustomClasses() {
$renderer = new BlockWrapperRenderer();
$wpMock = $this->createMock(WPFunctions::class);
$wpMock->method('escAttr')->will($this->returnArgument(0));
$renderer = new BlockWrapperRenderer($wpMock);
$block = Fixtures::get('simple_form_body')[0];
$block['params']['class_name'] = 'class1 class2';
$result = $renderer->render($block, 'content');