Skip to content

Commit a12b85c

Browse files
Chhandak.BaruaChhandak.Barua
authored andcommitted
Merge branch '2.4-develop' of https://github.com/magento-l3/magento2ce into ACP2E-1338
2 parents b61c168 + f3e1661 commit a12b85c

File tree

39 files changed

+1226
-87
lines changed

39 files changed

+1226
-87
lines changed

app/code/Magento/Backend/Test/Mftf/Test/AdminLoginSuccessfulTest.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
<group value="example"/>
2020
<group value="login"/>
2121
</annotations>
22-
23-
2422
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
2523
<actionGroup ref="AssertAdminSuccessLoginActionGroup" stepKey="assertLoggedIn"/>
2624
<actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/>

app/code/Magento/Bundle/Test/Mftf/ActionGroup/SetBundleProductAttributesActionGroup.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
<checkOption selector="{{AdminProductFormBundleSection.dynamicWeightToggle}}" stepKey="dynamicWeight"/>
6161

6262
<!--Weight-->
63+
<scrollTo selector="{{AdminProductFormBundleSection.weightFieldLabel}}" stepKey="scrollToWeight"/>
6364
<fillField selector="{{AdminProductFormBundleSection.weightField}}" userInput="{{weight}}" stepKey="fillIn"/>
6465

6566
<!--Visibility-->

app/code/Magento/Bundle/Test/Mftf/Section/AdminProductFormBundleSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,5 +124,6 @@
124124
<element name="customizableOptionPrice" type="input" selector=".//*[@name='product[options][0][price]']" />
125125
<element name="priceType" type="select" selector="[name='product[options][0][price_type]']" />
126126
<element name="priceTypeSelectPercent" type="select" selector="//*[@name='product[options][0][price_type]']/option[2]" />
127+
<element name="weightFieldLabel" type="input" selector="//div[@data-index='weight']/div/label/span"/>
127128
</section>
128129
</sections>
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+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminToggleProductGridColumnByClickingItsNameActionGroup">
12+
<annotations>
13+
<description>Click on 'Columns' name from Columns dropdown menu in Admin Product Grid.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="optionName" type="string" defaultValue="Name"/>
17+
</arguments>
18+
<click selector="{{AdminProductGridFilterSection.viewColumnOptionName(optionName)}}" stepKey="clickOnTheColumnName"/>
19+
</actionGroup>
20+
</actionGroups>

app/code/Magento/Catalog/Test/Mftf/Section/AdminProductGridFilterSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
<element name="inputByCodeRangeFrom" type="input" selector="input.admin__control-text[name='{{code}}[from]']" parameterized="true"/>
4040
<element name="inputByCodeRangeTo" type="input" selector="input.admin__control-text[name='{{code}}[to]']" parameterized="true"/>
4141
<element name="storeViewOptions" type="text" selector=".admin__data-grid-outer-wrap select[name='store_id'] > option[value='{{value}}']" parameterized="true"/>
42+
<element name="viewColumnOptionName" type="text" selector="//div[contains(@class, '_active')]//div[contains(@class, 'admin__data-grid-action-columns-menu')]//div[@class='admin__field-option']//label[text()='{{col}}']" parameterized="true"/>
4243
<element name="customAttribute" type="text" selector="input.admin__control-text[name='{{var}}']" parameterized="true"/>
4344
</section>
4445
</sections>

app/code/Magento/Catalog/Test/Mftf/Section/StorefrontCategoryMainSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,6 @@
4343
<element name="searchStore" type="input" selector="//div/input[@id='search']" />
4444
<element name="productAttributeName" type="button" selector="//div[@class='filter-options-title' and contains(text(),'{{var1}}')]" parameterized="true"/>
4545
<element name="productAttributeOptionValue" type="button" selector="//div[@id='narrow-by-list']//a[contains(text(), '{{var1}}')]" parameterized="true"/>
46+
<element name="outOfStockProductCategoryPage" type="text" selector="//div[@class='stock unavailable']//span[text()='Out of stock']"/>
4647
</section>
4748
</sections>

app/code/Magento/Catalog/Test/Mftf/Section/StorefrontCategoryTopToolbarSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
<element name="sortByDropdown" type="select" selector=".//*[@class='toolbar toolbar-products'][1]//*[@id='sorter']" timeout="30"/>
1515
<element name="sortDirectionAsc" type="button" selector=".//*[@class='toolbar toolbar-products'][1]//a[contains(@class, 'sort-asc')]" timeout="30"/>
1616
<element name="sortDirectionDesc" type="button" selector=".//*[@class='toolbar toolbar-products'][1]//a[contains(@class, 'sort-desc')]" timeout="30"/>
17+
<element name="showDropdown" type="select" selector="//*[@id='limiter']" timeout="30"/>
1718
</section>
1819
</sections>
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
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"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="AdminChangeCategoryDisplaySettingsOnStorefrontTest">
11+
<annotations>
12+
<features value="Catalog"/>
13+
<stories value="ChangeCategoryDisplaySettingsOnStorefront"/>
14+
<title value="Verify correctness of Sorting,Navigation, Listing products"/>
15+
<description value="Verify correctness of Sorting, Navigation, Listing products at the Storefront Category"/>
16+
<severity value="MAJOR"/>
17+
<testCaseId value="AC-4150"/>
18+
<group value="Catalog"/>
19+
</annotations>
20+
<before>
21+
<!-- create category -->
22+
<createData entity="_defaultCategory" stepKey="createCategory"/>
23+
<!-- create 11 simple products -->
24+
<createData entity="SimpleProduct" stepKey="createSimpleProduct1">
25+
<field key="price">10</field>
26+
<field key="quantity">1000</field>
27+
<requiredEntity createDataKey="createCategory"/>
28+
</createData>
29+
<createData entity="SimpleProduct" stepKey="createSimpleProduct2">
30+
<field key="price">11</field>
31+
<field key="quantity">1000</field>
32+
<requiredEntity createDataKey="createCategory"/>
33+
</createData>
34+
<createData entity="SimpleProduct" stepKey="createSimpleProduct3">
35+
<field key="price">12</field>
36+
<field key="quantity">1000</field>
37+
<requiredEntity createDataKey="createCategory"/>
38+
</createData>
39+
<createData entity="SimpleProduct" stepKey="createSimpleProduct4">
40+
<field key="price">13</field>
41+
<field key="quantity">1000</field>
42+
<requiredEntity createDataKey="createCategory"/>
43+
</createData>
44+
<createData entity="SimpleProduct" stepKey="createSimpleProduct5">
45+
<field key="price">14</field>
46+
<field key="quantity">1000</field>
47+
<requiredEntity createDataKey="createCategory"/>
48+
</createData>
49+
<createData entity="SimpleProduct" stepKey="createSimpleProduct6">
50+
<field key="price">15</field>
51+
<field key="quantity">1000</field>
52+
<requiredEntity createDataKey="createCategory"/>
53+
</createData>
54+
<createData entity="SimpleProduct" stepKey="createSimpleProduct7">
55+
<field key="price">16</field>
56+
<field key="quantity">1000</field>
57+
<requiredEntity createDataKey="createCategory"/>
58+
</createData>
59+
<createData entity="SimpleProduct" stepKey="createSimpleProduct8">
60+
<field key="price">17</field>
61+
<field key="quantity">1000</field>
62+
<requiredEntity createDataKey="createCategory"/>
63+
</createData>
64+
<createData entity="SimpleProduct" stepKey="createSimpleProduct9">
65+
<field key="price">18</field>
66+
<field key="quantity">1000</field>
67+
<requiredEntity createDataKey="createCategory"/>
68+
</createData>
69+
<createData entity="SimpleProduct" stepKey="createSimpleProduct10">
70+
<field key="price">19</field>
71+
<field key="quantity">1000</field>
72+
<requiredEntity createDataKey="createCategory"/>
73+
</createData>
74+
<createData entity="SimpleProduct" stepKey="createSimpleProduct11">
75+
<field key="price">20</field>
76+
<field key="quantity">1000</field>
77+
<requiredEntity createDataKey="createCategory"/>
78+
</createData>
79+
<createData entity="SimpleProduct" stepKey="createSimpleProduct12">
80+
<field key="price">21</field>
81+
<field key="quantity">1000</field>
82+
<requiredEntity createDataKey="createCategory"/>
83+
</createData><createData entity="SimpleProduct" stepKey="createSimpleProduct13">
84+
<field key="price">22</field>
85+
<field key="quantity">1000</field>
86+
<requiredEntity createDataKey="createCategory"/>
87+
</createData><createData entity="SimpleProduct" stepKey="createSimpleProduct14">
88+
<field key="price">23</field>
89+
<field key="quantity">1000</field>
90+
<requiredEntity createDataKey="createCategory"/>
91+
</createData><createData entity="SimpleProduct" stepKey="createSimpleProduct15">
92+
<field key="price">24</field>
93+
<field key="quantity">1000</field>
94+
<requiredEntity createDataKey="createCategory"/>
95+
</createData>
96+
</before>
97+
<after>
98+
<!-- delete created entities -->
99+
<deleteData createDataKey="createSimpleProduct1" stepKey="deleteSimpleProduct1"/>
100+
<deleteData createDataKey="createSimpleProduct2" stepKey="deleteSimpleProduct2"/>
101+
<deleteData createDataKey="createSimpleProduct3" stepKey="deleteSimpleProduct3"/>
102+
<deleteData createDataKey="createSimpleProduct4" stepKey="deleteSimpleProduct4"/>
103+
<deleteData createDataKey="createSimpleProduct5" stepKey="deleteSimpleProduct5"/>
104+
<deleteData createDataKey="createSimpleProduct6" stepKey="deleteSimpleProduct6"/>
105+
<deleteData createDataKey="createSimpleProduct7" stepKey="deleteSimpleProduct7"/>
106+
<deleteData createDataKey="createSimpleProduct8" stepKey="deleteSimpleProduct8"/>
107+
<deleteData createDataKey="createSimpleProduct9" stepKey="deleteSimpleProduct9"/>
108+
<deleteData createDataKey="createSimpleProduct10" stepKey="deleteSimpleProduct10"/>
109+
<deleteData createDataKey="createSimpleProduct11" stepKey="deleteSimpleProduct11"/>
110+
<deleteData createDataKey="createSimpleProduct12" stepKey="deleteSimpleProduct12"/>
111+
<deleteData createDataKey="createSimpleProduct13" stepKey="deleteSimpleProduct13"/>
112+
<deleteData createDataKey="createSimpleProduct14" stepKey="deleteSimpleProduct14"/>
113+
<deleteData createDataKey="createSimpleProduct15" stepKey="deleteSimpleProduct15"/>
114+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
115+
</after>
116+
<!-- Login to Admin page -->
117+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
118+
<actionGroup ref="AssertAdminSuccessLoginActionGroup" stepKey="assertLoggedIn"/>
119+
<!-- Open created category on Storefront -->
120+
<actionGroup ref="StorefrontGoToCategoryPageActionGroup" stepKey="openCategoryPage">
121+
<argument name="categoryName" value="$$createCategory.name$$"/>
122+
</actionGroup>
123+
<!-- Switch category view to List mode -->
124+
<actionGroup ref="StorefrontSwitchCategoryViewToListModeActionGroup" stepKey="switchCategoryViewToListMode"/>
125+
<!-- Sort products By Price -->
126+
<actionGroup ref="StorefrontCategoryPageSortProductActionGroup" stepKey="sortProductByPrice"/>
127+
<!-- Set Ascending Direction -->
128+
<actionGroup ref="StorefrontCategoryPageSortAscendingActionGroup" stepKey="setAscendingDirection"/>
129+
<!-- Sort products By ProductName -->
130+
<selectOption selector="{{StorefrontCategoryTopToolbarSection.sortByDropdown}}" userInput="Product Name" stepKey="selectSortByProductName"/>
131+
<!-- Set Descending Direction -->
132+
<actionGroup ref="StorefrontCategoryPageSortDescendingActionGroup" stepKey="setDescendingDirection"/>
133+
<selectOption selector="{{StorefrontCategoryTopToolbarSection.showDropdown}}" userInput="15" stepKey="selectShowProducts"/>
134+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/>
135+
</test>
136+
</tests>
137+
138+
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminProductGridCustomViewColumnDisplayTest">
12+
<annotations>
13+
<stories value="Product grid columns visibility can be toggled by clicking on their names in the Columns drop-down menu, not just on their respective checkboxes."/>
14+
<title value="Product grid columns visibility can be toggled by clicking on their names in the Columns drop-down menu, not just on their respective checkboxes."/>
15+
<description value="Assert that after rearranging columns order on the product grid in Admin, it will still be possible to toggle the visibility of the columns by clicking on their names in the Columns dropdown menu, and not only on their respective checkboxes."/>
16+
<severity value="AVERAGE"/>
17+
<testCaseId value="AC-6229"/>
18+
<useCaseId value="ACP2E-1073"/>
19+
<group value="catalog"/>
20+
</annotations>
21+
<before>
22+
<!-- Log in as admin -->
23+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
24+
</before>
25+
<after>
26+
<actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilters"/>
27+
<actionGroup ref="AdminLogoutActionGroup" stepKey="beginWithLogout"/>
28+
</after>
29+
<!-- Navigate to products list page -->
30+
<actionGroup ref="AdminOpenProductIndexPageActionGroup" stepKey="navigateToProductIndex"/>
31+
<!-- Sort SKU and Name column position -->
32+
<dragAndDrop selector1="{{AdminProductGridSection.columnHeader('SKU')}}" selector2="{{AdminProductGridSection.columnHeader('Name')}}" stepKey="dragAndDropColumnName"/>
33+
<!-- Check if price column is visible in grid -->
34+
<seeElement selector="{{AdminProductGridSection.columnHeader('Price')}}" stepKey="seeProductPriceColumn"/>
35+
<!-- Click on columns, in dropdown uncheck price -->
36+
<actionGroup ref="ToggleAdminProductGridColumnsDropdownActionGroup" stepKey="openColumnsDropdownMenuToTogglePrice"/>
37+
<actionGroup ref="AdminToggleProductGridColumnByClickingItsNameActionGroup" stepKey="hidePriceColumn">
38+
<argument name="optionName" value="Price"/>
39+
</actionGroup>
40+
<actionGroup ref="ToggleAdminProductGridColumnsDropdownActionGroup" stepKey="closeColumnsDropdownMenuAfterTogglePrice"/>
41+
<!-- Price column is not visible in product grid -->
42+
<dontSeeElement selector="{{AdminProductGridSection.columnHeader('Price')}}" stepKey="dontSeeProductPriceColumn"/>
43+
<!-- Check weight column is not visible in product grid -->
44+
<dontSeeElement selector="{{AdminProductGridSection.columnHeader('Weight')}}" stepKey="dontSeeWeightColumn"/>
45+
<!-- Click on columns, in dropdown click on column name weight -->
46+
<actionGroup ref="ToggleAdminProductGridColumnsDropdownActionGroup" stepKey="openColumnsDropdownMenuToToggleWeight"/>
47+
<actionGroup ref="AdminToggleProductGridColumnByClickingItsNameActionGroup" stepKey="showWeightColumn">
48+
<argument name="optionName" value="Weight"/>
49+
</actionGroup>
50+
<actionGroup ref="ToggleAdminProductGridColumnsDropdownActionGroup" stepKey="closeColumnsDropdownMenuAfterToggleWeight"/>
51+
<seeElement selector="{{AdminProductGridSection.columnHeader('Weight')}}" stepKey="seeWeightColumn"/>
52+
</test>
53+
</tests>

app/code/Magento/CatalogGraphQl/Model/Resolver/CategoriesQuery.php

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010
use Magento\CatalogGraphQl\Model\Category\CategoryFilter;
1111
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree;
1212
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\ExtractDataFromCategoryTree;
13+
use Magento\Framework\Api\Search\SearchCriteriaFactory;
1314
use Magento\Framework\Exception\InputException;
1415
use Magento\Framework\GraphQl\Config\Element\Field;
1516
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
1617
use Magento\Framework\GraphQl\Query\Resolver\ArgumentsProcessorInterface;
1718
use Magento\Framework\GraphQl\Query\ResolverInterface;
1819
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
20+
use Magento\GraphQl\Model\Query\ContextInterface;
21+
use Magento\Store\Api\Data\StoreInterface;
1922

2023
/**
2124
* Categories resolver, used for GraphQL category data request processing.
@@ -42,22 +45,30 @@ class CategoriesQuery implements ResolverInterface
4245
*/
4346
private $argsSelection;
4447

48+
/**
49+
* @var SearchCriteriaFactory
50+
*/
51+
private $searchCriteriaFactory;
52+
4553
/**
4654
* @param CategoryTree $categoryTree
4755
* @param ExtractDataFromCategoryTree $extractDataFromCategoryTree
4856
* @param CategoryFilter $categoryFilter
4957
* @param ArgumentsProcessorInterface $argsSelection
58+
* @param SearchCriteriaFactory $searchCriteriaFactory
5059
*/
5160
public function __construct(
5261
CategoryTree $categoryTree,
5362
ExtractDataFromCategoryTree $extractDataFromCategoryTree,
5463
CategoryFilter $categoryFilter,
55-
ArgumentsProcessorInterface $argsSelection
64+
ArgumentsProcessorInterface $argsSelection,
65+
SearchCriteriaFactory $searchCriteriaFactory
5666
) {
5767
$this->categoryTree = $categoryTree;
5868
$this->extractDataFromCategoryTree = $extractDataFromCategoryTree;
5969
$this->categoryFilter = $categoryFilter;
6070
$this->argsSelection = $argsSelection;
71+
$this->searchCriteriaFactory = $searchCriteriaFactory;
6172
}
6273

6374
/**
@@ -87,7 +98,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
8798

8899
$rootCategoryIds = $filterResult['category_ids'] ?? [];
89100

90-
$filterResult['items'] = $this->fetchCategories($rootCategoryIds, $info, (int) $store->getId());
101+
$filterResult['items'] = $this->fetchCategories($rootCategoryIds, $info, $store, $context);
91102
return $filterResult;
92103
}
93104

@@ -96,17 +107,28 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
96107
*
97108
* @param array $categoryIds
98109
* @param ResolveInfo $info
99-
* @param int $storeId
110+
* @param StoreInterface $store
111+
* @param ContextInterface $context
100112
* @return array
101113
*/
102-
private function fetchCategories(array $categoryIds, ResolveInfo $info, int $storeId)
103-
{
114+
private function fetchCategories(
115+
array $categoryIds,
116+
ResolveInfo $info,
117+
StoreInterface $store,
118+
ContextInterface $context
119+
) {
104120
$fetchedCategories = [];
105121
foreach ($categoryIds as $categoryId) {
106-
$categoryTree = $this->categoryTree->getTree($info, $categoryId, $storeId);
107-
if (empty($categoryTree)) {
108-
continue;
109-
}
122+
/* Search Criteria is created for compatibility */
123+
$searchCriteria = $this->searchCriteriaFactory->create();
124+
$categoryTree = $this->categoryTree->getFilteredTree(
125+
$info,
126+
$categoryId,
127+
$searchCriteria,
128+
$store,
129+
[],
130+
$context
131+
);
110132
$fetchedCategories[] = current($this->extractDataFromCategoryTree->execute($categoryTree));
111133
}
112134

0 commit comments

Comments
 (0)