6
6
7
7
namespace Magento \ConfigurableProduct \Test \Unit \Model ;
8
8
9
+ use Magento \ConfigurableProduct \Model \LinkManagement ;
9
10
use Magento \ConfigurableProduct \Model \Product \Type \Configurable ;
10
- use Magento \ConfigurableProduct \Test \Unit \Model \Product \ProductExtensionAttributes ;
11
11
12
12
/**
13
13
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -146,15 +146,59 @@ public function testAddChild()
146
146
147
147
$ configurable = $ this ->getMockBuilder (\Magento \Catalog \Model \Product::class)
148
148
->disableOriginalConstructor ()
149
+ ->setMethods (['getId ' , 'getExtensionAttributes ' ])
150
+ ->getMock ();
151
+ $ simple = $ this ->getMockBuilder (\Magento \Catalog \Model \Product::class)
152
+ ->disableOriginalConstructor ()
153
+ ->setMethods (['getId ' , 'getData ' ])
149
154
->getMock ();
150
155
151
- $ configurable ->expects ($ this ->any ())->method ('getId ' )->will ($ this ->returnValue (666 ));
156
+ $ extensionAttributesMock = $ this ->getMockBuilder (\Magento \Catalog \Api \Data \ProductExtension::class)
157
+ ->disableOriginalConstructor ()
158
+ ->setMethods ([
159
+ 'getConfigurableProductOptions ' , 'setConfigurableProductOptions ' , 'setConfigurableProductLinks '
160
+ ])
161
+ ->getMock ();
162
+ $ optionMock = $ this ->getMockBuilder (\Magento \ConfigurableProduct \Api \Data \Option::class)
163
+ ->disableOriginalConstructor ()
164
+ ->setMethods (['getProductAttribute ' , 'getAttributeId ' ])
165
+ ->getMock ();
166
+ $ productAttributeMock = $ this ->getMockBuilder (\Magento \Eav \Model \Entity \Attribute \AbstractAttribute::class)
167
+ ->disableOriginalConstructor ()
168
+ ->setMethods (['getAttributeCode ' ])
169
+ ->getMock ();
170
+ $ optionsFactoryMock = $ this ->getMockBuilder (\Magento \ConfigurableProduct \Helper \Product \Options \Factory::class)
171
+ ->disableOriginalConstructor ()
172
+ ->setMethods (['create ' ])
173
+ ->getMock ();
174
+ $ reflectionClass = new \ReflectionClass (\Magento \ConfigurableProduct \Model \LinkManagement::class);
175
+ $ optionsFactoryReflectionProperty = $ reflectionClass ->getProperty ('optionsFactory ' );
176
+ $ optionsFactoryReflectionProperty ->setAccessible (true );
177
+ $ optionsFactoryReflectionProperty ->setValue ($ this ->object , $ optionsFactoryMock );
152
178
153
- $ simple = $ this ->getMockBuilder (\Magento \Catalog \Model \Product ::class)
179
+ $ attributeFactoryMock = $ this ->getMockBuilder (\Magento \Catalog \Model \ResourceModel \ Eav \AttributeFactory ::class)
154
180
->disableOriginalConstructor ()
181
+ ->setMethods (['create ' ])
155
182
->getMock ();
183
+ $ attributeFactoryReflectionProperty = $ reflectionClass ->getProperty ('attributeFactory ' );
184
+ $ attributeFactoryReflectionProperty ->setAccessible (true );
185
+ $ attributeFactoryReflectionProperty ->setValue ($ this ->object , $ attributeFactoryMock );
156
186
157
- $ simple ->expects ($ this ->any ())->method ('getId ' )->will ($ this ->returnValue (999 ));
187
+ $ attributeMock = $ this ->getMockBuilder (\Magento \Catalog \Model \ResourceModel \Eav \Attribute::class)
188
+ ->disableOriginalConstructor ()
189
+ ->setMethods (['getCollection ' , 'getOptions ' , 'getId ' , 'getAttributeCode ' , 'getStoreLabel ' ])
190
+ ->getMock ();
191
+ $ attributeOptionMock = $ this ->getMockBuilder (\Magento \Eav \Model \Entity \Attribute \Option::class)
192
+ ->disableOriginalConstructor ()
193
+ ->setMethods (['getValue ' , 'getLabel ' ])
194
+ ->getMock ();
195
+
196
+ $ attributeCollectionMock = $ this ->getMockBuilder (
197
+ \Magento \ConfigurableProduct \Model \ResourceModel \Product \Type \Configurable \Attribute \Collection::class
198
+ )
199
+ ->disableOriginalConstructor ()
200
+ ->setMethods (['addFieldToFilter ' , 'getItems ' ])
201
+ ->getMock ();
158
202
159
203
$ this ->productRepository ->expects ($ this ->at (0 ))->method ('get ' )->with ($ productSku )->willReturn ($ configurable );
160
204
$ this ->productRepository ->expects ($ this ->at (1 ))->method ('get ' )->with ($ childSku )->willReturn ($ simple );
@@ -164,15 +208,30 @@ public function testAddChild()
164
208
$ this ->returnValue ([0 => [1 , 2 , 3 ]])
165
209
);
166
210
167
- $ extensionAttributes = $ this ->getMockBuilder (ProductExtensionAttributes::class)
168
- ->setMethods (['setConfigurableProductLinks ' ])
169
- ->disableOriginalConstructor ()
170
- ->getMockForAbstractClass ();
211
+ $ configurable ->expects ($ this ->any ())->method ('getId ' )->will ($ this ->returnValue (666 ));
212
+ $ simple ->expects ($ this ->any ())->method ('getId ' )->will ($ this ->returnValue (999 ));
213
+
214
+ $ configurable ->expects ($ this ->any ())->method ('getExtensionAttributes ' )->willReturn ($ extensionAttributesMock );
215
+ $ extensionAttributesMock ->expects ($ this ->any ())
216
+ ->method ('getConfigurableProductOptions ' )
217
+ ->willReturn ([$ optionMock ]);
218
+ $ optionMock ->expects ($ this ->any ())->method ('getProductAttribute ' )->willReturn ($ productAttributeMock );
219
+ $ productAttributeMock ->expects ($ this ->any ())->method ('getAttributeCode ' )->willReturn ('color ' );
220
+ $ simple ->expects ($ this ->any ())->method ('getData ' )->willReturn ('color ' );
221
+ $ optionMock ->expects ($ this ->any ())->method ('getAttributeId ' )->willReturn ('1 ' );
171
222
172
- $ configurable ->expects ($ this ->once ())->method ('getExtensionAttributes ' )->willReturn ($ extensionAttributes );
173
- $ extensionAttributes ->expects ($ this ->once ())->method ('setConfigurableProductLinks ' )->willReturnSelf ();
223
+ $ optionsFactoryMock ->expects ($ this ->any ())->method ('create ' )->willReturn ([$ optionMock ]);
224
+ $ attributeFactoryMock ->expects ($ this ->any ())->method ('create ' )->willReturn ($ attributeMock );
225
+ $ attributeMock ->expects ($ this ->any ())->method ('getCollection ' )->willReturn ($ attributeCollectionMock );
226
+ $ attributeCollectionMock ->expects ($ this ->any ())->method ('addFieldToFilter ' )->willReturnSelf ();
227
+ $ attributeCollectionMock ->expects ($ this ->any ())->method ('getItems ' )->willReturn ([$ attributeMock ]);
174
228
175
- $ configurable ->expects ($ this ->once ())->method ('save ' );
229
+ $ attributeMock ->expects ($ this ->any ())->method ('getOptions ' )->willReturn ([$ attributeOptionMock ]);
230
+
231
+ $ extensionAttributesMock ->expects ($ this ->any ())->method ('setConfigurableProductOptions ' );
232
+ $ extensionAttributesMock ->expects ($ this ->any ())->method ('setConfigurableProductLinks ' );
233
+
234
+ $ this ->productRepository ->expects ($ this ->once ())->method ('save ' );
176
235
177
236
$ this ->assertTrue (true , $ this ->object ->addChild ($ productSku , $ childSku ));
178
237
}
@@ -243,15 +302,13 @@ public function testRemoveChild()
243
302
$ productType ->expects ($ this ->once ())->method ('getUsedProducts ' )
244
303
->will ($ this ->returnValue ([$ option ]));
245
304
246
- $ extensionAttributes = $ this ->getMockBuilder (ProductExtensionAttributes ::class)
305
+ $ extensionAttributesMock = $ this ->getMockBuilder (\ Magento \ Framework \ Api \ExtensionAttributesInterface ::class)
247
306
->setMethods (['setConfigurableProductLinks ' ])
248
307
->disableOriginalConstructor ()
249
308
->getMockForAbstractClass ();
250
309
251
- $ product ->expects ($ this ->once ())->method ('getExtensionAttributes ' )->willReturn ($ extensionAttributes );
252
- $ extensionAttributes ->expects ($ this ->once ())->method ('setConfigurableProductLinks ' )->willReturnSelf ();
253
-
254
- $ product ->expects ($ this ->once ())->method ('save ' );
310
+ $ product ->expects ($ this ->once ())->method ('getExtensionAttributes ' )->willReturn ($ extensionAttributesMock );
311
+ $ this ->productRepository ->expects ($ this ->once ())->method ('save ' );
255
312
$ this ->assertTrue ($ this ->object ->removeChild ($ productSku , $ childSku ));
256
313
}
257
314
0 commit comments