Skip to content

Commit 588eac3

Browse files
Merge pull request #10117 from magento-gl/ACQE-functional-deployment-v3-8
Bengals Functional Mainline deployment PR
2 parents 6cda09a + 02a9d85 commit 588eac3

25 files changed

+913
-43
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups
10+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
11+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
12+
<actionGroup name="AdminAssertCustomOptionBasedOnPositionActionGroup">
13+
<annotations>
14+
<description>Assert custom options order based on position</description>
15+
</annotations>
16+
<arguments>
17+
<argument name="positionNumber" type="string"/>
18+
<argument name="title" type="string"/>
19+
</arguments>
20+
<waitForPageLoad stepKey="waitForCustomOptionsToLoad"/>
21+
<scrollTo selector="{{AdminProductCustomizableOptionsSection.customOptionOrder(positionNumber)}}" x="0" y="-80" stepKey="scrollToOptionTitle"/>
22+
<waitForText selector="{{AdminProductCustomizableOptionsSection.customOptionOrder(positionNumber)}}" userInput="{{title}}" stepKey="seeOptionTitleBasedOnOrder"/>
23+
</actionGroup>
24+
</actionGroups>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups
10+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
11+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
12+
<actionGroup name="AdminEditFieldTitleCustomOptionsActionGroup">
13+
<annotations>
14+
<description>Edit field custom options title</description>
15+
</annotations>
16+
<arguments>
17+
<argument name="optionNumber" type="string"/>
18+
<argument name="optionInputFieldNumber" type="string"/>
19+
<argument name="title" type="string"/>
20+
</arguments>
21+
<waitForPageLoad stepKey="waitForCustomOptionsLoad"/>
22+
<scrollTo selector="{{AdminProductCustomizableOptionsSection.useDefaultValue(optionNumber)}}" x="0" y="-80" stepKey="scrollToUseDefaultOptionValue"/>
23+
<waitForElementClickable selector="{{AdminProductCustomizableOptionsSection.useDefaultValue(optionNumber)}}" stepKey="waitForUseDefaultOption"/>
24+
<uncheckOption selector="{{AdminProductCustomizableOptionsSection.useDefaultValue(optionNumber)}}" stepKey="uncheckDefaultOptionTitle"/>
25+
<fillField selector="{{AdminProductCustomizableOptionsSection.optionTitleInput(optionInputFieldNumber)}}" userInput="{{title}}" stepKey="fillOptionTitle"/>
26+
</actionGroup>
27+
</actionGroups>

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,13 @@
7070
<!-- Elements to test drag&drop -->
7171
<element name="dragCustomOptionRecord" type="block" selector="(//tr[{{dragIndex}}]//div[contains(@class, 'draggable-handle')])['1']" timeout="30" parameterized="true"/>
7272
<element name="customOptionRecordTitle" type="button" selector="//table[@data-index='options']//tr[{{index}}]//div[contains(@class, 'admin__collapsible-title')]//span" timeout="30" parameterized="true"/>
73+
74+
<element name="useDefaultValue" type="checkbox" selector="(//input[@data-form-part='product_form'])[{{index}}]" parameterized="true"/>
75+
<element name="customOptionOrder" type="text" selector="(//div[@class='admin__collapsible-title']/span)[{{index}}]" parameterized="true"/>
76+
<element name="paginationNextButton" type="button" selector="//div[@data-bind='visible: !!element.getRecordCount()']//button[@class='action-next']"/>
77+
<element name="customOptionPageDropdown" type="select" selector="//div[@class='admin__control-table-pagination']/div[@class='selectmenu']"/>
78+
<element name="customPageOption" type="text" selector="//div[@class='selectmenu _active']//li[@data-bind='css: {_edit: isCustomVisible()}']"/>
79+
<element name="customPageNumber" type="input" selector="//div[@class='selectmenu _active']//input[@class='admin__control-text']"/>
80+
<element name="customSave" type="button" selector="//div[@class='selectmenu _active']//div[@class='selectmenu-item-edit']/button"/>
7381
</section>
7482
</sections>
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="AdminImportCustomOptionsBetweenProductsTest">
12+
<annotations>
13+
<features value="Catalog"/>
14+
<stories value="Import customizable options between products "/>
15+
<title value="Import customizable options from Product A to Product B and verify order "/>
16+
<description value="This test case verifies whether customizable options in simple product displaying in order while importing from other product."/>
17+
<severity value="MAJOR"/>
18+
<testCaseId value="AC-6349"/>
19+
<group value="catalog"/>
20+
</annotations>
21+
<before>
22+
<!-- Pre-condition 2: Create two products -->
23+
<createData entity="_defaultProduct" stepKey="productA"/>
24+
<createData entity="_defaultProduct" stepKey="productB"/>
25+
<!-- Step 1: Login as admin -->
26+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
27+
<!-- Pre-condition 1: Create store view -->
28+
<actionGroup ref="AdminCreateStoreViewActionGroup" stepKey="createFrenchStoreView">
29+
<argument name="customStore" value="customStoreFR"/>
30+
</actionGroup>
31+
</before>
32+
<after>
33+
<!-- Delete products, store view -->
34+
<deleteData createDataKey="productA" stepKey="deleteProductA"/>
35+
<deleteData createDataKey="productB" stepKey="deleteProductB"/>
36+
<actionGroup ref="AdminDeleteStoreViewActionGroup" stepKey="deleteFrenchStoreView">
37+
<argument name="customStore" value="customStoreFR"/>
38+
</actionGroup>
39+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
40+
</after>
41+
<!-- Step 2: Edit product A -->
42+
<actionGroup ref="AdminProductPageOpenByIdActionGroup" stepKey="goToProductEdit">
43+
<argument name="productId" value="$$productA.id$$"/>
44+
</actionGroup>
45+
<!-- Step 3: Expand Customizable options -->
46+
<scrollTo selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="scrollToCustomizableOptionsA"/>
47+
<waitForElementClickable selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="waitForCustomizableOptionsA"/>
48+
<click selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="openCustomizableOptionsA"/>
49+
<!-- Step 4,5: Click on Add options button and Add options -->
50+
<actionGroup ref="AdminAddProductCustomOptionActionGroup" stepKey="addProductCustomFieldOption1">
51+
<argument name="customOptionTitle" value="Option1"/>
52+
<argument name="customOptionType" value="Field"/>
53+
</actionGroup>
54+
<actionGroup ref="AdminAddProductCustomOptionActionGroup" stepKey="addProductCustomFieldOption2">
55+
<argument name="customOptionTitle" value="Option2"/>
56+
<argument name="customOptionType" value="Field"/>
57+
</actionGroup>
58+
<actionGroup ref="AdminAddProductCustomOptionActionGroup" stepKey="addProductCustomFieldOption3">
59+
<argument name="customOptionTitle" value="Option3"/>
60+
<argument name="customOptionType" value="Field"/>
61+
</actionGroup>
62+
<actionGroup ref="AdminAddProductCustomOptionActionGroup" stepKey="addProductCustomFieldOption4">
63+
<argument name="customOptionTitle" value="Option4"/>
64+
<argument name="customOptionType" value="Field"/>
65+
</actionGroup>
66+
<scrollToTopOfPage stepKey="scrollToTopOfThePage"/>
67+
<actionGroup ref="AdminProductFormSaveActionGroup" stepKey="saveProductA"/>
68+
<!-- Step 6: Change the store view, and in customization option change the title -->
69+
<waitForElementClickable selector="{{AdminProductFormActionSection.changeStoreButton}}" stepKey="waitForStoreSwitch"/>
70+
<click selector="{{AdminProductFormActionSection.changeStoreButton}}" stepKey="clickStoreSwitcher"/>
71+
<waitForElementClickable selector="{{AdminProductFormActionSection.selectStoreView(customStoreFR.name)}}" stepKey="waitForFrenchStore"/>
72+
<click selector="{{AdminProductFormActionSection.selectStoreView(customStoreFR.name)}}" stepKey="selectFrenchStoreView"/>
73+
<waitForElementClickable selector="{{AdminConfirmationModalSection.ok}}" stepKey="waitForAcceptStoreSwitch"/>
74+
<click selector="{{AdminConfirmationModalSection.ok}}" stepKey="acceptStoreSwitch"/>
75+
<waitForPageLoad stepKey="waitForFrenchStoreView"/>
76+
<scrollTo selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="scrollToCustomOptions"/>
77+
<waitForElementClickable selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="waitForCustomizableOptions"/>
78+
<click selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="openCustomizableOptions"/>
79+
<actionGroup ref="AdminEditFieldTitleCustomOptionsActionGroup" stepKey="editOption1">
80+
<argument name="optionNumber" value="1"/>
81+
<argument name="optionInputFieldNumber" value="0"/>
82+
<argument name="title" value="Option1FR"/>
83+
</actionGroup>
84+
<actionGroup ref="AdminEditFieldTitleCustomOptionsActionGroup" stepKey="editOption2">
85+
<argument name="optionNumber" value="2"/>
86+
<argument name="optionInputFieldNumber" value="1"/>
87+
<argument name="title" value="Option2FR"/>
88+
</actionGroup>
89+
<actionGroup ref="AdminEditFieldTitleCustomOptionsActionGroup" stepKey="editOption3">
90+
<argument name="optionNumber" value="3"/>
91+
<argument name="optionInputFieldNumber" value="2"/>
92+
<argument name="title" value="Option3FR"/>
93+
</actionGroup>
94+
<actionGroup ref="AdminEditFieldTitleCustomOptionsActionGroup" stepKey="editOption4">
95+
<argument name="optionNumber" value="4"/>
96+
<argument name="optionInputFieldNumber" value="3"/>
97+
<argument name="title" value="Option4FR"/>
98+
</actionGroup>
99+
<actionGroup ref="AdminProductFormSaveActionGroup" stepKey="saveProductAFR"/>
100+
<!--Step 7,8,9: Edit product B and import options from product A -->
101+
<actionGroup ref="AdminProductPageOpenByIdActionGroup" stepKey="goToProductEditPage">
102+
<argument name="productId" value="$$productB.id$$"/>
103+
</actionGroup>
104+
<waitForElementClickable selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="waitForCustomizableOptionsForProductB"/>
105+
<click selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="openCustomizableOptionsForProductB"/>
106+
<actionGroup ref="ImportProductCustomizableOptionsActionGroup" stepKey="importOptions">
107+
<argument name="productName" value="$$productA.name$$"/>
108+
</actionGroup>
109+
<!--Step 10: Save product B-->
110+
<actionGroup ref="AdminProductFormSaveActionGroup" stepKey="saveProductB"/>
111+
<!-- Navigate to custom options and set pagination display-->
112+
<scrollTo selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="scrollToTheCustomOptions"/>
113+
<waitForElementClickable selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="waitForTheCustomizableOptions"/>
114+
<click selector="{{AdminProductCustomizableOptionsSection.customizableOptions}}" stepKey="openTheCustomizableOptions"/>
115+
<actionGroup ref="AdminOpenAndApplyCustomOptionRecordsPerPageActionGroup" stepKey="setCustomPageSize">
116+
<argument name="perPageInputValue" value="2"/>
117+
</actionGroup>
118+
<!-- Step 11: Verify options in product B are in correct order and have correct titles -->
119+
<actionGroup ref="AdminAssertCustomOptionBasedOnPositionActionGroup" stepKey="seeOption1Title">
120+
<argument name="positionNumber" value="1"/>
121+
<argument name="title" value="Option1"/>
122+
</actionGroup>
123+
<actionGroup ref="AdminAssertCustomOptionBasedOnPositionActionGroup" stepKey="seeOption2Title">
124+
<argument name="positionNumber" value="2"/>
125+
<argument name="title" value="Option2"/>
126+
</actionGroup>
127+
<!-- Click on custom options pagination next button-->
128+
<scrollTo selector="{{AdminProductCustomizableOptionsSection.paginationNextButton}}" x="0" y="-80" stepKey="scrollToPagination"/>
129+
<waitForElementClickable selector="{{AdminProductCustomizableOptionsSection.paginationNextButton}}" stepKey="waitForPaginationToBecomeActive"/>
130+
<click selector="{{AdminProductCustomizableOptionsSection.paginationNextButton}}" stepKey="clickNextButton"/>
131+
<waitForPageLoad stepKey="waitForPaginationToLoad"/>
132+
<actionGroup ref="AdminAssertCustomOptionBasedOnPositionActionGroup" stepKey="seeOption3Title">
133+
<argument name="positionNumber" value="1"/>
134+
<argument name="title" value="Option3"/>
135+
</actionGroup>
136+
<actionGroup ref="AdminAssertCustomOptionBasedOnPositionActionGroup" stepKey="seeOption4Title">
137+
<argument name="positionNumber" value="2"/>
138+
<argument name="title" value="Option4"/>
139+
</actionGroup>
140+
</test>
141+
</tests>

app/code/Magento/CatalogSearch/Test/Mftf/Test/StorefrontPartialWordQuickSearchNotSearchableTest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
<useCaseId value="MC-40715"/>
2020
<group value="SearchEngine"/>
2121
<group value="pr_exclude"/>
22+
<skip>
23+
<issueId value="AC-13691">
24+
Skip due to application bug causing performance degradation; not planned to fix. Refer to Jira ticket comments.
25+
</issueId>
26+
</skip>
2227
</annotations>
2328
<before>
2429
<!--Create category-->

app/code/Magento/Checkout/Test/Mftf/Section/StorefrontCheckoutPaymentMethodSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@
1919
<element name="purchaseOrderNumber" type="input" selector="#po_number"/>
2020
<element name="checkPaypalExpress" type="radio" selector="//div/input[@id='paypal_express']"/>
2121
<element name="checkPaypalExpressActive" type="radio" selector="//div[@class='payment-method _active']/div/input[@id='paypal_express']"/>
22+
<element name="paymentMethod" type="radio" selector="//dl[@class='checkout-payment-method']//label[contains(., '{{methodName}}')]/../..//input" parameterized="true"/>
2223
</section>
2324
</sections>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 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="AdminSelectSingleImageAndPriceForConfigurationAttributeActionGroup" extends="AdminSelectAllValueOfTwoAttributesPageActionGroup">
11+
<annotations>
12+
<description>Select values of each attribute to include in the product and assigns a image to the product.</description>
13+
</annotations>
14+
<arguments>
15+
<argument name="price" type="string" defaultValue="100"/>
16+
<argument name="image" type="string" defaultValue="MagentoLogo"/>
17+
</arguments>
18+
<waitForPageLoad stepKey="waitForImagesPage" after="clickNextToApplyQuantity"/>
19+
<click selector="{{AdminCreateProductConfigurationsPanel.applySingleSetOfImages}}"
20+
stepKey="clickApplySingleSetOfImages" after="waitForImagesPage"/>
21+
<waitForElementVisible selector="{{AdminCreateProductConfigurationsPanel.imageUploadButton}}"
22+
stepKey="waitForImageUploadSection" after="clickApplySingleSetOfImages"/>
23+
<attachFile selector="{{AdminCreateProductConfigurationsPanel.imageFileUpload}}" userInput="{{image}}"
24+
stepKey="uploadImageForAllConfigurations" after="waitForImageUploadSection"/>
25+
<waitForElementNotVisible selector="{{AdminCreateProductConfigurationsPanel.uploadProgressBar}}"
26+
stepKey="waitForImageUpload" after="uploadImageForAllConfigurations"/>
27+
<waitForElementClickable selector="{{AdminCreateProductConfigurationsPanel.applySinglePriceToAllSkus}}"
28+
stepKey="waitForPriceRadio" after="waitForImageUpload"/>
29+
<click selector="{{AdminCreateProductConfigurationsPanel.applySinglePriceToAllSkus}}"
30+
stepKey="selectSinglePrice" after="waitForPriceRadio"/>
31+
<fillField selector="{{AdminCreateProductConfigurationsPanel.singlePrice}}" userInput="{{price}}"
32+
stepKey="enterPrice" after="selectSinglePrice"/>
33+
</actionGroup>
34+
</actionGroups>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="AdminSelectTwoOptionsPerAttributeActionGroup"
12+
extends="GenerateConfigurationsByAttributeCodeActionGroup">
13+
<annotations>
14+
<description>EXTENDS: GenerateConfigurationsByAttributeCodeActionGroup. Selects only 2 specific options from
15+
each attribute instead of all options. Removes confirm popup.
16+
</description>
17+
</annotations>
18+
<arguments>
19+
<argument name="secondAttributeCode" type="string"/>
20+
<argument name="firstAttributeOption1" type="string"/>
21+
<argument name="firstAttributeOption2" type="string"/>
22+
<argument name="secondAttributeOption1" type="string"/>
23+
<argument name="secondAttributeOption2" type="string"/>
24+
</arguments>
25+
<remove keyForRemoval="clickFilters"/>
26+
<remove keyForRemoval="fillFilterAttributeCodeField"/>
27+
<remove keyForRemoval="clickApplyFiltersButton"/>
28+
<remove keyForRemoval="clickOnFirstCheckbox"/>
29+
<remove keyForRemoval="clickOnSelectAll"/>
30+
<remove keyForRemoval="clickOnSelectAllForFirstAttribute"/>
31+
<remove keyForRemoval="clickOnSelectAllForSecondAttribute"/>
32+
<remove keyForRemoval="clickOnConfirmInPopup"/>
33+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeCheckbox(attributeCode)}}"
34+
stepKey="clickOnFirstAttributeCheckbox" after="clickCreateConfigurations"/>
35+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeCheckbox(secondAttributeCode)}}"
36+
stepKey="clickOnSecondAttributeCheckbox" after="clickOnFirstAttributeCheckbox"/>
37+
<grabTextFrom selector="{{AdminCreateProductConfigurationsPanel.defaultLabel(attributeCode)}}"
38+
stepKey="grabFirstAttributeDefaultLabel" after="clickOnSecondAttributeCheckbox"/>
39+
<grabTextFrom selector="{{AdminCreateProductConfigurationsPanel.defaultLabel(secondAttributeCode)}}"
40+
stepKey="grabSecondAttributeDefaultLabel" after="grabFirstAttributeDefaultLabel"/>
41+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeCheckboxByName(firstAttributeOption1)}}"
42+
stepKey="selectFirstAttributeOption1" after="clickOnNextButton1"/>
43+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeCheckboxByName(firstAttributeOption2)}}"
44+
stepKey="selectFirstAttributeOption2" after="selectFirstAttributeOption1"/>
45+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeCheckboxByName(secondAttributeOption1)}}"
46+
stepKey="selectSecondAttributeOption1" after="selectFirstAttributeOption2"/>
47+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeCheckboxByName(secondAttributeOption2)}}"
48+
stepKey="selectSecondAttributeOption2" after="selectSecondAttributeOption1"/>
49+
<click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickOnSaveButton2"
50+
after="clickOnNextButton4"/>
51+
</actionGroup>
52+
</actionGroups>

0 commit comments

Comments
 (0)