Skip to content

Commit 536681e

Browse files
authored
Merge pull request #5031 from magento-borg/MC-23058
[borg] MC-23058: Template strict mode is not set for unsaved template previews
2 parents 9a178de + 85c8724 commit 536681e

File tree

7 files changed

+137
-1
lines changed

7 files changed

+137
-1
lines changed

app/code/Magento/Email/Block/Adminhtml/Template/Preview.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ protected function _toHtml()
6767
$template->setTemplateType($request->getParam('type'));
6868
$template->setTemplateText($request->getParam('text'));
6969
$template->setTemplateStyles($request->getParam('styles'));
70+
// Emulate DB-loaded template to invoke strict mode
71+
$template->setTemplateId(123);
7072
}
7173

7274
\Magento\Framework\Profiler::start($this->profilerName);

app/code/Magento/Email/Test/Mftf/ActionGroup/EmailTemplateActionGroup.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@
4040
<fillField selector="{{AdminEmailTemplateEditSection.templateText}}" userInput="{{template.templateText}}" after="fillTemplateSubject" stepKey="fillTemplateText"/>
4141
</actionGroup>
4242

43+
<actionGroup name="PrepareDraftCustomTemplate" extends="CreateNewTemplate">
44+
<remove keyForRemoval="selectValueFromTemplateDropDown"/>
45+
<remove keyForRemoval="clickLoadTemplateButton"/>
46+
<remove keyForRemoval="clickSaveTemplateButton"/>
47+
<remove keyForRemoval="waitForSuccessMessage"/>
48+
<remove keyForRemoval="seeSuccessMessage"/>
49+
50+
<fillField selector="{{AdminEmailTemplateEditSection.templateSubject}}" userInput="{{template.templateSubject}}" after="fillTemplateNameField" stepKey="fillTemplateSubject"/>
51+
<fillField selector="{{AdminEmailTemplateEditSection.templateText}}" userInput="{{template.templateText}}" after="fillTemplateSubject" stepKey="fillTemplateText"/>
52+
</actionGroup>
53+
4354
<!-- Find and Open Email Template -->
4455
<actionGroup name="FindAndOpenEmailTemplate">
4556
<arguments>

app/code/Magento/Email/Test/Mftf/Data/EmailTemplateData.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,10 @@
1313
<data key="templateSubject" unique="suffix">Template Subject_</data>
1414
<data key="templateText" unique="suffix">Template Text_</data>
1515
</entity>
16+
<entity name="EmailTemplateWithDirectives" type="template">
17+
<data key="templateName" unique="suffix">Template</data>
18+
<data key="templateSubject" unique="suffix">Template Subject_</data>
19+
<data key="templateText">Template {{var this.template_id}}{{var this.getData(template_id)}} Text</data>
20+
<data key="expectedTemplate">Template 123 Text</data>
21+
</entity>
1622
</entities>

app/code/Magento/Email/Test/Mftf/Test/AdminEmailTemplatePreviewTest.xml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<testCaseId value="MC-15794"/>
1919
<useCaseId value="MC-11050"/>
2020
<group value="email"/>
21+
<group value="WYSIWYGDisabled"/>
2122
</annotations>
2223

2324
<before>
@@ -37,4 +38,75 @@
3738
<actionGroup ref="PreviewEmailTemplate" stepKey="previewTemplate"/>
3839
<actionGroup ref="AssertEmailTemplateContent" stepKey="assertContent"/>
3940
</test>
41+
42+
<test name="AdminEmailTemplatePreviewWithDirectivesTest">
43+
<annotations>
44+
<features value="Email"/>
45+
<stories value="Create email template with directives"/>
46+
<title value="Check email template preview with directives"/>
47+
<description value="Check if email template preview works correctly with directives"/>
48+
<severity value="CRITICAL"/>
49+
<useCaseId value="MC-23058"/>
50+
<group value="email"/>
51+
<group value="WYSIWYGDisabled"/>
52+
<stories value="Email Template Preview"/>
53+
</annotations>
54+
55+
<before>
56+
<!--Login to Admin Area-->
57+
<actionGroup ref="LoginAsAdmin" stepKey="loginToAdminArea"/>
58+
</before>
59+
60+
<after>
61+
<!--Delete created Template-->
62+
<actionGroup ref="DeleteEmailTemplate" stepKey="deleteTemplate"/>
63+
<click selector="{{AdminDataGridHeaderSection.clearFilters}}" stepKey="clearFilters"/>
64+
<!--Logout from Admin Area-->
65+
<actionGroup ref="logout" stepKey="logoutOfAdmin"/>
66+
</after>
67+
68+
<actionGroup ref="CreateCustomTemplate" stepKey="createTemplate">
69+
<argument name="template" value="EmailTemplateWithDirectives"/>
70+
</actionGroup>
71+
<actionGroup ref="PreviewEmailTemplate" stepKey="previewTemplate"/>
72+
<actionGroup ref="AssertEmailTemplateContent" stepKey="assertContent">
73+
<argument name="expectedContent" value="{{EmailTemplateWithDirectives.expectedTemplate}}"/>
74+
</actionGroup>
75+
</test>
76+
<test name="AdminEmailTemplatePreviewAsDraftWithDirectivesTest">
77+
<annotations>
78+
<features value="Email"/>
79+
<stories value="Create email template with directives and preview as draft"/>
80+
<title value="Check email template preview with directives and preview as draft"/>
81+
<description value="Check if email template preview works correctly with directives in draft mode"/>
82+
<severity value="CRITICAL"/>
83+
<useCaseId value="MC-23058"/>
84+
<group value="email"/>
85+
<group value="WYSIWYGDisabled"/>
86+
<stories value="Email Template Preview"/>
87+
</annotations>
88+
89+
<before>
90+
<actionGroup ref="LoginAsAdmin" stepKey="loginToAdminArea"/>
91+
</before>
92+
93+
<after>
94+
<actionGroup ref="logout" stepKey="logoutOfAdmin"/>
95+
</after>
96+
97+
<actionGroup ref="PrepareDraftCustomTemplate" stepKey="createDraftTemplate">
98+
<argument name="template" value="EmailTemplateWithDirectives"/>
99+
</actionGroup>
100+
101+
<click selector="{{AdminEmailTemplateEditSection.previewTemplateButton}}" stepKey="clickPreviewTemplate"/>
102+
<switchToNextTab stepKey="switchToPreviewTab"/>
103+
<seeInCurrentUrl url="{{AdminEmailTemplatePreviewPage.url}}" stepKey="seePreviewInUrl"/>
104+
<seeElement selector="{{AdminEmailTemplatePreviewSection.iframe}}" stepKey="seeIframeOnPage"/>
105+
<switchToIFrame userInput="preview_iframe" stepKey="switchToIframe"/>
106+
<waitForPageLoad stepKey="waitForPreviewLoaded"/>
107+
108+
<actionGroup ref="AssertEmailTemplateContent" stepKey="assertContent">
109+
<argument name="expectedContent" value="{{EmailTemplateWithDirectives.expectedTemplate}}"/>
110+
</actionGroup>
111+
</test>
40112
</tests>

app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ protected function _toHtml()
6565
$template->setTemplateType($previewData['type']);
6666
$template->setTemplateText($previewData['text']);
6767
$template->setTemplateStyles($previewData['styles']);
68+
// Emulate DB-loaded template to invoke strict mode
69+
$template->setTemplateId(123);
6870
}
6971

7072
\Magento\Framework\Profiler::start($this->profilerName);

app/code/Magento/Newsletter/view/adminhtml/templates/preview/iframeswitcher.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
frameborder="0"
2222
title="<?= $block->escapeHtmlAttr(__('Preview')) ?>"
2323
width="100%"
24-
sandbox="allow-forms allow-pointer-lock"
24+
sandbox="allow-forms allow-pointer-lock allow-same-origin"
2525
>
2626

2727
</iframe>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Newsletter\Controller\Adminhtml\Template;
9+
10+
use Magento\Framework\App\Request\Http as HttpRequest;
11+
use Magento\Framework\Data\Form\FormKey;
12+
use Magento\Newsletter\Model\Template;
13+
use Magento\Store\Model\StoreManagerInterface;
14+
use Magento\TestFramework\TestCase\AbstractBackendController;
15+
16+
class DropTest extends AbstractBackendController
17+
{
18+
public function testDefaultTemplateAction()
19+
{
20+
$website = $this->_objectManager
21+
->get(StoreManagerInterface::class)
22+
->getWebsite();
23+
24+
$storeId = $website->getDefaultStore()
25+
->getId();
26+
27+
/** @var $formKey FormKey */
28+
$formKey = $this->_objectManager->get(FormKey::class);
29+
$post = [
30+
'form_key' => $formKey->getFormKey(),
31+
'type' => Template::TYPE_HTML,
32+
'preview_store_id' => $storeId,
33+
'text' => 'Template {{var this.template_id}}:{{var this.getData(template_id)}} Text'
34+
];
35+
$this->getRequest()->setPostValue($post);
36+
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
37+
$this->dispatch('backend/newsletter/template/drop');
38+
$this->assertContains(
39+
'Template 123: Text',
40+
$this->getResponse()->getBody()
41+
);
42+
}
43+
}

0 commit comments

Comments
 (0)