Skip to content

Commit 897845a

Browse files
authored
Merge pull request #296 from magento-obsessive-owls/MC-18338-squash
[Owls] MC-18338
2 parents bd39126 + 68321f5 commit 897845a

File tree

18 files changed

+674
-46
lines changed

18 files changed

+674
-46
lines changed

app/code/Magento/PageBuilder/Model/Catalog/Sorting/SimpleOption.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ class SimpleOption implements OptionInterface
2525
*/
2626
private $sortDirection;
2727

28+
/**
29+
* @var string
30+
*/
31+
private $secondarySortDirection;
32+
2833
/**
2934
* @var string
3035
*/
@@ -34,15 +39,18 @@ class SimpleOption implements OptionInterface
3439
* @param string $label
3540
* @param string $sortDirection
3641
* @param string $attributeField
42+
* @param string|null $secondarySortDirection
3743
*/
3844
public function __construct(
3945
string $label,
4046
string $sortDirection,
41-
string $attributeField
47+
string $attributeField,
48+
string $secondarySortDirection = null
4249
) {
4350
$this->label = $label;
4451
$this->sortDirection = $sortDirection;
4552
$this->attributeField = $attributeField;
53+
$this->secondarySortDirection = $secondarySortDirection ?? $sortDirection;
4654
}
4755

4856
/**
@@ -53,7 +61,7 @@ public function sort(
5361
): \Magento\Catalog\Model\ResourceModel\Product\Collection {
5462
$collection->getSelect()->reset(Select::ORDER);
5563
$collection->addAttributeToSort($this->attributeField, $this->sortDirection);
56-
$collection->addAttributeToSort('entity_id', $this->sortDirection);
64+
$collection->addAttributeToSort('entity_id', $this->secondarySortDirection);
5765

5866
return $collection;
5967
}

app/code/Magento/PageBuilder/Plugin/Catalog/Block/Product/ProductsListPlugin.php

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
namespace Magento\PageBuilder\Plugin\Catalog\Block\Product;
1010

1111
use Magento\PageBuilder\Model\Catalog\Sorting;
12+
use Magento\Catalog\Model\Category;
1213
use Magento\CatalogInventory\Helper\Stock;
14+
use Magento\Catalog\Api\CategoryRepositoryInterface;
15+
use Magento\Framework\Exception\NoSuchEntityException;
1316

1417
/**
1518
* Catalog Products List widget block plugin
@@ -26,16 +29,24 @@ class ProductsListPlugin
2629
*/
2730
private $stock;
2831

32+
/**
33+
* @var CategoryRepositoryInterface
34+
*/
35+
private $categoryRepository;
36+
2937
/**
3038
* @param Sorting $sorting
3139
* @param Stock $stock
40+
* @param CategoryRepositoryInterface $categoryRepository
3241
*/
3342
public function __construct(
3443
Sorting $sorting,
35-
Stock $stock
44+
Stock $stock,
45+
CategoryRepositoryInterface $categoryRepository
3646
) {
3747
$this->sorting = $sorting;
3848
$this->stock = $stock;
49+
$this->categoryRepository = $categoryRepository;
3950
}
4051

4152
/**
@@ -49,12 +60,24 @@ public function afterCreateCollection(
4960
\Magento\CatalogWidget\Block\Product\ProductsList $subject,
5061
\Magento\Catalog\Model\ResourceModel\Product\Collection $result
5162
) {
52-
$this->stock->addIsInStockFilterToCollection($result);
63+
$categoryId = $subject->getData('category_ids');
5364
$sortOption = $subject->getData('sort_order');
54-
if (isset($sortOption)) {
55-
$sortedResult = $this->sorting->applySorting($sortOption, $result);
5665

57-
return $sortedResult;
66+
$this->stock->addIsInStockFilterToCollection($result);
67+
68+
if (!empty($categoryId)) {
69+
try {
70+
$category = $this->categoryRepository->get($categoryId);
71+
} catch (NoSuchEntityException $noEntityException) {
72+
$category = null;
73+
}
74+
if ($category) {
75+
$result->addCategoryFilter($category);
76+
}
77+
}
78+
79+
if (!empty($sortOption)) {
80+
return $this->sorting->applySorting($sortOption, $result);
5881
} else {
5982
return $result;
6083
}
@@ -72,4 +95,22 @@ public function afterGetCacheKeyInfo(\Magento\CatalogWidget\Block\Product\Produc
7295
$cacheKeys[] = $subject->getData('sort_order');
7396
return $cacheKeys;
7497
}
98+
99+
/**
100+
* Add category cache identifier
101+
*
102+
* @param \Magento\CatalogWidget\Block\Product\ProductsList $subject
103+
* @param array $result
104+
* @return array
105+
*/
106+
public function afterGetIdentities(\Magento\CatalogWidget\Block\Product\ProductsList $subject, array $result)
107+
{
108+
$categoryId = $subject->getData('category_ids');
109+
$sortOption = $subject->getData('sort_order');
110+
111+
if (!empty($categoryId) && $sortOption === 'position') {
112+
$result[] = Category::CACHE_TAG . '_' . $categoryId;
113+
}
114+
return $result;
115+
}
75116
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@
5555
<grabMultiple selector="{{page.product(index)}}" stepKey="grabProducts"/>
5656
<assertCount stepKey="assertCount" expected="{{count}}" expectedType="int" actualType="variable" actual="grabProducts"/>
5757
</actionGroup>
58+
<actionGroup name="selectCategoryFromCategoryDropDown">
59+
<arguments>
60+
<argument name="property" defaultValue="PageBuilderProductsSelectCategoryDropDown"/>
61+
<argument name="category" type="string"/>
62+
</arguments>
63+
<waitForElementVisible time="2" selector="{{EditPanelForm.panelMultiSelectFieldControl(property.section, property.fieldName)}}" stepKey="waitForMultiSelectFieldVisible"/>
64+
<click selector="{{EditPanelForm.panelMultiSelectFieldControl(property.section, property.fieldName)}}" stepKey="clickMultiSelectField"/>
65+
<waitForElementVisible selector="{{EditPanelForm.panelMultiSelectFieldControlInput(property.section, property.fieldName)}}" stepKey="waitForSearchField"/>
66+
<fillField selector="{{EditPanelForm.panelMultiSelectFieldControlInput(property.section, property.fieldName)}}" userInput="{{category}}" stepKey="inputSearchField"/>
67+
<waitForElementVisible selector="{{EditPanelForm.panelMultiSelectFieldControlResult(property.section, property.fieldName, category)}}" stepKey="waitForResult"/>
68+
<click selector="{{EditPanelForm.panelMultiSelectFieldControlResult(property.section, property.fieldName, category)}}" stepKey="clickResult"/>
69+
<click selector="{{EditPanelForm.panelFieldLabel(property.section, property.fieldName, property.section, property.name)}}" stepKey="clickOnFieldLabel"/>
70+
<waitForElementNotVisible selector="{{EditPanelForm.panelMultiSelectFieldControlInput(property.section, property.fieldName)}}" stepKey="waitForSearchFieldNotVisible"/>
71+
<see selector="{{EditPanelForm.panelMultiSelectFieldControl(property.section, property.fieldName)}}" userInput="{{category}}" stepKey="seeResultInField"/>
72+
</actionGroup>
5873
<actionGroup name="addConditionToProductConditions">
5974
<arguments>
6075
<argument name="conditionType" defaultValue="PageBuilderProductsConditionCategory"/>

app/code/Magento/PageBuilder/Test/Mftf/Data/ProductsData.xml

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,35 @@
77
-->
88

99
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10-
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd"><!-- Product Entity -->
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
11+
<entity name="PageBuilderProductsMessage" type="pagebuilder_products_messages">
12+
<data key="noProductsFound">No products were found matching your condition</data>
13+
</entity>
14+
<!-- Product Entity -->
1115
<entity name="PageBuilderProductsSubCategory" type="category">
1216
<data key="name" unique="suffix">PageBuilderProductsSubCategory</data>
1317
<data key="is_active">true</data>
1418
<data key="include_in_menu">true</data>
1519
</entity>
20+
<!-- Select Products By -->
21+
<entity name="PageBuilderProductsSelectProductsByCategory" type="pagebuilder_select_products_by_types">
22+
<data key="name">Select Products By</data>
23+
<data key="section">general</data>
24+
<data key="fieldName">condition_option</data>
25+
<data key="value">category_ids</data>
26+
</entity>
27+
<entity name="PageBuilderProductsSelectProductsByCondition" type="pagebuilder_select_products_by_types">
28+
<data key="name">Select Products By</data>
29+
<data key="section">general</data>
30+
<data key="fieldName">condition_option</data>
31+
<data key="value">condition</data>
32+
</entity>
33+
<!-- Category -->
34+
<entity name="PageBuilderProductsSelectCategoryDropDown" type="pagebuilder_products_sorting_types">
35+
<data key="name">Category</data>
36+
<data key="section">general</data>
37+
<data key="fieldName">category_ids</data>
38+
</entity>
1639
<!-- Conditions -->
1740
<entity name="PageBuilderProductsConditionCombination" type="pagebuilder_products_condition_types">
1841
<data key="name">Conditions Combination</data>
@@ -31,19 +54,25 @@
3154
<data key="value">Magento\CatalogWidget\Model\Rule\Condition\Product|sku</data>
3255
</entity>
3356
<!-- Sort by -->
34-
<entity name="PageBuilderProductsSortByNewestTop" type="pagebuilder_content_type">
57+
<entity name="PageBuilderProductsSortByNewestTop" type="pagebuilder_products_sorting_types">
3558
<data key="name">Sort By</data>
3659
<data key="section">general</data>
3760
<data key="fieldName">sort_order</data>
3861
<data key="value">date_newest_top</data>
3962
</entity>
40-
<entity name="PageBuilderProductsSortByOldestTop" type="pagebuilder_content_type">
63+
<entity name="PageBuilderProductsSortByOldestTop" type="pagebuilder_products_sorting_types">
4164
<data key="name">Sort By</data>
4265
<data key="section">general</data>
4366
<data key="fieldName">sort_order</data>
4467
<data key="value">date_oldest_top</data>
4568
</entity>
46-
<!-- Products Count -->
69+
<entity name="PageBuilderProductsSortByPosition" type="pagebuilder_products_sorting_types">
70+
<data key="name">Sort By</data>
71+
<data key="section">general</data>
72+
<data key="fieldName">sort_order</data>
73+
<data key="value">position</data>
74+
</entity>
75+
<!-- Number of Products to Display -->
4776
<entity name="PageBuilderProductsCountPropertyOne" type="pagebuilder_content_type">
4877
<data key="name">Number of Products to Display</data>
4978
<data key="section">general</data>

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderCatalogSection.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,8 @@
4040
<!-- This goes in CE repo -->
4141
<element name="descriptionTextArea" type="text" selector="#category_form_description"/>
4242
</section>
43+
<section name="AdminCategoryProductsGridSection">
44+
<!-- This goes in CE repo -->
45+
<element name="rowPosition" type="input" selector="#catalog_category_products_table tbody tr:nth-of-type({{row}}) .col-position input" timeout="30" parameterized="true"/>
46+
</section>
4347
</sections>

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@
146146
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditMenuProducts">
147147
<argument name="contentType" value="PageBuilderProductsContentType"/>
148148
</actionGroup>
149+
<actionGroup ref="chooseVisualSelectOption" stepKey="chooseSelectProductsBy">
150+
<argument name="property" value="PageBuilderProductsSelectProductsByCondition"/>
151+
</actionGroup>
149152
<actionGroup ref="addConditionToProductConditions" stepKey="addCategory">
150153
<argument name="conditionInput" value="$$createPreReqCategory.id$$"/>
151154
</actionGroup>
@@ -326,6 +329,9 @@
326329
<actionGroup ref="openPageBuilderEditPanel" stepKey="openEditAfterDrop">
327330
<argument name="contentType" value="PageBuilderProductsContentType"/>
328331
</actionGroup>
332+
<actionGroup ref="chooseVisualSelectOption" stepKey="chooseSelectProductsBy">
333+
<argument name="property" value="PageBuilderProductsSelectProductsByCondition"/>
334+
</actionGroup>
329335
<actionGroup ref="addConditionToProductConditions" stepKey="addCategory">
330336
<argument name="conditionInput" value="$$createCategory.id$$"/>
331337
</actionGroup>

0 commit comments

Comments
 (0)