Skip to content

Commit 286c481

Browse files
authored
Merge pull request #317 from magento-obsessive-owls/PB-207
[Owls] Empty "Category" or "SKU" condition option causes error on save
2 parents 46c3cf8 + c369817 commit 286c481

File tree

8 files changed

+151
-22
lines changed

8 files changed

+151
-22
lines changed

app/code/Magento/PageBuilder/Test/Mftf/ActionGroup/ContentTypeProductsActionGroup.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@
124124
<actualResult type="variable">grabProducts</actualResult>
125125
</assertCount>
126126
</actionGroup>
127+
<actionGroup name="validateEmptyProductsContainer">
128+
<arguments>
129+
<argument name="page" defaultValue="ProductsOnStage"/>
130+
<argument name="productGroupIndex" defaultValue="1" type="string"/>
131+
</arguments>
132+
<waitForElement selector="{{page.emptyProductsPlaceholder(productGroupIndex)}}" stepKey="waitForEmptyProducts"/>
133+
<see userInput="{{PageBuilderProductsMessage.noProductsFound}}" selector="{{page.emptyProductsPlaceholder(productGroupIndex)}}" stepKey="seeEmptyProductsMessage"/>
134+
</actionGroup>
127135
<actionGroup name="selectCategoryFromCategoryDropDown">
128136
<arguments>
129137
<argument name="property" defaultValue="PageBuilderProductsSelectCategoryDropDown"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderProductsCarouselTests.xml

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -700,9 +700,6 @@
700700
<group value="pagebuilder"/>
701701
<group value="pagebuilder-products"/>
702702
<group value="pagebuilder-productsCarousel"/>
703-
<skip>
704-
<issueId value="PB-207"/>
705-
</skip>
706703
</annotations>
707704
<actionGroup ref="openPageBuilderEditPanelByIndex" stepKey="openEditPanel" after="dragProductsIntoStage">
708705
<argument name="contentType" value="PageBuilderProductsContentType"/>
@@ -3448,4 +3445,34 @@
34483445
<argument name="product" value="$$createProduct1$$"/>
34493446
</actionGroup>
34503447
</test>
3448+
<test name="AdminPageBuilderProductsCarouselValidateCanSaveProductsWithEmptyConditions" extends="AdminPageBuilderProductsGridValidateCanSaveProductsWithEmptyConditions">
3449+
<annotations>
3450+
<features value="PageBuilder"/>
3451+
<stories value="Products"/>
3452+
<title value="Carousel - Validate Can Save Products with Empty Condition"/>
3453+
<description value="Validate that a user can save a Products content type without any conditions set"/>
3454+
<severity value="CRITICAL"/>
3455+
<useCaseId value="PB-207"/>
3456+
<testCaseId value="MC-22881"/>
3457+
<group value="pagebuilder"/>
3458+
<group value="pagebuilder-products"/>
3459+
<group value="pagebuilder-productsCarousel"/>
3460+
</annotations>
3461+
<actionGroup ref="chooseVisualSelectOption" stepKey="selectAppearance">
3462+
<argument name="property" value="PageBuilderProductsProductCarouselAppearance"/>
3463+
</actionGroup>
3464+
<actionGroup ref="validateEmptyProductsContainer" stepKey="validateEmptyProductsContainerOnStage">
3465+
<argument name="page" value="ProductsCarouselOnStage"/>
3466+
</actionGroup>
3467+
<actionGroup ref="validateEmptyProductsContainer" stepKey="validateEmptyProductsContainerOnStage2">
3468+
<argument name="page" value="ProductsCarouselOnStage"/>
3469+
</actionGroup>
3470+
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterProductsCount3">
3471+
<argument name="property" value="PageBuilderProductsCarouselCountPropertyMax"/>
3472+
</actionGroup>
3473+
<actionGroup ref="validateProductInProducts" stepKey="validateProductOnStage3">
3474+
<argument name="page" value="ProductsCarouselOnStage"/>
3475+
<argument name="product" value="_defaultProduct"/>
3476+
</actionGroup>
3477+
</test>
34513478
</tests>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderProductsGridTests.xml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,4 +1543,80 @@
15431543
<argument name="product" value="$$createProduct.name$$"/>
15441544
</actionGroup>
15451545
</test>
1546+
<test name="AdminPageBuilderProductsGridValidateCanSaveProductsWithEmptyConditions">
1547+
<annotations>
1548+
<features value="PageBuilder"/>
1549+
<stories value="Products"/>
1550+
<title value="Grid - Validate Can Save Products with Empty Condition"/>
1551+
<description value="Validate that a user can save a Products content type without any conditions set"/>
1552+
<severity value="CRITICAL"/>
1553+
<useCaseId value="PB-207"/>
1554+
<testCaseId value="MC-22880"/>
1555+
<group value="pagebuilder"/>
1556+
<group value="pagebuilder-products"/>
1557+
<group value="pagebuilder-productsGrid"/>
1558+
</annotations>
1559+
<before>
1560+
<createData entity="PageBuilderProductsSubCategory" stepKey="createCategory"/>
1561+
<createData entity="_defaultProduct" stepKey="createProduct">
1562+
<requiredEntity createDataKey="createCategory"/>
1563+
</createData>
1564+
<createData entity="_emptyCmsPage" stepKey="createCMSPage"/>
1565+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
1566+
<actionGroup ref="navigateToCMSPage" stepKey="navigateToCMSPage">
1567+
<argument name="CMSPage" value="$$createCMSPage$$"/>
1568+
</actionGroup>
1569+
<actionGroup ref="switchToPageBuilderStage" stepKey="switchToPageBuilderStage"/>
1570+
</before>
1571+
<after>
1572+
<deleteData createDataKey="createProduct" stepKey="deleteProduct"/>
1573+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
1574+
<deleteData createDataKey="createCMSPage" stepKey="deleteCMSPage"/>
1575+
<actionGroup ref="logout" stepKey="logout"/>
1576+
</after>
1577+
<actionGroup ref="expandPageBuilderPanelMenuSection" stepKey="expandMenuSectionAddContent">
1578+
<argument name="contentType" value="PageBuilderProductsContentType"/>
1579+
</actionGroup>
1580+
<actionGroup ref="dragContentTypeToStage" stepKey="dragProductsIntoStage">
1581+
<argument name="contentType" value="PageBuilderProductsContentType"/>
1582+
</actionGroup>
1583+
<!-- Validate: Empty Category Condition -->
1584+
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditPanel">
1585+
<argument name="contentType" value="PageBuilderProductsContentType"/>
1586+
</actionGroup>
1587+
<actionGroup ref="chooseVisualSelectOption" stepKey="selectAppearance">
1588+
<argument name="property" value="PageBuilderProductsProductGridAppearance"/>
1589+
</actionGroup>
1590+
<actionGroup ref="chooseVisualSelectOption" stepKey="chooseSelectProductsBy">
1591+
<argument name="property" value="PageBuilderProductsSelectProductsByCategory"/>
1592+
</actionGroup>
1593+
<actionGroup ref="saveEditPanelSettings" stepKey="saveEditPanelSettings"/>
1594+
<actionGroup ref="validateEmptyProductsContainer" stepKey="validateEmptyProductsContainerOnStage"/>
1595+
<!-- Validate: Empty SKU Condition -->
1596+
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditPanel2">
1597+
<argument name="contentType" value="PageBuilderProductsContentType"/>
1598+
</actionGroup>
1599+
<actionGroup ref="chooseVisualSelectOption" stepKey="chooseSelectProductsBy2">
1600+
<argument name="property" value="PageBuilderProductsSelectProductsBySKU"/>
1601+
</actionGroup>
1602+
<actionGroup ref="saveEditPanelSettings" stepKey="saveEditPanelSettings2"/>
1603+
<actionGroup ref="validateEmptyProductsContainer" stepKey="validateEmptyProductsContainerOnStage2"/>
1604+
<!-- Validate: Empty Conditions -->
1605+
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditPanel3">
1606+
<argument name="contentType" value="PageBuilderProductsContentType"/>
1607+
</actionGroup>
1608+
<actionGroup ref="chooseVisualSelectOption" stepKey="chooseSelectProductsBy3">
1609+
<argument name="property" value="PageBuilderProductsSelectProductsByCondition"/>
1610+
</actionGroup>
1611+
<actionGroup ref="selectSlideOutPanelFieldGeneral" stepKey="enterSortBy3">
1612+
<argument name="property" value="PageBuilderProductsSortByNewestTop"/>
1613+
</actionGroup>
1614+
<actionGroup ref="fillSlideOutPanelFieldGeneral" stepKey="enterProductsCount3">
1615+
<argument name="property" value="PageBuilderProductsCountPropertyMax"/>
1616+
</actionGroup>
1617+
<actionGroup ref="saveEditPanelSettings" stepKey="saveEditPanelSettings3"/>
1618+
<actionGroup ref="validateProductInProducts" stepKey="validateProductOnStage3">
1619+
<argument name="product" value="_defaultProduct"/>
1620+
</actionGroup>
1621+
</test>
15461622
</tests>

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/products/mass-converter/carousel-widget-directive.js

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/products/mass-converter/widget-directive.js

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/form/provider/conditions-data-processor.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ define([
1313
var serializer = new ConditionsDataNormalizer();
1414

1515
return function (data, attribute) {
16-
var pairs = {};
16+
var pairs = {},
17+
conditions = '';
1718

1819
/*
1920
* The Condition Rule Tree is not a UI component and doesn't provide good data.
@@ -33,24 +34,25 @@ define([
3334
/*
3435
* Add pairs in case conditions source is not rules configurator
3536
*/
36-
if (data.condition_option !== 'condition') {
37-
var conditionOperator = data[data.condition_option + '-condition_operator']
38-
? data[data.condition_option + '-condition_operator']
39-
: "==";
40-
pairs['parameters[' + attribute + '][1--1][operator]'] = conditionOperator;
41-
pairs['parameters[' + attribute + '][1--1][type]'] = "Magento\\CatalogWidget\\Model\\Rule\\Condition\\Product";
42-
pairs['parameters[' + attribute + '][1][aggregator]'] = "all";
43-
pairs['parameters[' + attribute + '][1][new_child]'] = "";
44-
pairs['parameters[' + attribute + '][1][type]'] = "Magento\\CatalogWidget\\Model\\Rule\\Condition\\Combine";
45-
pairs['parameters[' + attribute + '][1][value]'] = "1";
46-
pairs['parameters[' + attribute + '][1--1][attribute]'] = data.condition_option;
47-
pairs['parameters[' + attribute + '][1--1][value]'] = data[data.condition_option].trim();
37+
if (data['condition_option'] !== 'condition') {
38+
pairs['parameters[' + attribute + '][1--1][operator]'] = data[data['condition_option'] + '-condition_operator'] ?
39+
data[data['condition_option'] + '-condition_operator'] :
40+
'==';
41+
pairs['parameters[' + attribute + '][1--1][type]'] = 'Magento\\CatalogWidget\\Model\\Rule\\Condition\\Product';
42+
pairs['parameters[' + attribute + '][1][aggregator]'] = 'all';
43+
pairs['parameters[' + attribute + '][1][new_child]'] = '';
44+
pairs['parameters[' + attribute + '][1][type]'] = 'Magento\\CatalogWidget\\Model\\Rule\\Condition\\Combine';
45+
pairs['parameters[' + attribute + '][1][value]'] = '1';
46+
pairs['parameters[' + attribute + '][1--1][attribute]'] = data['condition_option'];
47+
pairs['parameters[' + attribute + '][1--1][value]'] = _.isString(data[data['condition_option']]) ?
48+
data[data['condition_option']].trim() :
49+
'';
4850
}
4951

5052
if (!_.isEmpty(pairs)) {
51-
var conditions = JSON.stringify(serializer.normalize(pairs).parameters[attribute]);
53+
conditions = JSON.stringify(serializer.normalize(pairs).parameters[attribute]);
5254
data['conditions_encoded'] = conditions;
53-
objectUtils.nested(data,attribute, conditions);
55+
objectUtils.nested(data, attribute, conditions);
5456
}
5557
};
5658
});

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/products/mass-converter/carousel-widget-directive.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,15 @@ export default class WidgetDirective extends BaseWidgetDirective {
5353
products_count: data.carousel_products_count,
5454
sort_order: data.sort_order,
5555
condition_option: data.condition_option,
56-
condition_option_value: this.encodeWysiwygCharacters(data[data.condition_option] || ""),
56+
condition_option_value: "",
5757
type_name: "Catalog Products Carousel",
5858
conditions_encoded: this.encodeWysiwygCharacters(data.conditions_encoded || ""),
5959
};
6060

61+
if (typeof data[data.condition_option] === "string") {
62+
attributes.condition_option_value = this.encodeWysiwygCharacters(data[data.condition_option]);
63+
}
64+
6165
if (attributes.conditions_encoded.length === 0) {
6266
return data;
6367
}

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/products/mass-converter/widget-directive.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,15 @@ export default class WidgetDirective extends BaseWidgetDirective {
5353
products_count: data.products_count,
5454
sort_order: data.sort_order,
5555
condition_option: data.condition_option,
56-
condition_option_value: this.encodeWysiwygCharacters(data[data.condition_option] || ""),
56+
condition_option_value: "",
5757
type_name: "Catalog Products List",
5858
conditions_encoded: this.encodeWysiwygCharacters(data.conditions_encoded || ""),
5959
};
6060

61+
if (typeof data[data.condition_option] === "string") {
62+
attributes.condition_option_value = this.encodeWysiwygCharacters(data[data.condition_option]);
63+
}
64+
6165
if (attributes.conditions_encoded.length === 0) {
6266
return data;
6367
}

0 commit comments

Comments
 (0)