Skip to content

Commit 235ad8c

Browse files
committed
Merge branch 'ACP2E-676' of https://github.com/magento-l3/magento2ce into L3-PR-2022-04-19
2 parents 64839ec + 2a1abd6 commit 235ad8c

File tree

6 files changed

+241
-11
lines changed

6 files changed

+241
-11
lines changed

app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddCrossSellProductBySkuActionGroup.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
<scrollTo selector="{{AdminProductFormRelatedUpSellCrossSellSection.relatedDropdown}}" x="0" y="-100" stepKey="scrollTo"/>
2121
<conditionalClick selector="{{AdminProductFormRelatedUpSellCrossSellSection.relatedDropdown}}" dependentSelector="{{AdminProductFormRelatedUpSellCrossSellSection.relatedDependent}}" visible="false" stepKey="openDropDownIfClosedRelatedUpSellCrossSell"/>
2222
<click selector="{{AdminProductFormRelatedUpSellCrossSellSection.AddCrossSellProductsButton}}" stepKey="clickAddCrossSellButton"/>
23-
<conditionalClick selector="{{AdminProductGridFilterSection.clearFilters}}" dependentSelector="{{AdminProductGridFilterSection.clearFilters}}" visible="true" stepKey="clickClearFilters"/>
24-
<click selector="{{AdminProductGridFilterSection.filters}}" stepKey="openProductFilters"/>
25-
<fillField selector="{{AdminProductGridFilterSection.skuFilter}}" userInput="{{sku}}" stepKey="fillProductSkuFilter"/>
26-
<click selector="{{AdminProductGridFilterSection.applyFilters}}" stepKey="clickApplyFilters"/>
23+
<conditionalClick selector="{{AdminProductCrossSellModalSection.Modal}} {{AdminProductGridFilterSection.clearFilters}}" dependentSelector="{{AdminProductCrossSellModalSection.Modal}} {{AdminProductGridFilterSection.clearFilters}}" visible="true" stepKey="clickClearFilters"/>
24+
<click selector="{{AdminProductCrossSellModalSection.Modal}} {{AdminProductGridFilterSection.filters}}" stepKey="openProductFilters"/>
25+
<fillField selector="{{AdminProductCrossSellModalSection.Modal}} {{AdminProductGridFilterSection.skuFilter}}" userInput="{{sku}}" stepKey="fillProductSkuFilter"/>
26+
<click selector="{{AdminProductCrossSellModalSection.Modal}} {{AdminProductGridFilterSection.applyFilters}}" stepKey="clickApplyFilters"/>
2727
<waitForPageLoad stepKey="waitForPageToLoad"/>
28-
<click selector="{{AdminProductModalSlideGridSection.productGridXRowYColumnButton('1', '1')}}" stepKey="selectProduct"/>
28+
<click selector="{{AdminProductCrossSellModalSection.Modal}}{{AdminProductModalSlideGridSection.productGridXRowYColumnButton('1', '1')}}" stepKey="selectProduct"/>
2929
<click selector="{{AdminProductCrossSellModalSection.addSelectedProducts}}" stepKey="addRelatedProductSelected"/>
3030
<waitForPageLoad stepKey="waitForModalDisappear"/>
3131
</actionGroup>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1010
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
1111
<section name="AdminProductCrossSellModalSection">
12+
<element name="Modal" type="button" selector=".product_form_product_form_related_crosssell_modal"/>
1213
<element name="addSelectedProducts" type="button" selector=".product_form_product_form_related_crosssell_modal .action-primary"/>
1314
</section>
1415
</sections>

app/code/Magento/Catalog/Test/Mftf/Section/AdminProductRelatedUpSellCrossSellSection/AdminProductFormRelatedUpSellCrossSellSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@
2020
<element name="selectedRelatedProduct" type="block" selector="//span[@data-index='name']"/>
2121
<element name="removeRelatedProduct" type="button" selector="//span[text()='Related Products']//..//..//..//span[text()='{{productName}}']//..//..//..//..//..//button[@class='action-delete']" parameterized="true"/>
2222
<element name="selectedProductSku" type="text" selector="//div[@data-index='{{section}}']//span[@data-index='sku']" parameterized="true" timeout="30"/>
23+
<element name="removeCrossSellProduct" type="button" selector="//span[text()='Cross-Sell Products']//..//..//..//span[text()='{{productName}}']//..//..//..//..//..//button[@class='action-delete']" parameterized="true"/>
24+
<element name="removeUpsellProduct" type="button" selector="//span[text()='Up-Sell Products']//..//..//..//span[text()='{{productName}}']//..//..//..//..//..//button[@class='action-delete']" parameterized="true"/>
2325
</section>
2426
</sections>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
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="AdminValidateRelatedUpsellCrossSellPositionValueInProductExportCsvTest">
12+
<annotations>
13+
<features value="Catalog"/>
14+
<stories value="[Magento Cloud] Removing cross sell products the position count is not being reset"/>
15+
<title value="Admin to validate related, upsell and cross sell position value in products export csv"/>
16+
<description value="Admin to validate related, upsell and cross sell position value in products export csv"/>
17+
<severity value="AVERAGE"/>
18+
<testCaseId value="AC-2844"/>
19+
<useCaseId value="ACP2E-676"/>
20+
<group value="SimpleProduct"/>
21+
</annotations>
22+
23+
<before>
24+
<actionGroup ref="AdminLoginActionGroup" stepKey="login"/>
25+
<createData entity="SimpleProduct2" stepKey="simpleProduct1"/>
26+
<createData entity="SimpleProduct2" stepKey="simpleProduct2"/>
27+
<createData entity="SimpleProduct2" stepKey="simpleProduct3"/>
28+
<createData entity="SimpleProduct2" stepKey="simpleProduct4"/>
29+
<createData entity="SimpleProduct2" stepKey="simpleProduct5"/>
30+
<magentoCron stepKey="runCronIndex" groups="index"/>
31+
</before>
32+
33+
<after>
34+
<deleteData createDataKey="simpleProduct1" stepKey="deleteSimpleProduct1"/>
35+
<deleteData createDataKey="simpleProduct2" stepKey="deleteSimpleProduct2"/>
36+
<deleteData createDataKey="simpleProduct3" stepKey="deleteSimpleProduct3"/>
37+
<deleteData createDataKey="simpleProduct4" stepKey="deleteSimpleProduct4"/>
38+
<deleteData createDataKey="simpleProduct5" stepKey="deleteSimpleProduct5"/>
39+
40+
<actionGroup ref="DeleteProductUsingProductGridActionGroup" stepKey="deleteSavedProduct">
41+
<argument name="product" value="SimpleProduct"/>
42+
</actionGroup>
43+
<actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="NavigateToAndResetProductGridToDefaultView"/>
44+
45+
<helper class="\Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="deleteDirectory" stepKey="deleteExportFileDirectory">
46+
<argument name="path">var/export</argument>
47+
</helper>
48+
<actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindexInvalidatedIndices">
49+
<argument name="indices" value=""/>
50+
</actionGroup>
51+
<!--Logout to Admin Area-->
52+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logoutOfAdmin"/>
53+
</after>
54+
55+
<!-- Create product -->
56+
<actionGroup ref="AdminOpenProductIndexPageActionGroup" stepKey="navigateToProductIndex"/>
57+
<actionGroup ref="GoToCreateProductPageActionGroup" stepKey="goToCreateProduct">
58+
<argument name="product" value="SimpleProduct"/>
59+
</actionGroup>
60+
<actionGroup ref="FillMainProductFormNoWeightActionGroup" stepKey="fillProductForm">
61+
<argument name="product" value="SimpleProduct"/>
62+
</actionGroup>
63+
64+
<!--Add related product1-->
65+
<actionGroup ref="AddRelatedProductBySkuActionGroup" stepKey="addRelatedProduct1">
66+
<argument name="sku" value="$$simpleProduct1.sku$$"/>
67+
</actionGroup>
68+
<!--Add related product2-->
69+
<actionGroup ref="AddRelatedProductBySkuActionGroup" stepKey="addRelatedProduct2">
70+
<argument name="sku" value="$$simpleProduct2.sku$$"/>
71+
</actionGroup>
72+
<!--Add related product3-->
73+
<actionGroup ref="AddRelatedProductBySkuActionGroup" stepKey="addRelatedProduct3">
74+
<argument name="sku" value="$$simpleProduct3.sku$$"/>
75+
</actionGroup>
76+
<!--Add related product4-->
77+
<actionGroup ref="AddRelatedProductBySkuActionGroup" stepKey="addRelatedProduct4">
78+
<argument name="sku" value="$$simpleProduct4.sku$$"/>
79+
</actionGroup>
80+
81+
<!--Remove related sell product2-->
82+
<click selector="{{AdminProductFormRelatedUpSellCrossSellSection.removeRelatedProduct($$simpleProduct2.sku$$)}}" stepKey="removeRelatedProduct"/>
83+
84+
<!--Add up sell product1-->
85+
<actionGroup ref="AddUpSellProductBySkuActionGroup" stepKey="addUpSellProduct1">
86+
<argument name="sku" value="$$simpleProduct1.sku$"/>
87+
</actionGroup>
88+
<!--Add up sell product2-->
89+
<actionGroup ref="AddUpSellProductBySkuActionGroup" stepKey="addUpSellProduct2">
90+
<argument name="sku" value="$$simpleProduct2.sku$"/>
91+
</actionGroup>
92+
<!--Add up sell product3-->
93+
<actionGroup ref="AddUpSellProductBySkuActionGroup" stepKey="addUpSellProduct3">
94+
<argument name="sku" value="$$simpleProduct3.sku$"/>
95+
</actionGroup>
96+
<!--Add up sell product4-->
97+
<actionGroup ref="AddUpSellProductBySkuActionGroup" stepKey="addUpSellProduct4">
98+
<argument name="sku" value="$$simpleProduct4.sku$"/>
99+
</actionGroup>
100+
<!--Add up sell product5-->
101+
<actionGroup ref="AddUpSellProductBySkuActionGroup" stepKey="addUpSellProduct5">
102+
<argument name="sku" value="$$simpleProduct5.sku$"/>
103+
</actionGroup>
104+
105+
<!--Remove upsell product2-->
106+
<click selector="{{AdminProductFormRelatedUpSellCrossSellSection.removeUpsellProduct($$simpleProduct2.sku$$)}}" stepKey="removeUpsellProduct"/>
107+
108+
<!--Add cross sell product1-->
109+
<actionGroup ref="AddCrossSellProductBySkuActionGroup" stepKey="addCrossSellProduct1">
110+
<argument name="sku" value="$$simpleProduct1.sku$"/>
111+
</actionGroup>
112+
<!--Add cross sell product2-->
113+
<actionGroup ref="AddCrossSellProductBySkuActionGroup" stepKey="addCrossSellProduct2">
114+
<argument name="sku" value="$$simpleProduct2.sku$"/>
115+
</actionGroup>
116+
<!--Add cross sell product3-->
117+
<actionGroup ref="AddCrossSellProductBySkuActionGroup" stepKey="addCrossSellProduct3">
118+
<argument name="sku" value="$$simpleProduct3.sku$"/>
119+
</actionGroup>
120+
121+
<!--Remove cross sell product2-->
122+
<click selector="{{AdminProductFormRelatedUpSellCrossSellSection.removeCrossSellProduct($$simpleProduct2.sku$$)}}" stepKey="removeCrossSellProduct"/>
123+
124+
<!--Save the product-->
125+
<actionGroup ref="AdminProductFormSaveActionGroup" stepKey="clickSaveButton"/>
126+
<actionGroup ref="AssertMessageInAdminPanelActionGroup" stepKey="messageYouSavedTheProductIsShown">
127+
<argument name="message" value="You saved the product."/>
128+
</actionGroup>
129+
130+
<!-- Export Created Products -->
131+
<actionGroup ref="AdminNavigateToExportPageActionGroup" stepKey="goToExportIndexPage"/>
132+
<actionGroup ref="ExportAllProductsActionGroup" stepKey="exportCreatedProducts"/>
133+
134+
<!-- Start Message Queue for Export Consumer -->
135+
<actionGroup ref="CliConsumerStartActionGroup" stepKey="startMessageQueue">
136+
<argument name="consumerName" value="{{AdminExportMessageConsumerData.consumerName}}"/>
137+
<argument name="maxMessages" value="{{AdminExportMessageConsumerData.messageLimit}}"/>
138+
</actionGroup>
139+
<reloadPage stepKey="refreshPage"/>
140+
<waitForPageLoad stepKey="waitForReload"/>
141+
<waitForElementVisible selector="{{AdminExportAttributeSection.exportFileNameByPosition('0')}}" stepKey="waitForFileName"/>
142+
<grabTextFrom selector="{{AdminExportAttributeSection.exportFileNameByPosition('0')}}" stepKey="getFilename"/>
143+
<actionGroup ref="AdminGetExportFilenameOnServerActionGroup" stepKey="grabNameFile">
144+
<argument name="rowIndex" value="0"/>
145+
</actionGroup>
146+
147+
<!-- Download Export File -->
148+
<actionGroup ref="DownloadFileActionGroup" stepKey="downloadCreatedProducts">
149+
<argument name="fileName" value="{$getFilename}"/>
150+
</actionGroup>
151+
152+
<!-- Validate Downloaded Export File on File System: Simple Product -->
153+
<grabAttributeFrom userInput="href" selector="{{AdminExportAttributeSection.download('0')}}" stepKey="grabExportUrl"/>
154+
<helper class="\Magento\Backend\Test\Mftf\Helper\CurlHelpers" method="assertCurlResponseContainsString" stepKey="assertDownloadFileContainsRelatedProductPosition">
155+
<argument name="url">{$grabExportUrl}</argument>
156+
<argument name="expectedString">1,2,3</argument>
157+
</helper>
158+
<helper class="\Magento\Backend\Test\Mftf\Helper\CurlHelpers" method="assertCurlResponseContainsString" stepKey="assertDownloadFileContainsUpsellProductPosition">
159+
<argument name="url">{$grabExportUrl}</argument>
160+
<argument name="expectedString">1,2,3,4</argument>
161+
</helper>
162+
<helper class="\Magento\Backend\Test\Mftf\Helper\CurlHelpers" method="assertCurlResponseContainsString" stepKey="assertDownloadFileContainsCrossSellProductPosition">
163+
<argument name="url">{$grabExportUrl}</argument>
164+
<argument name="expectedString">1,2</argument>
165+
</helper>
166+
167+
<!-- Delete Export File -->
168+
<actionGroup ref="DeleteExportedFileActionGroup" stepKey="deleteExportedFile">
169+
<argument name="fileName" value="{$getFilename}"/>
170+
</actionGroup>
171+
<helper class="\Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertExportFileDeleted">
172+
<argument name="filePath">var/export/{$grabNameFile}</argument>
173+
</helper>
174+
</test>
175+
</tests>

app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Related.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434
*/
3535
class Related extends AbstractModifier
3636
{
37-
const DATA_SCOPE = '';
38-
const DATA_SCOPE_RELATED = 'related';
39-
const DATA_SCOPE_UPSELL = 'upsell';
40-
const DATA_SCOPE_CROSSSELL = 'crosssell';
41-
const GROUP_RELATED = 'related';
37+
public const DATA_SCOPE = '';
38+
public const DATA_SCOPE_RELATED = 'related';
39+
public const DATA_SCOPE_UPSELL = 'upsell';
40+
public const DATA_SCOPE_CROSSSELL = 'crosssell';
41+
public const GROUP_RELATED = 'related';
4242

4343
/**
4444
* @var string
@@ -576,7 +576,7 @@ protected function getGrid($scope)
576576
'columnsHeaderAfterRender' => true,
577577
'renderDefaultRecord' => false,
578578
'template' => 'ui/dynamic-rows/templates/grid',
579-
'component' => 'Magento_Ui/js/dynamic-rows/dynamic-rows-grid',
579+
'component' => 'Magento_Catalog/js/components/reset-dynamic-rows-grid-row-position-on-delete',
580580
'addButton' => false,
581581
'recordTemplate' => 'record',
582582
'dataScope' => 'data.links',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
define([
7+
'underscore',
8+
'uiRegistry',
9+
'rjsResolver',
10+
'Magento_Ui/js/dynamic-rows/dynamic-rows-grid'
11+
], function (_, registry, resolver, dynamicRowsGrid) {
12+
'use strict';
13+
14+
return dynamicRowsGrid.extend({
15+
16+
/** @inheritdoc */
17+
deleteRecord: function () {
18+
this._super();
19+
this.resetPosition();
20+
},
21+
22+
/**
23+
* Reset the position on delete of the record.
24+
*/
25+
resetPosition() {
26+
let self = this,
27+
position = 0;
28+
29+
_.filter(this.elems(), function (elem, index) {
30+
if (index === 0) {
31+
position = (self.currentPage() - 1) * self.pageSize + 1;
32+
}
33+
_.filter(elem.elems(),function (childElem) {
34+
if (childElem.index === 'position') {
35+
childElem.value(position);
36+
}
37+
});
38+
position++;
39+
});
40+
},
41+
42+
/** @inheritdoc */
43+
nextPage: function () {
44+
this._super();
45+
resolver(function () {
46+
if (this.elems().length) {
47+
this.resetPosition();
48+
}
49+
}, this);
50+
}
51+
});
52+
});

0 commit comments

Comments
 (0)