Skip to content

Commit 221a88a

Browse files
ENGCOM-8514: Fix issue when can't remove layout update after add during new widget creation #29991
- Merge Pull Request #29991 from saphaljha/magento2:fixed-issue-29936 - Merged commits: 1. 7d6f8bb 2. 1f0fe69 3. 87be948 4. 9f9d2cb 5. 89d3814 6. 08ca835 7. 788c26c 8. 357896a 9. 04eaa23 10. dc957fb 11. 28d724d 12. 2baf801 13. bedee3d 14. e03e17e 15. 0fee9a1 16. 20275ce 17. a1f731f 18. 7b37def 19. e11e0a7 20. 901daf6
2 parents 3ad7a1d + 901daf6 commit 221a88a

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)