Skip to content

Commit ddde95f

Browse files
author
Joan He
committed
Merge remote-tracking branch 'upstream/2.3-qwerty' into 2.3-qwerty-pr
2 parents a5c5e65 + 369b547 commit ddde95f

File tree

19 files changed

+285
-74
lines changed

19 files changed

+285
-74
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
namespace Magento\Email\Block\Adminhtml\Template;
1313

1414
/**
15+
* Email template preview block.
16+
*
1517
* @api
1618
* @since 100.0.2
1719
*/
@@ -68,8 +70,6 @@ protected function _toHtml()
6870
$template->setTemplateStyles($this->getRequest()->getParam('styles'));
6971
}
7072

71-
$template->setTemplateText($this->_maliciousCode->filter($template->getTemplateText()));
72-
7373
\Magento\Framework\Profiler::start($this->profilerName);
7474

7575
$template->emulateDesign($storeId);
@@ -78,6 +78,7 @@ protected function _toHtml()
7878
[$template, 'getProcessedTemplate']
7979
);
8080
$template->revertDesign();
81+
$templateProcessed = $this->_maliciousCode->filter($templateProcessed);
8182

8283
if ($template->isPlain()) {
8384
$templateProcessed = "<pre>" . htmlspecialchars($templateProcessed) . "</pre>";
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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\Email\Controller\Adminhtml\Email\Template;
9+
10+
use Magento\Framework\App\Action\HttpGetActionInterface;
11+
12+
/**
13+
* Rendering popup email template.
14+
*/
15+
class Popup extends \Magento\Backend\App\Action implements HttpGetActionInterface
16+
{
17+
/**
18+
* @var \Magento\Framework\View\Result\PageFactory
19+
*/
20+
private $resultPageFactory;
21+
22+
/**
23+
* @param \Magento\Backend\App\Action\Context $context
24+
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
25+
*/
26+
public function __construct(
27+
\Magento\Backend\App\Action\Context $context,
28+
\Magento\Framework\View\Result\PageFactory $resultPageFactory
29+
) {
30+
parent::__construct($context);
31+
$this->resultPageFactory = $resultPageFactory;
32+
}
33+
34+
/**
35+
* Load the page.
36+
*
37+
* Load the page defined in view/adminhtml/layout/adminhtml_email_template_popup.xml
38+
*
39+
* @return \Magento\Framework\View\Result\Page
40+
*/
41+
public function execute()
42+
{
43+
return $this->resultPageFactory->create();
44+
}
45+
46+
/**
47+
* @inheritdoc
48+
*/
49+
protected function _isAllowed()
50+
{
51+
return $this->_authorization->isAllowed('Magento_Email::template');
52+
}
53+
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@
66
*/
77
namespace Magento\Email\Controller\Adminhtml\Email\Template;
88

9-
class Preview extends \Magento\Email\Controller\Adminhtml\Email\Template
9+
use Magento\Framework\App\Action\HttpGetActionInterface;
10+
11+
/**
12+
* Rendering email template preview.
13+
*/
14+
class Preview extends \Magento\Email\Controller\Adminhtml\Email\Template implements HttpGetActionInterface
1015
{
1116
/**
12-
* Preview transactional email action
17+
* Preview transactional email action.
1318
*
1419
* @return void
1520
*/
@@ -19,7 +24,7 @@ public function execute()
1924
$this->_view->loadLayout();
2025
$this->_view->getPage()->getConfig()->getTitle()->prepend(__('Email Preview'));
2126
$this->_view->renderLayout();
22-
$this->getResponse()->setHeader('Content-Security-Policy', "script-src 'none'");
27+
$this->getResponse()->setHeader('Content-Security-Policy', "script-src 'self'");
2328
} catch (\Exception $e) {
2429
$this->messageManager->addErrorMessage(
2530
__('An error occurred. The email template can not be opened for preview.')

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

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,70 @@
1111

1212
<!--Create New Template -->
1313
<actionGroup name="CreateNewTemplate">
14+
<arguments>
15+
<argument name="template" defaultValue="EmailTemplate"/>
16+
</arguments>
17+
18+
<!--Go to Marketing> Email Templates-->
19+
<amOnPage url="{{AdminEmailTemplateIndexPage.url}}" stepKey="navigateToEmailTemplatePage"/>
1420
<!--Click "Add New Template" button-->
15-
<click stepKey="clickAddNewTemplateButton" selector="{{EmailTemplatesSection.addNewTemplateButton}}"/>
16-
<waitForPageLoad stepKey="waitForNewEmailTemplatesPageLoaded"/>
21+
<click selector="{{AdminMainActionsSection.add}}" stepKey="clickAddNewTemplateButton"/>
1722
<!--Select value for "Template" drop-down menu in "Load default template" tab-->
18-
<selectOption selector="{{EmailTemplatesSection.templateDropDown}}" stepKey="selectValueFromTemplateDropDown" userInput="Registry Update"/>
19-
23+
<selectOption selector="{{AdminEmailTemplateEditSection.templateDropDown}}" userInput="Registry Update" stepKey="selectValueFromTemplateDropDown"/>
2024
<!--Fill in required fields in "Template Information" tab and click "Save Template" button-->
21-
<click stepKey="clickLoadTemplateButton" selector="{{EmailTemplatesSection.loadTemplateButton}}" after="selectValueFromTemplateDropDown"/>
22-
<fillField stepKey="fillTemplateNameField" selector="{{EmailTemplatesSection.templateNameField}}" userInput="{{EmailTemplate.templateName}}" after="clickLoadTemplateButton"/>
23-
<waitForLoadingMaskToDisappear stepKey="wait1"/>
24-
<click stepKey="clickSaveTemplateButton" selector="{{EmailTemplatesSection.saveTemplateButton}}"/>
25-
<waitForPageLoad stepKey="waitForNewTemplateCreated"/>
25+
<click selector="{{AdminEmailTemplateEditSection.loadTemplateButton}}" stepKey="clickLoadTemplateButton"/>
26+
<fillField selector="{{AdminEmailTemplateEditSection.templateCode}}" userInput="{{EmailTemplate.templateName}}" stepKey="fillTemplateNameField"/>
27+
<click selector="{{AdminMainActionsSection.save}}" stepKey="clickSaveTemplateButton"/>
28+
<waitForElementVisible selector="{{AdminMessagesSection.successMessage}}" stepKey="waitForSuccessMessage"/>
29+
<see selector="{{AdminMessagesSection.successMessage}}" userInput="You saved the email template." stepKey="seeSuccessMessage"/>
30+
</actionGroup>
31+
32+
<!--Create New Custom Template -->
33+
<actionGroup name="CreateCustomTemplate" extends="CreateNewTemplate">
34+
<remove keyForRemoval="selectValueFromTemplateDropDown"/>
35+
<remove keyForRemoval="clickLoadTemplateButton"/>
36+
37+
<fillField selector="{{AdminEmailTemplateEditSection.templateSubject}}" userInput="{{template.templateSubject}}" after="fillTemplateNameField" stepKey="fillTemplateSubject"/>
38+
<fillField selector="{{AdminEmailTemplateEditSection.templateText}}" userInput="{{template.templateText}}" after="fillTemplateSubject" stepKey="fillTemplateText"/>
39+
</actionGroup>
40+
41+
<!-- Find and Open Email Template -->
42+
<actionGroup name="FindAndOpenEmailTemplate">
43+
<arguments>
44+
<argument name="template" defaultValue="EmailTemplate"/>
45+
</arguments>
46+
47+
<amOnPage url="{{AdminEmailTemplateIndexPage.url}}" stepKey="navigateEmailTemplatePage" />
48+
<click selector="{{AdminDataGridHeaderSection.clearFilters}}" stepKey="clearFilters"/>
49+
<fillField selector="{{AdminEmailTemplateIndexSection.searchTemplateField}}" userInput="{{template.templateName}}" stepKey="findCreatedTemplate"/>
50+
<click selector="{{AdminDataGridHeaderSection.applyFilters}}" stepKey="clickSearch"/>
51+
<waitForElementVisible selector="{{AdminEmailTemplateIndexSection.templateRowByName(template.templateName)}}" stepKey="waitForTemplatesAppeared"/>
52+
<click selector="{{AdminEmailTemplateIndexSection.templateRowByName(template.templateName)}}" stepKey="clickToOpenTemplate"/>
53+
<waitForElementVisible selector="{{AdminEmailTemplateEditSection.templateCode}}" stepKey="waitForTemplateNameisible"/>
54+
<seeInField selector="{{AdminEmailTemplateEditSection.templateCode}}" userInput="{{template.templateName}}" stepKey="checkTemplateName"/>
55+
</actionGroup>
56+
57+
<actionGroup name="DeleteEmailTemplate" extends="FindAndOpenEmailTemplate">
58+
<click selector="{{AdminEmailTemplateEditSection.deleteTemplateButton}}" after="checkTemplateName" stepKey="deleteTemplate"/>
59+
<acceptPopup after="deleteTemplate" stepKey="acceptPopup"/>
60+
<waitForElementVisible selector="{{AdminMessagesSection.successMessage}}" after="acceptPopup" stepKey="waitForSuccessMessage"/>
61+
<see selector="{{AdminMessagesSection.successMessage}}" userInput="You deleted the email template." after="waitForSuccessMessage" stepKey="seeSuccessfulMessage"/>
2662
</actionGroup>
2763

28-
<!--Delete created Template-->
29-
<actionGroup name="DeleteCreatedTemplate">
30-
<switchToPreviousTab stepKey="switchToPreviousTab"/>
31-
<seeInCurrentUrl stepKey="seeCreatedTemplateUrl" url="email_template/edit/id"/>
32-
<click stepKey="clickDeleteTemplateButton" selector="{{EmailTemplatesSection.deleteTemplateButton}}"/>
33-
<acceptPopup stepKey="acceptDeletingTemplatePopUp"/>
34-
<see stepKey="SeeSuccessfulMessage" userInput="You deleted the email template."/>
35-
<click stepKey="clickResetFilterButton" selector="{{EmailTemplatesSection.resetFilterButton}}"/>
36-
<waitForElementNotVisible selector="{{MarketingEmailTemplateSection.clearSearchTemplate(EmailTemplate.templateName)}}" stepKey="waitForSearchFieldCleared"/>
64+
<actionGroup name="PreviewEmailTemplate" extends="FindAndOpenEmailTemplate">
65+
<click selector="{{AdminEmailTemplateEditSection.previewTemplateButton}}" after="checkTemplateName" stepKey="clickPreviewTemplate"/>
66+
<switchToNextTab after="clickPreviewTemplate" stepKey="switchToNewOpenedTab"/>
67+
<seeInCurrentUrl url="{{AdminEmailTemplatePreviewPage.url}}" after="switchToNewOpenedTab" stepKey="seeCurrentUrl"/>
68+
<seeElement selector="{{AdminEmailTemplatePreviewSection.iframe}}" after="seeCurrentUrl" stepKey="seeIframeOnPage"/>
69+
<switchToIFrame userInput="preview_iframe" after="seeIframeOnPage" stepKey="switchToIframe"/>
70+
<waitForPageLoad after="switchToIframe" stepKey="waitForPageLoaded"/>
3771
</actionGroup>
3872

73+
<actionGroup name="AssertEmailTemplateContent">
74+
<arguments>
75+
<argument name="expectedContent" type="string" defaultValue="{{EmailTemplate.templateText}}"/>
76+
</arguments>
77+
78+
<see userInput="{{expectedContent}}" stepKey="checkTemplateContainText"/>
79+
</actionGroup>
3980
</actionGroups>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@
1010
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
1111
<entity name="EmailTemplate" type="template">
1212
<data key="templateName" unique="suffix">Template</data>
13+
<data key="templateSubject" unique="suffix">Template Subject_</data>
14+
<data key="templateText" unique="suffix">Template Text_</data>
1315
</entity>
1416
</entities>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:/Page/etc/PageObject.xsd">
11+
<page name="AdminEmailTemplateEditPage" url="/admin/email_template/edit/id/{{templateId}}/" area="admin" module="Magento_Email" parameterized="true">
12+
<section name="AdminEmailTemplateEditSection"/>
13+
</page>
14+
</pages>

app/code/Magento/Email/Test/Mftf/Page/AdminEmailTemplatePage.xml renamed to app/code/Magento/Email/Test/Mftf/Page/AdminEmailTemplateIndexPage.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1010
xsi:noNamespaceSchemaLocation="urn:magento:mftf:/Page/etc/PageObject.xsd">
11-
<page name="AdminEmailTemplatePage" url="/admin/email_template/" area="admin" module="Email">
12-
<section name="AdminEmailTemplatePageActionSection"/>
11+
<page name="AdminEmailTemplateIndexPage" url="/admin/email_template/" area="admin" module="Magento_Email">
12+
<section name="AdminEmailTemplateIndexSection"/>
1313
</page>
1414
</pages>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:/Page/etc/PageObject.xsd">
11+
<page name="AdminEmailTemplatePreviewPage" url="/admin/email_template/preview/" area="admin" module="Magento_Email">
12+
<section name="AdminEmailTemplatePreviewSection"/>
13+
</page>
14+
</pages>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
11+
<section name="AdminEmailTemplateEditSection">
12+
<element name="templateCode" type="input" selector="#template_code"/>
13+
<element name="templateSubject" type="input" selector="#template_subject"/>
14+
<element name="templateText" type="input" selector="#template_text"/>
15+
<element name="templateDropDown" type="select" selector="#template_select"/>
16+
<element name="loadTemplateButton" type="button" selector="#load" timeout="30"/>
17+
<element name="deleteTemplateButton" type="button" selector="#delete"/>
18+
<element name="previewTemplateButton" type="button" selector="#preview" timeout="30"/>
19+
</section>
20+
</sections>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
11+
<section name="AdminEmailTemplateIndexSection">
12+
<element name="searchTemplateField" type="input" selector="#systemEmailTemplateGrid_filter_code"/>
13+
<element name="templateRowByName" type="button" selector="//*[@id='systemEmailTemplateGrid_table']//td[contains(@class, 'col-code') and normalize-space(.)='{{templateName}}']/ancestor::tr" parameterized="true"/>
14+
</section>
15+
</sections>

0 commit comments

Comments
 (0)