Skip to content

Commit 3349a47

Browse files
committed
ACP2E-3131: [Cloud] Anchor/Non-Anchor Categories Reversed in Content Widget
- Initial Change with test
1 parent 11e7d89 commit 3349a47

File tree

4 files changed

+99
-11
lines changed

4 files changed

+99
-11
lines changed

app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,26 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
7+
use Magento\Framework\Escaper;
8+
use Magento\Framework\View\Helper\SecureHtmlRenderer;
9+
10+
/** @var SecureHtmlRenderer $secureRenderer */
11+
/** @var Escaper $escaper */
812
?>
913

1014
<?php $_divId = 'tree' . $block->getId() ?>
11-
<div id="<?= $block->escapeHtmlAttr($_divId) ?>" class="tree"></div>
15+
<div id="<?= $escaper->escapeHtmlAttr($_divId) ?>" class="tree"></div>
1216
<?php
1317
$isUseMassAction = $block->getUseMassaction() ? 1 : 0;
1418
$isAnchorOnly = $block->getIsAnchorOnly() ? 1 : 0;
1519
$scriptString = <<<script
1620
1721
require(['jquery', 'jquery/jstree/jquery.jstree'], function($) {
1822
19-
let tree = $('#tree{$block->escapeJs($block->getId())}');
23+
let tree = $('#tree{$escaper->escapeJs($block->getId())}');
2024
let useMassAction = {$isUseMassAction};
2125
let isAnchorOnly = {$isAnchorOnly};
26+
let isAnchorArr = [];
2227
let checkedNodes = [];
2328
2429
function addLastNodeProperty(nodes) {
@@ -35,10 +40,18 @@ require(['jquery', 'jquery/jstree/jquery.jstree'], function($) {
3540
const rootNode = tree.jstree().get_node("#");
3641
const rootId = rootNode.children[0];
3742
38-
if (isAnchorOnly === 1 && node.id === rootId) {
39-
tree.jstree(true).disable_node(node);
40-
} else if (isAnchorOnly === 0 && node.id !== rootId) {
41-
tree.jstree(true).disable_node(node);
43+
if (isAnchorOnly === 1) {
44+
if (1 === isAnchorArr[parseInt(node.id)]) {
45+
tree.jstree(true).enable_node(node);
46+
} else {
47+
tree.jstree(true).disable_node(node);
48+
}
49+
} else {
50+
if (0 === isAnchorArr[parseInt(node.id)]) {
51+
tree.jstree(true).enable_node(node);
52+
} else {
53+
tree.jstree(true).disable_node(node);
54+
}
4255
}
4356
});
4457
}
@@ -49,7 +62,7 @@ require(['jquery', 'jquery/jstree/jquery.jstree'], function($) {
4962
5063
data.instance.get_json('#', { flat: true }).forEach(nodeId => {
5164
const node = data.instance.get_node(nodeId);
52-
65+
isAnchorArr[parseInt(node.id)] = node.original.is_anchor;
5366
if (checkedNodes.includes(node.id)) {
5467
tree.jstree(true).select_node(node.id);
5568
}
@@ -132,7 +145,7 @@ require(['jquery', 'jquery/jstree/jquery.jstree'], function($) {
132145
if (childNode.children && childNode.children.length === 0
133146
&& childNode.original && !childNode.original.lastNode) {
134147
$.ajax({
135-
url: '{$block->escapeJs($block->escapeUrl($block->getLoadTreeUrl()))}',
148+
url: '{$escaper->escapeJs($escaper->escapeUrl($block->getLoadTreeUrl()))}',
136149
data: {
137150
id: childNode.original.id,
138151
store: childNode.original.store,
@@ -179,7 +192,7 @@ script;
179192
?>
180193
<?= /* @noEscape */ $secureRenderer->renderStyleAsTag(
181194
'overflow-x: auto;',
182-
'#tree' . $block->escapeJs($block->getId())
195+
'#tree' . $escaper->escapeJs($block->getId())
183196
);
184197
?>
185198
<?= /* @noEscape */ $secureRenderer->renderTag('script', [], $scriptString, false); ?>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2024 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminVerifySpecificEntityWidgetTreeActionGroup" extends="AdminCreateWidgetActionGroup">
11+
<annotations>
12+
<description>Fill widget main fields and widget layout for anchor categories DisplayOn option. Verify the tree categories selected</description>
13+
</annotations>
14+
<selectOption selector="{{AdminNewWidgetSection.specificEntitySelectContainer}}" userInput="{{widget.container}}" stepKey="setContainer"/>
15+
<seeElement selector="{{AdminNewWidgetSection.specificEntitySelectRadio}}" stepKey="seeSpecificEntityRadio" after="waitForPageLoad"/>
16+
<click selector="{{AdminNewWidgetSection.specificEntitySelectRadio}}" stepKey="clickSpecificEntityRadio" after="seeSpecificEntityRadio"/>
17+
<seeElement selector="{{AdminNewWidgetSection.specificEntityOptionsChooser}}" stepKey="seeChooserTrigger" after="clickSpecificEntityRadio"/>
18+
<click selector="{{AdminNewWidgetSection.specificEntityOptionsChooser}}" stepKey="clickChooserTrigger" after="seeChooserTrigger"/>
19+
<remove keyForRemoval="scrollToTopOfPage"/>
20+
<remove keyForRemoval="clickWidgetOptions"/>
21+
<remove keyForRemoval="waitForWidgetOptions"/>
22+
</actionGroup>
23+
</actionGroups>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,15 @@
4949
<element name="specificEntitySelectRadio" type="input" selector="#specific_anchor_categories_0"/>
5050
<element name="specificEntityOptionsChooser" type="button" selector="#anchor_categories_ids_0 .widget-option-chooser"/>
5151
<element name="widgetInstanceType" type="select" selector=".admin__field-control select#instance_code" />
52+
<element name="expandJsTree" type="button" selector="//*[@class='chooser']/div/ul/li/i[@role='presentation']"/>
53+
<element name="jsTreeAnchorCheckbox" type="select" selector="//*[@class='chooser']/div/ul[@role='presentation']/li/ul[@role='group']/li/a/i[@class='jstree-icon jstree-checkbox']"/>
5254
<!-- Catalog Product List Widget Options -->
5355
<element name="title" type="input" selector="[name='parameters[title]']"/>
5456
<element name="displayPageControl" type="select" selector="[name='parameters[show_pager]']"/>
5557
<element name="numberOfProductsToDisplay" type="input" selector="[name='parameters[products_count]']"/>
5658
<element name="template" type="select" selector="[name='parameters[template]']"/>
5759
<element name="cacheLifetime" type="input" selector="[name='parameters[cache_lifetime]']"/>
58-
<element name="deleteWidgetLayoutAction" type="button" selector="#page_group_container > div:first-of-type > div.fieldset-wrapper-title > div > .action-default.action-delete"/>
60+
<element name="deleteWidgetLayoutAction" type="button" selector="#page_group_container > div:first-of-type > div.fieldset-wrapper-title > div > .action-default.action-delete"/>
5961
<element name="CountDeleteButtons" type="button" selector="#page_group_container > .fieldset-wrapper.page_group_container > div.fieldset-wrapper-title > div > .action-default.action-delete"/>
6062
</section>
6163
</sections>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2024 Adobe
5+
* All Rights Reserved.
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="AdminWidgetLayoutSpecificCategoriesTest">
10+
<annotations>
11+
<features value="Widget"/>
12+
<stories value="Content Widget With Anchor and Non Anchor Categories are shown properly"/>
13+
<title value="Anchor and Non Anchor Categories trees with layouts display properly"/>
14+
<description value="Admin should be able to select Anchor and Non Anchor Categories trees successfully"/>
15+
<severity value="CRITICAL"/>
16+
<testCaseId value="ACP2E-3131"/>
17+
<useCaseId value="AC-12581"/>
18+
<group value="Widget"/>
19+
</annotations>
20+
<before>
21+
<!-- Category AN1 is an anchor category -->
22+
<createData entity="_defaultCategory" stepKey="createAnchorCategoryAN1"/>
23+
<!-- Category NA1 is a non-anchor subcategory of category AN1-->
24+
<createData entity="SubCategoryNonAnchor" stepKey="createNonAnchorCategoryNA1">
25+
<requiredEntity createDataKey="createAnchorCategoryAN1"/>
26+
</createData>
27+
<actionGroup ref="AdminLoginActionGroup" stepKey="LoginAsAdmin"/>
28+
</before>
29+
<after>
30+
<deleteData createDataKey="createNonAnchorCategoryNA1" stepKey="deleteCategoryNA1"/>
31+
<deleteData createDataKey="createAnchorCategoryAN1" stepKey="deleteCategoryAN1"/>
32+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
33+
</after>
34+
<actionGroup ref="AdminNavigateMenuActionGroup" stepKey="navigateToContentWidgetsPageFirst">
35+
<argument name="menuUiId" value="{{AdminMenuContent.dataUiId}}"/>
36+
<argument name="submenuUiId" value="{{AdminMenuContentElementsWidgets.dataUiId}}"/>
37+
</actionGroup>
38+
<actionGroup ref="AdminAssertPageTitleActionGroup" stepKey="seePageTitleFirst">
39+
<argument name="title" value="{{AdminMenuContentElementsWidgets.pageTitle}}"/>
40+
</actionGroup>
41+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear1"/>
42+
<actionGroup ref="AdminVerifySpecificEntityWidgetTreeActionGroup" stepKey="fillForm">
43+
<argument name="widget" value="CatalogCategoryLinkSpecifiedCategory"/>
44+
</actionGroup>
45+
<waitForPageLoad stepKey="waitForDisplayAnchorCategories"/>
46+
<click selector="{{AdminNewWidgetSection.expandJsTree}}" stepKey="clickExpandedJsTree"/>
47+
<waitForPageLoad time="160" stepKey="waitRuleJsTreeAnchorToLoad"/>
48+
<seeElement selector="{{AdminNewWidgetSection.jsTreeAnchorCheckbox}}" stepKey="seeAnchorCheckboxEnabled"/>
49+
</test>
50+
</tests>

0 commit comments

Comments
 (0)