Skip to content

Commit bf9ee89

Browse files
authored
ENGCOM-8514: Fix issue when can't remove layout update after add during new widget creation #29991
2 parents a48754d + 221a88a commit bf9ee89

File tree

6 files changed

+125
-14
lines changed

6 files changed

+125
-14
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
<actionGroups
9+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminCreateWidgetWthoutLayoutActionGroup">
12+
<annotations>
13+
<description>Goes to the Admin Widget creation page without saving it</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="widget"/>
17+
</arguments>
18+
<amOnPage url="{{AdminNewWidgetPage.url}}" stepKey="amOnAdminNewWidgetPage"/>
19+
<selectOption selector="{{AdminNewWidgetSection.widgetType}}" userInput="{{widget.type}}" stepKey="setWidgetType"/>
20+
<selectOption selector="{{AdminNewWidgetSection.widgetDesignTheme}}" userInput="{{widget.design_theme}}" stepKey="setWidgetDesignTheme"/>
21+
<click selector="{{AdminNewWidgetSection.continue}}" stepKey="clickContinue"/>
22+
<fillField selector="{{AdminNewWidgetSection.widgetTitle}}" userInput="{{widget.name}}" stepKey="fillTitle"/>
23+
<selectOption selector="{{AdminNewWidgetSection.widgetStoreIds}}" userInput="{{widget.store_ids[0]}}" stepKey="setWidgetStoreIds"/>
24+
<click selector="{{AdminNewWidgetSection.addLayoutUpdate}}" stepKey="clickAddLayoutUpdate"/>
25+
</actionGroup>
26+
</actionGroups>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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+
<actionGroups
9+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminWidgetAddLayoutUpdateActionGroup">
12+
<annotations>
13+
<description>Add layouts during widgets creation</description>
14+
</annotations>
15+
<waitForAjaxLoad stepKey="waitForLoad"/>
16+
<click selector="{{AdminNewWidgetSection.addLayoutUpdate}}" stepKey="clickAddLayoutUpdate"/>
17+
</actionGroup>
18+
</actionGroups>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
<actionGroups
9+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminWidgetDeleteLayoutUpdateActionGroup">
12+
<annotations>
13+
<description>Delete layouts during widgets creation</description>
14+
</annotations>
15+
<click selector="{{AdminNewWidgetSection.deleteWidgetLayoutAction}}" stepKey="clickFirstDeleteButton"/>
16+
</actionGroup>
17+
</actionGroups>

app/code/Magento/Widget/Test/Mftf/Section/AdminNewWidgetSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
<element name="displayPageControl" type="select" selector="[name='parameters[show_pager]']"/>
5353
<element name="numberOfProductsToDisplay" type="input" selector="[name='parameters[products_count]']"/>
5454
<element name="cacheLifetime" type="input" selector="[name='parameters[cache_lifetime]']"/>
55+
<element name="deleteWidgetLayoutAction" type="button" selector="#page_group_container > div:first-of-type > div.fieldset-wrapper-title > div > .action-default.action-delete"/>
56+
<element name="CountDeleteButtons" type="button" selector="#page_group_container > .fieldset-wrapper.page_group_container > div.fieldset-wrapper-title > div > .action-default.action-delete"/>
5557
</section>
5658
</sections>
5759

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
9+
<test name="AdminWidgetAddAndDeleteMultipleLayoutSectionsTest">
10+
<annotations>
11+
<features value="Widget"/>
12+
<stories value="Add and Delete multiple layouts when creating a Widget"/>
13+
<title value="Add and Delete multiple layouts"/>
14+
<description value="Admin should be able to Add and Delete multiple layouts"/>
15+
<severity value="CRITICAL"/>
16+
<group value="Widget"/>
17+
</annotations>
18+
<before>
19+
<actionGroup ref="AdminLoginActionGroup" stepKey="LoginAsAdmin"/>
20+
</before>
21+
<after>
22+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
23+
</after>
24+
<actionGroup ref="AdminNavigateMenuActionGroup" stepKey="navigateToContentWidgetsPageFirst">
25+
<argument name="menuUiId" value="{{AdminMenuContent.dataUiId}}"/>
26+
<argument name="submenuUiId" value="{{AdminMenuContentElementsWidgets.dataUiId}}"/>
27+
</actionGroup>
28+
<actionGroup ref="AdminAssertPageTitleActionGroup" stepKey="seePageTitleFirst">
29+
<argument name="title" value="{{AdminMenuContentElementsWidgets.pageTitle}}"/>
30+
</actionGroup>
31+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear1"/>
32+
<actionGroup ref="AdminCreateWidgetWthoutLayoutActionGroup" stepKey="addWidgetForTest">
33+
<argument name="widget" value="ProductsListWidget"/>
34+
</actionGroup>
35+
<actionGroup ref="AdminWidgetAddLayoutUpdateActionGroup" stepKey="AddSecondLayout"/>
36+
<actionGroup ref="AdminWidgetAddLayoutUpdateActionGroup" stepKey="AddThirdLayout"/>
37+
<seeNumberOfElements userInput="3" selector="{{AdminNewWidgetSection.CountDeleteButtons}}" stepKey="seeThreeDeleteButtons"/>
38+
<actionGroup ref="AdminWidgetDeleteLayoutUpdateActionGroup" stepKey="DeleteFirstLayoutForWidget"></actionGroup>
39+
<seeNumberOfElements userInput="2" selector="{{AdminNewWidgetSection.CountDeleteButtons}}" stepKey="seeTwoDeleteButtons"/>
40+
<actionGroup ref="AdminWidgetDeleteLayoutUpdateActionGroup" stepKey="DeleteSecondLayoutForWidget"></actionGroup>
41+
<seeNumberOfElements userInput="1" selector="{{AdminNewWidgetSection.CountDeleteButtons}}" stepKey="seeOneDeleteButtons"/>
42+
<actionGroup ref="AdminWidgetDeleteLayoutUpdateActionGroup" stepKey="DeleteThirdLayoutForWidget"></actionGroup>
43+
<seeNumberOfElements userInput="0" selector="{{AdminNewWidgetSection.CountDeleteButtons}}" stepKey="seeZeroDeleteButtons"/>
44+
</test>
45+
</tests>

lib/internal/Magento/Framework/View/Helper/SecureHtmlRenderer.php

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

99
namespace Magento\Framework\View\Helper;
1010

11-
use Magento\Framework\Api\SimpleDataObjectConverter;
1211
use Magento\Framework\Math\Random;
1312
use Magento\Framework\View\Helper\SecureHtmlRender\EventHandlerData;
1413
use Magento\Framework\View\Helper\SecureHtmlRender\HtmlRenderer;
@@ -105,23 +104,27 @@ public function renderEventListenerAsTag(
105104
}
106105

107106
$random = $this->random->getRandomString(10);
108-
$listenerFunction = 'eventListener' .$random;
109-
$elementName = 'listenedElement' .$random;
107+
$listenerFunction = 'eventListener' . $random;
108+
$elementName = 'listenedElement' . $random;
110109
$script = <<<script
111110
function {$listenerFunction} () {
112111
{$attributeJavascript};
113112
}
114-
var {$elementName} = document.querySelector("{$elementSelector}");
115-
if ({$elementName}) {
116-
{$elementName}.{$eventName} = function (event) {
117-
var targetElement = {$elementName};
118-
if (event && event.target) {
119-
targetElement = event.target;
113+
var {$elementName}Array = document.querySelectorAll("{$elementSelector}");
114+
if({$elementName}Array.length !== 'undefined'){
115+
{$elementName}Array.forEach(function(element) {
116+
if (element) {
117+
element.{$eventName} = function (event) {
118+
var targetElement = element;
119+
if (event && event.target) {
120+
targetElement = event.target;
121+
}
122+
{$listenerFunction}.apply(targetElement);
123+
};
120124
}
121-
{$listenerFunction}.apply(targetElement);
122-
}
125+
});
123126
}
124-
script;
127+
script;
125128

126129
return $this->renderTag('script', ['type' => 'text/javascript'], $script, false);
127130
}
@@ -140,7 +143,7 @@ public function renderStyleAsTag(string $style, string $selector): string
140143
throw new \InvalidArgumentException('Invalid style data given');
141144
}
142145

143-
$elementVariable = 'elem' .$this->random->getRandomString(8);
146+
$elementVariable = 'elem' . $this->random->getRandomString(8);
144147
/** @var string[] $styles */
145148
$stylesAssignments = '';
146149
foreach ($stylePairs as $stylePair) {
@@ -162,7 +165,7 @@ public function renderStyleAsTag(string $style, string $selector): string
162165
'script',
163166
['type' => 'text/javascript'],
164167
"var $elementVariable = document.querySelector('$selector');\n"
165-
."if ($elementVariable) {\n{$stylesAssignments}}",
168+
. "if ($elementVariable) {\n{$stylesAssignments}}",
166169
false
167170
);
168171
}

0 commit comments

Comments
 (0)