Skip to content

Commit 9f8456b

Browse files
committed
MC-10971: [Magento Cloud] - Unable to Scope Catalog Price rules by custom product attribute
- Add automated test script;
1 parent bdb10fb commit 9f8456b

File tree

5 files changed

+201
-0
lines changed

5 files changed

+201
-0
lines changed

app/code/Magento/Catalog/Test/Mftf/Data/ProductAttributeData.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,25 @@
115115
<data key="used_for_sort_by">true</data>
116116
<requiredEntity type="FrontendLabel">ProductAttributeFrontendLabel</requiredEntity>
117117
</entity>
118+
<entity name="productYesNoAttribute" type="ProductAttribute">
119+
<data key="attribute_code" unique="suffix">attribute</data>
120+
<data key="frontend_input">boolean</data>
121+
<data key="scope">global</data>
122+
<data key="is_required">false</data>
123+
<data key="is_unique">false</data>
124+
<data key="is_searchable">true</data>
125+
<data key="is_visible">true</data>
126+
<data key="is_visible_in_advanced_search">true</data>
127+
<data key="is_visible_on_front">true</data>
128+
<data key="is_filterable">true</data>
129+
<data key="is_filterable_in_search">true</data>
130+
<data key="used_in_product_listing">true</data>
131+
<data key="is_used_for_promo_rules">true</data>
132+
<data key="is_comparable">true</data>
133+
<data key="is_used_in_grid">true</data>
134+
<data key="is_visible_in_grid">true</data>
135+
<data key="is_filterable_in_grid">true</data>
136+
<data key="used_for_sort_by">true</data>
137+
<requiredEntity type="FrontendLabel">ProductAttributeFrontendLabel</requiredEntity>
138+
</entity>
118139
</entities>

app/code/Magento/CatalogRule/Test/Mftf/ActionGroup/CatalogPriceRuleActionGroup.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,38 @@
3636
<waitForPageLoad stepKey="waitForApplied"/>
3737
</actionGroup>
3838

39+
40+
<actionGroup name="createCatalogPriceRule">
41+
<arguments>
42+
<argument name="catalogRule" defaultValue="_defaultCatalogRule"/>
43+
</arguments>
44+
45+
<click stepKey="addNewRule" selector="{{AdminGridMainControls.add}}"/>
46+
<fillField selector="{{AdminNewCatalogPriceRule.ruleName}}" userInput="{{catalogRule.name}}" stepKey="fillName" />
47+
<fillField selector="{{AdminNewCatalogPriceRule.description}}" userInput="{{catalogRule.description}}" stepKey="fillDescription" />
48+
<click selector="{{AdminCategoryBasicFieldSection.enableCategoryLabel}}" stepKey="selectActive" />
49+
<selectOption selector="{{AdminNewCatalogPriceRule.websites}}" parameterArray="{{catalogRule.website_ids}}" stepKey="selectSite" />
50+
<selectOption selector="{{AdminNewCatalogPriceRule.customerGroups}}" parameterArray="{{catalogRule.customer_group_ids}}" stepKey="selectCustomerGroup" />
51+
<click stepKey="openActionDropdown" selector="{{AdminNewCatalogPriceRule.actionsTab}}"/>
52+
<fillField stepKey="fillDiscountValue" selector="{{AdminNewCatalogPriceRuleActions.discountAmount}}" userInput="{{catalogRule.discount_amount}}"/>
53+
</actionGroup>
54+
55+
<actionGroup name="CreateCatalogPriceRuleConditionWithAttribute">
56+
<arguments>
57+
<argument name="attributeName" type="string"/>
58+
<argument name="targetValue" type="string"/>
59+
<argument name="targetSelectValue" type="string"/>
60+
</arguments>
61+
62+
<click selector="{{AdminNewCatalogPriceRule.conditionsTab}}" stepKey="openConditionsTab"/>
63+
<waitForPageLoad stepKey="waitForConditionTabOpened"/>
64+
<click selector="{{AdminNewCatalogPriceRuleConditions.newCondition}}" stepKey="addNewCondition"/>
65+
<selectOption selector="{{AdminNewCatalogPriceRuleConditions.conditionSelect('1')}}" userInput="{{attributeName}}" stepKey="selectTypeCondition"/>
66+
<waitForElement selector="{{AdminNewCatalogPriceRuleConditions.targetEllipsisValue('1', targetValue)}}" stepKey="waitForIsTarget"/>
67+
<click selector="{{AdminNewCatalogPriceRuleConditions.targetEllipsisValue('1', 'is')}}" stepKey="clickOnIs"/>
68+
<selectOption selector="{{AdminNewCatalogPriceRuleConditions.targetSelect('1')}}" userInput="{{targetSelectValue}}" stepKey="selectTargetCondition"/>
69+
</actionGroup>
70+
3971
<!-- Apply all of the saved catalog price rules -->
4072
<actionGroup name="applyCatalogPriceRules">
4173
<amOnPage stepKey="goToPriceRulePage" url="{{CatalogRulePage.url}}"/>

app/code/Magento/CatalogRule/Test/Mftf/Data/CatalogRuleData.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,21 @@
7777
<data key="simple_action">by_percent</data>
7878
<data key="discount_amount">96</data>
7979
</entity>
80+
81+
<entity name="CatalogRuleWithAllCustomerGroups" type="catalogRule">
82+
<data key="name" unique="suffix">CatalogPriceRule</data>
83+
<data key="description">Catalog Price Rule Description</data>
84+
<data key="is_active">1</data>
85+
<array key="customer_group_ids">
86+
<item>0</item>
87+
<item>1</item>
88+
<item>2</item>
89+
<item>3</item>
90+
</array>
91+
<array key="website_ids">
92+
<item>1</item>
93+
</array>
94+
<data key="simple_action">by_percent</data>
95+
<data key="discount_amount">10</data>
96+
</entity>
8097
</entities>

app/code/Magento/CatalogRule/Test/Mftf/Section/AdminNewCatalogPriceRuleSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
<element name="newCondition" type="button" selector=".rule-param.rule-param-new-child"/>
4242
<element name="conditionSelect" type="select" selector="select#conditions__{{var}}__new_child" parameterized="true"/>
4343
<element name="targetEllipsis" type="button" selector="//li[{{var}}]//a[@class='label'][text() = '...']" parameterized="true"/>
44+
<element name="targetEllipsisValue" type="button" selector="//ul[@id='conditions__{{var}}__children']//a[contains(text(), '{{var1}}')]" parameterized="true" timeout="30"/>
45+
<element name="targetSelect" type="select" selector="//ul[@id='conditions__{{var}}__children']//select" parameterized="true" timeout="30"/>
4446
<element name="targetInput" type="input" selector="input#conditions__{{var1}}--{{var2}}__value" parameterized="true"/>
4547
<element name="applyButton" type="button" selector="#conditions__{{var1}}__children li:nth-of-type({{var2}}) a.rule-param-apply" parameterized="true"/>
4648
</section>
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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="AdminEnableAttributeIsUndefinedCatalogPriceRuleTest">
12+
<annotations>
13+
<features value="CatalogRule"/>
14+
<title value="Enable 'is undefined' condition to Scope Catalog Price rules by custom product attribute"/>
15+
<description value="Enable 'is undefined' condition to Scope Catalog Price rules by custom product attribute"/>
16+
<severity value="CRITICAL"/>
17+
<testCaseId value="MC-13654"/>
18+
<useCaseId value="MC-10971"/>
19+
<group value="CatalogRule"/>
20+
</annotations>
21+
<before>
22+
<actionGroup ref="LoginAsAdmin" stepKey="login"/>
23+
24+
<createData entity="CatalogRuleWithAllCustomerGroups" stepKey="createCatalogPriceRule"/>
25+
<createData entity="ApiCategory" stepKey="createFirstCategory"/>
26+
<createData entity="ApiSimpleProduct" stepKey="createFirstProduct">
27+
<requiredEntity createDataKey="createFirstCategory"/>
28+
</createData>
29+
<createData entity="SimpleProduct" stepKey="createSecondProduct">
30+
<requiredEntity createDataKey="createFirstCategory"/>
31+
</createData>
32+
<createData entity="productYesNoAttribute" stepKey="createProductAttribute"/>
33+
<createData entity="AddToDefaultSet" stepKey="addToAttributeSetHandle">
34+
<requiredEntity createDataKey="createProductAttribute"/>
35+
</createData>
36+
37+
<createData entity="SimpleSubCategory" stepKey="createSecondCategory"/>
38+
<createData entity="SimpleProduct3" stepKey="createThirdProduct">
39+
<requiredEntity createDataKey="createSecondCategory"/>
40+
</createData>
41+
<createData entity="SimpleProduct4" stepKey="createForthProduct">
42+
<requiredEntity createDataKey="createSecondCategory"/>
43+
</createData>
44+
<createData entity="productDropDownAttribute" stepKey="createSecondProductAttribute">
45+
<field key="scope">website</field>
46+
</createData>
47+
</before>
48+
<after>
49+
50+
<!--Delete created data-->
51+
<amOnPage url="{{CatalogRulePage.url}}" stepKey="goToCatalogPriceRulePage"/>
52+
<actionGroup ref="deleteEntitySecondaryGrid" stepKey="deletePriceRule">
53+
<argument name="name" value="{{CatalogRuleWithAllCustomerGroups.name}}"/>
54+
<argument name="searchInput" value="{{AdminSecondaryGridSection.catalogRuleIdentifierSearch}}"/>
55+
</actionGroup>
56+
<click stepKey="resetFilters" selector="{{AdminSecondaryGridSection.resetFilters}}"/>
57+
<deleteData createDataKey="createFirstProduct" stepKey="deleteFirstProduct"/>
58+
<deleteData createDataKey="createSecondProduct" stepKey="deleteSecondProduct"/>
59+
<deleteData createDataKey="createFirstCategory" stepKey="deleteFirstCategory"/>
60+
<deleteData createDataKey="createThirdProduct" stepKey="deleteThirdProduct"/>
61+
<deleteData createDataKey="createForthProduct" stepKey="deleteForthProduct"/>
62+
<deleteData createDataKey="createSecondCategory" stepKey="deleteSecondCategory"/>
63+
<deleteData createDataKey="createSecondProductAttribute" stepKey="deleteSecondProductAttribute"/>
64+
65+
<actionGroup ref="logout" stepKey="logout"/>
66+
</after>
67+
68+
<!--Create catalog price rule-->
69+
<amOnPage url="{{CatalogRulePage.url}}" stepKey="goToPriceRulePage"/>
70+
<waitForPageLoad stepKey="waitForPriceRulePage"/>
71+
<actionGroup ref="createCatalogPriceRule" stepKey="createCatalogPriceRule">
72+
<argument name="catalogRule" value="CatalogRuleWithAllCustomerGroups"/>
73+
</actionGroup>
74+
<actionGroup ref="CreateCatalogPriceRuleConditionWithAttribute" stepKey="createCatalogPriceRuleCondition">
75+
<argument name="attributeName" value="$$createProductAttribute.attribute[frontend_labels][0][label]$$"/>
76+
<argument name="targetValue" value="is"/>
77+
<argument name="targetSelectValue" value="is undefined"/>
78+
</actionGroup>
79+
<click selector="{{AdminNewCatalogPriceRule.save}}" stepKey="saveRule"/>
80+
81+
<!--Check Catalog Price Rule for first product-->
82+
<amOnPage url="{{StorefrontProductPage.url($$createFirstProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToFirstProductPage"/>
83+
<waitForPageLoad stepKey="waitForFirstProductPageLoad"/>
84+
<grabTextFrom selector="{{StorefrontProductInfoMainSection.updatedPrice}}" stepKey="grabFirstProductUpdatedPrice"/>
85+
<assertEquals expected='$110.70' expectedType="string" actual="($grabFirstProductUpdatedPrice)" stepKey="assertFirstProductUpdatedPrice"/>
86+
87+
<!--Check Catalog Price Rule for second product-->
88+
<amOnPage url="{{StorefrontProductPage.url($$createSecondProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToSecondProductPage"/>
89+
<waitForPageLoad stepKey="waitForSecondProductPageLoad"/>
90+
<grabTextFrom selector="{{StorefrontProductInfoMainSection.updatedPrice}}" stepKey="grabSecondProductUpdatedPrice"/>
91+
<assertEquals expected='$110.70' expectedType="string" actual="($grabFirstProductUpdatedPrice)" stepKey="assertSecondProductUpdatedPrice"/>
92+
93+
<!--Delete previous attribute and Catalog Price Rule-->
94+
<deleteData createDataKey="createProductAttribute" stepKey="deleteProductAttribute"/>
95+
<amOnPage url="{{CatalogRulePage.url}}" stepKey="goToCatalogPriceRulePage"/>
96+
<actionGroup ref="deleteEntitySecondaryGrid" stepKey="deletePriceRule">
97+
<argument name="name" value="{{CatalogRuleWithAllCustomerGroups.name}}"/>
98+
<argument name="searchInput" value="{{AdminSecondaryGridSection.catalogRuleIdentifierSearch}}"/>
99+
</actionGroup>
100+
101+
<!--Add new attribute to Default set-->
102+
<createData entity="AddToDefaultSet" stepKey="addToAttributeSetHandle1">
103+
<requiredEntity createDataKey="createSecondProductAttribute"/>
104+
</createData>
105+
106+
<!--Create new Catalog Price Rule-->
107+
<actionGroup ref="createCatalogPriceRule" stepKey="createCatalogPriceRule1">
108+
<argument name="catalogRule" value="CatalogRuleWithAllCustomerGroups"/>
109+
</actionGroup>
110+
<actionGroup ref="CreateCatalogPriceRuleConditionWithAttribute" stepKey="createCatalogPriceRuleCondition1">
111+
<argument name="attributeName" value="$$createSecondProductAttribute.attribute[frontend_labels][0][label]$$"/>
112+
<argument name="targetValue" value="is"/>
113+
<argument name="targetSelectValue" value="is undefined"/>
114+
</actionGroup>
115+
<click selector="{{AdminNewCatalogPriceRule.save}}" stepKey="saveRule1"/>
116+
117+
<!--Check Catalog Price Rule for third product-->
118+
<amOnPage url="{{StorefrontProductPage.url($$createThirdProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToThirdProductPage"/>
119+
<waitForPageLoad stepKey="waitForThirdProductPageLoad"/>
120+
<grabTextFrom selector="{{StorefrontProductInfoMainSection.updatedPrice}}" stepKey="grabThirdProductUpdatedPrice"/>
121+
<assertEquals expected='$110.70' expectedType="string" actual="($grabThirdProductUpdatedPrice)" stepKey="assertThirdProductUpdatedPrice"/>
122+
123+
<!--Check Catalog Price Rule for forth product-->
124+
<amOnPage url="{{StorefrontProductPage.url($$createForthProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToForthProductPage"/>
125+
<waitForPageLoad stepKey="waitForForthProductPageLoad"/>
126+
<grabTextFrom selector="{{StorefrontProductInfoMainSection.updatedPrice}}" stepKey="grabForthProductUpdatedPrice"/>
127+
<assertEquals expected='$110.70' expectedType="string" actual="($grabForthProductUpdatedPrice)" stepKey="assertForthProductUpdatedPrice"/>
128+
</test>
129+
</tests>

0 commit comments

Comments
 (0)