6
6
7
7
namespace Magento \Rule \Model \Condition \Sql ;
8
8
9
+ use Magento \Catalog \Setup \CategorySetup ;
10
+ use Magento \Catalog \Test \Fixture \MultiselectAttribute ;
11
+ use Magento \Catalog \Test \Fixture \Product as ProductFixture ;
12
+ use Magento \Eav \Model \Entity \Attribute \Backend \ArrayBackend ;
13
+ use Magento \Eav \Model \Entity \Attribute \Source \Table ;
14
+ use Magento \Eav \Test \Fixture \AttributeOption as AttributeOptionFixture ;
15
+ use Magento \TestFramework \Fixture \DataFixture ;
9
16
use Magento \TestFramework \Helper \Bootstrap ;
10
17
use Magento \Catalog \Model \ResourceModel \Product \CollectionFactory as ProductCollectionFactory ;
11
18
use Magento \CatalogWidget \Model \RuleFactory ;
@@ -29,7 +36,81 @@ protected function setUp(): void
29
36
30
37
/**
31
38
* @return void
39
+ * @dataProvider attachConditionToCollectionDataProvider
32
40
*/
41
+ #[
42
+ DataFixture(CategoryFixture::class, ['url_path ' => 'cat1 ' ], 'cat1 ' ),
43
+ DataFixture(
44
+ MultiselectAttribute::class,
45
+ [
46
+ 'entity_type_id ' => CategorySetup::CATALOG_PRODUCT_ENTITY_TYPE_ID ,
47
+ 'source_model ' => Table::class,
48
+ 'backend_model ' => ArrayBackend::class,
49
+ 'attribute_code ' => 'product_custom_attribute_multiselect '
50
+ ],
51
+ 'multiselect_custom_attribute '
52
+ ),
53
+ DataFixture(
54
+ AttributeOptionFixture::class,
55
+ [
56
+ 'entity_type ' => CategorySetup::CATALOG_PRODUCT_ENTITY_TYPE_ID ,
57
+ 'attribute_code ' => '$multiselect_custom_attribute.attribute_code$ ' ,
58
+ 'label ' => 'red ' ,
59
+ 'sort_order ' => 20
60
+ ],
61
+ 'multiselect_custom_attribute_option_1 '
62
+ ),
63
+ DataFixture(
64
+ AttributeOptionFixture::class,
65
+ [
66
+ 'entity_type ' => CategorySetup::CATALOG_PRODUCT_ENTITY_TYPE_ID ,
67
+ 'attribute_code ' => '$multiselect_custom_attribute.attribute_code$ ' ,
68
+ 'sort_order ' => 10 ,
69
+ 'label ' => 'white ' ,
70
+ 'is_default ' => true
71
+ ],
72
+ 'multiselect_custom_attribute_option_2 '
73
+ ),
74
+ DataFixture(ProductFixture::class,['sku ' => 'sku1 ' , 'category_ids ' => ['$cat1.id$ ' ]], 'p1 ' ),
75
+ DataFixture(ProductFixture::class,['sku ' => 'sku2 ' , 'category_ids ' => ['$cat1.id$ ' ]], 'p2 ' ),
76
+ DataFixture(ProductFixture::class,['sku ' => 'sku3 ' , 'category_ids ' => ['$cat1.id$ ' ]], 'p3 ' ),
77
+ DataFixture(ProductFixture::class,['sku ' => 'sku4 ' , 'category_ids ' => ['$cat1.id$ ' ]], 'p4 ' ),
78
+ DataFixture(ProductFixture::class, ['product_links ' => [['sku ' => '$p1.sku$ ' , 'type ' => 'related ' ]]], 'p2 ' ),
79
+ DataFixture(ProductFixture::class, as: 'p3 ' ),
80
+ DataFixture(ProductFixture::class, as: 'p4 ' ),
81
+ DataFixture(ProductFixture::class, as: 'p5 ' ),
82
+ DataFixture(ProductFixture::class, ['product_links ' => [['sku ' => '$p4.sku$ ' , 'type ' => 'upsell ' ]]], 'p6 ' ),
83
+ DataFixture(ProductFixture::class, as: 'p7 ' ),
84
+ DataFixture(ProductFixture::class, as: 'p8 ' ),
85
+ DataFixture(ProductFixture::class, ['product_links ' => [['sku ' => '$p8.sku$ ' , 'type ' => 'crosssell ' ]]], 'p9 ' ),
86
+ DataFixture(RuleConditionFixture::class, ['attribute ' => 'sku ' , 'value ' => '$p2.sku$ ' ,], 'rule1Condition ' ),
87
+ DataFixture(RuleConditionsFixture::class, ['conditions ' => ['$rule1Condition$ ' ]], 'rule1Conditions ' ),
88
+ DataFixture(RuleActionFixture::class, ['attribute ' => 'sku ' , 'value ' => '$p3.sku$ ' ,], 'rule1Action ' ),
89
+ DataFixture(RuleActionsFixture::class, ['conditions ' => ['$rule1Action$ ' ]], 'rule1Actions ' ),
90
+ DataFixture(
91
+ RuleFixture::class,
92
+ ['actions ' => '$rule1Actions$ ' , 'conditions ' => '$rule1Conditions$ ' , 'apply_to ' => Rule::RELATED_PRODUCTS ],
93
+ 'rule1 '
94
+ ),
95
+ DataFixture(RuleConditionFixture::class, ['attribute ' => 'sku ' , 'value ' => '$p6.sku$ ' ,], 'rule2Condition ' ),
96
+ DataFixture(RuleConditionsFixture::class, ['conditions ' => ['$rule2Condition$ ' ]], 'rule2Conditions ' ),
97
+ DataFixture(RuleActionFixture::class, ['attribute ' => 'sku ' , 'value ' => '$p5.sku$ ' ,], 'rule2Action ' ),
98
+ DataFixture(RuleActionsFixture::class, ['conditions ' => ['$rule2Action$ ' ]], 'rule2Actions ' ),
99
+ DataFixture(
100
+ RuleFixture::class,
101
+ ['actions ' => '$rule2Actions$ ' , 'conditions ' => '$rule2Conditions$ ' , 'apply_to ' => Rule::UP_SELLS ],
102
+ 'rule2 '
103
+ ),
104
+ DataFixture(RuleConditionFixture::class, ['attribute ' => 'sku ' , 'value ' => '$p9.sku$ ' ,], 'rule3Condition ' ),
105
+ DataFixture(RuleConditionsFixture::class, ['conditions ' => ['$rule3Condition$ ' ]], 'rule3Conditions ' ),
106
+ DataFixture(RuleActionFixture::class, ['attribute ' => 'sku ' , 'value ' => '$p7.sku$ ' ,], 'rule3Action ' ),
107
+ DataFixture(RuleActionsFixture::class, ['conditions ' => ['$rule3Action$ ' ]], 'rule3Actions ' ),
108
+ DataFixture(
109
+ RuleFixture::class,
110
+ ['actions ' => '$rule3Actions$ ' , 'conditions ' => '$rule3Conditions$ ' , 'apply_to ' => Rule::CROSS_SELLS ],
111
+ 'rule3 '
112
+ ),
113
+ ]
33
114
public function testAttachConditionToCollection (): void
34
115
{
35
116
/** @var ProductCollectionFactory $collectionFactory */
@@ -77,4 +158,31 @@ public function testAttachConditionToCollection(): void
77
158
. ".+ORDER BY \(FIELD\(`e`.`sku`, 'sku1', 'sku2', 'sku3', 'sku4', 'sku5'\)\)/ " ;
78
159
$ this ->assertEquals (1 , preg_match ($ whereString , $ collection ->getSelectSql (true )));
79
160
}
161
+
162
+ /**
163
+ * @return array
164
+ */
165
+ public static function attachConditionToCollectionDataProvider (): array
166
+ {
167
+ return [
168
+ [
169
+ 'productName ' => 'p2 ' ,
170
+ 'relatedProducts ' => ['p1 ' , 'p3 ' ],
171
+ 'upsellProducts ' => [],
172
+ 'crosssellProducts ' => [],
173
+ 'config ' => [
174
+ 'catalog/magento_targetrule/related_position_behavior ' => Rule::BOTH_SELECTED_AND_RULE_BASED
175
+ ]
176
+ ],
177
+ [
178
+ 'productName ' => 'p2 ' ,
179
+ 'relatedProducts ' => ['p1 ' ],
180
+ 'upsellProducts ' => [],
181
+ 'crosssellProducts ' => [],
182
+ 'config ' => [
183
+ 'catalog/magento_targetrule/related_position_behavior ' => Rule::SELECTED_ONLY
184
+ ]
185
+ ]
186
+ ];
187
+ }
80
188
}
0 commit comments