1414 */
1515class OptionRepositoryTest extends \PHPUnit \Framework \TestCase
1616{
17- /**
18- * @var \PHPUnit_Framework_MockObject_MockObject
19- */
20- protected $ metadataPoolMock ;
21-
2217 /**
2318 * @var \Magento\Bundle\Model\OptionRepository
2419 */
@@ -67,12 +62,12 @@ class OptionRepositoryTest extends \PHPUnit\Framework\TestCase
6762 /**
6863 * @var \PHPUnit_Framework_MockObject_MockObject
6964 */
70- protected $ linkListMock ;
65+ protected $ dataObjectHelperMock ;
7166
7267 /**
73- * @var \PHPUnit_Framework_MockObject_MockObject
68+ * @var \Magento\Bundle\Model\Option\SaveAction|\ PHPUnit_Framework_MockObject_MockObject
7469 */
75- protected $ dataObjectHelperMock ;
70+ private $ optionSaveActionMock ;
7671
7772 protected function setUp ()
7873 {
@@ -94,24 +89,18 @@ protected function setUp()
9489 $ this ->storeManagerMock = $ this ->createMock (\Magento \Store \Model \StoreManagerInterface::class);
9590 $ this ->linkManagementMock = $ this ->createMock (\Magento \Bundle \Api \ProductLinkManagementInterface::class);
9691 $ this ->optionListMock = $ this ->createMock (\Magento \Bundle \Model \Product \OptionList::class);
97- $ this ->linkListMock = $ this ->createMock (\Magento \Bundle \Model \Product \LinksList::class);
98- $ this ->metadataPoolMock = $ this ->createMock (\Magento \Framework \EntityManager \MetadataPool::class);
92+ $ this ->optionSaveActionMock = $ this ->createMock (\Magento \Bundle \Model \Option \SaveAction::class);
9993
10094 $ this ->model = new OptionRepository (
10195 $ this ->productRepositoryMock ,
10296 $ this ->typeMock ,
10397 $ this ->optionFactoryMock ,
10498 $ this ->optionResourceMock ,
105- $ this ->storeManagerMock ,
10699 $ this ->linkManagementMock ,
107100 $ this ->optionListMock ,
108- $ this ->linkListMock ,
109- $ this ->dataObjectHelperMock
101+ $ this ->dataObjectHelperMock ,
102+ $ this ->optionSaveActionMock
110103 );
111- $ refClass = new \ReflectionClass (OptionRepository::class);
112- $ refProperty = $ refClass ->getProperty ('metadataPool ' );
113- $ refProperty ->setAccessible (true );
114- $ refProperty ->setValue ($ this ->model , $ this ->metadataPoolMock );
115104 }
116105
117106 /**
@@ -174,7 +163,7 @@ public function testGet()
174163 $ productMock ->expects ($ this ->once ())
175164 ->method ('getTypeId ' )
176165 ->willReturn (\Magento \Catalog \Model \Product \Type::TYPE_BUNDLE );
177- $ productMock ->expects ($ this ->once ( ))->method ('getSku ' )->willReturn ($ productSku );
166+ $ productMock ->expects ($ this ->exactly ( 2 ))->method ('getSku ' )->willReturn ($ productSku );
178167
179168 $ this ->productRepositoryMock ->expects ($ this ->once ())
180169 ->method ('get ' )
@@ -194,7 +183,6 @@ public function testGet()
194183 $ optionMock ->expects ($ this ->once ())->method ('getData ' )->willReturn ($ optionData );
195184
196185 $ linkMock = ['item ' ];
197- $ this ->linkListMock ->expects ($ this ->once ())->method ('getItems ' )->with ($ productMock , 100 )->willReturn ($ linkMock );
198186
199187 $ newOptionMock = $ this ->createMock (\Magento \Bundle \Api \Data \OptionInterface::class);
200188 $ this ->dataObjectHelperMock ->expects ($ this ->once ())
@@ -207,10 +195,10 @@ public function testGet()
207195 ->with ($ optionData ['title ' ])
208196 ->willReturnSelf ();
209197 $ newOptionMock ->expects ($ this ->once ())->method ('setSku ' )->with ()->willReturnSelf ();
210- $ newOptionMock ->expects ($ this ->once ())
211- ->method ('setProductLinks ' )
212- ->with ($ linkMock )
213- ->willReturnSelf ( );
198+ $ this -> linkManagementMock ->expects ($ this ->once ())
199+ ->method ('getChildren ' )
200+ ->with ($ productSku , $ optionId )
201+ ->willReturn ( $ linkMock );
214202
215203 $ this ->optionFactoryMock ->expects ($ this ->once ())->method ('create ' )->willReturn ($ newOptionMock );
216204
@@ -272,172 +260,67 @@ public function testDeleteById()
272260 */
273261 public function testSaveExistingOption ()
274262 {
275- $ productId = 1 ;
276-
277- $ storeId = 2 ;
278263 $ optionId = 5 ;
279- $ existingLinkToUpdateId = '23 ' ;
264+
265+ $ productSku = 'sku ' ;
280266
281267 $ productMock = $ this ->createMock (\Magento \Catalog \Model \Product::class);
282- $ productMock ->expects ($ this ->once ())->method ('getData ' )->willReturn ($ productId );
283- $ productMock ->expects ($ this ->once ())->method ('getStoreId ' )->willReturn ($ storeId );
284- $ optionCollectionMock = $ this ->getMockBuilder (\Magento \Bundle \Model \ResourceModel \Option \Collection::class)
285- ->disableOriginalConstructor ()
286- ->getMock ();
287- $ this ->typeMock ->expects ($ this ->once ())
288- ->method ('getOptionsCollection ' )
289- ->with ($ productMock )
290- ->willReturn ($ optionCollectionMock );
291- $ optionCollectionMock ->expects ($ this ->once ())->method ('setIdFilter ' )->with ($ optionId )->willReturnSelf ();
268+ $ productMock ->expects ($ this ->once ())->method ('getSku ' )->willReturn ($ productSku );
292269
293270 $ optionMock = $ this ->createPartialMock (
294271 \Magento \Bundle \Model \Option::class,
295272 ['setStoreId ' , 'setParentId ' , 'getProductLinks ' , 'getOptionId ' , 'getResource ' ]
296273 );
297- $ optionCollectionMock ->expects ($ this ->once ())->method ('getFirstItem ' )->willReturn ($ optionMock );
298274
299- $ metadataMock = $ this ->createMock (\Magento \Framework \EntityManager \EntityMetadata::class);
300- $ metadataMock ->expects ($ this ->once ())->method ('getLinkField ' )->willReturn ('product_option ' );
301-
302- $ this ->metadataPoolMock ->expects ($ this ->once ())->method ('getMetadata ' )
303- ->with (\Magento \Catalog \Api \Data \ProductInterface::class)
304- ->willReturn ($ metadataMock );
305275 $ optionMock ->expects ($ this ->atLeastOnce ())->method ('getOptionId ' )->willReturn ($ optionId );
306276
307- $ productLinkUpdate = $ this ->createMock (\Magento \Bundle \Api \Data \LinkInterface::class);
308- $ productLinkUpdate ->expects ($ this ->any ())->method ('getId ' )->willReturn ($ existingLinkToUpdateId );
309- $ productLinkNew = $ this ->createMock (\Magento \Bundle \Api \Data \LinkInterface::class);
310- $ productLinkNew ->expects ($ this ->any ())->method ('getId ' )->willReturn (null );
311- $ optionMock ->expects ($ this ->exactly (2 ))
312- ->method ('getProductLinks ' )
313- ->willReturn ([$ productLinkUpdate , $ productLinkNew ]);
277+ $ this ->optionSaveActionMock ->expects ($ this ->once ())->method ('save ' )->with ($ productMock , $ optionMock )
278+ ->willReturn ($ optionMock );
279+
280+ $ this ->productRepositoryMock
281+ ->expects ($ this ->once ())
282+ ->method ('get ' )
283+ ->with ($ productSku )
284+ ->willReturn ($ productMock );
314285
315- $ this ->linkManagementMock ->expects ($ this ->exactly (2 ))
316- ->method ('addChild ' )
286+ $ this ->productRepositoryMock
287+ ->expects ($ this ->once ())
288+ ->method ('save ' )
317289 ->with ($ productMock );
290+
318291 $ this ->assertEquals ($ optionId , $ this ->model ->save ($ productMock , $ optionMock ));
319292 }
320293
321294 public function testSaveNewOption ()
322295 {
323- $ productId = 1 ;
324- $ productSku = 'bundle_sku ' ;
325- $ storeId = 2 ;
326296 $ optionId = 5 ;
327297
328- $ productMock = $ this ->createMock (\Magento \Catalog \Model \Product::class);
329- $ productMock ->expects ($ this ->once ())->method ('getData ' )->willReturn ($ productId );
330- $ productMock ->expects ($ this ->once ())->method ('getStoreId ' )->willReturn ($ storeId );
331- $ productMock ->expects ($ this ->any ())->method ('getSku ' )->willReturn ($ productSku );
298+ $ productSku = 'sku ' ;
332299
333- $ optionCollectionMock = $ this ->getMockBuilder (\Magento \Bundle \Model \ResourceModel \Option \Collection::class)
334- ->disableOriginalConstructor ()
335- ->getMock ();
336- $ this ->typeMock ->expects ($ this ->once ())
337- ->method ('getOptionsCollection ' )
338- ->with ($ productMock )
339- ->willReturn ($ optionCollectionMock );
340- $ optionCollectionMock ->expects ($ this ->once ())->method ('setIdFilter ' )->with ($ optionId )->willReturnSelf ();
300+ $ productMock = $ this ->createMock (\Magento \Catalog \Model \Product::class);
301+ $ productMock ->expects ($ this ->once ())->method ('getSku ' )->willReturn ($ productSku );
341302
342303 $ optionMock = $ this ->createPartialMock (
343304 \Magento \Bundle \Model \Option::class,
344- [
345- 'setStoreId ' ,
346- 'setParentId ' ,
347- 'getProductLinks ' ,
348- 'getOptionId ' ,
349- 'setOptionId ' ,
350- 'setDefaultTitle ' ,
351- 'getTitle ' ,
352- 'getResource '
353- ]
354- );
355- $ optionCollectionMock ->expects ($ this ->once ())->method ('getFirstItem ' )->willReturn ($ optionMock );
356- $ metadataMock = $ this ->createMock (
357- \Magento \Framework \EntityManager \EntityMetadata::class
305+ ['setStoreId ' , 'setParentId ' , 'getProductLinks ' , 'getOptionId ' , 'getResource ' ]
358306 );
359- $ metadataMock ->expects ($ this ->once ())->method ('getLinkField ' )->willReturn ('product_option ' );
360-
361- $ this ->metadataPoolMock ->expects ($ this ->once ())->method ('getMetadata ' )
362- ->with (\Magento \Catalog \Api \Data \ProductInterface::class)
363- ->willReturn ($ metadataMock );
364- $ optionMock ->method ('getOptionId ' )
365- ->willReturn ($ optionId );
366-
367- $ productLink1 = $ this ->createMock (\Magento \Bundle \Api \Data \LinkInterface::class);
368- $ productLink2 = $ this ->createMock (\Magento \Bundle \Api \Data \LinkInterface::class);
369- $ optionMock ->expects ($ this ->exactly (2 ))
370- ->method ('getProductLinks ' )
371- ->willReturn ([$ productLink1 , $ productLink2 ]);
372-
373- $ this ->optionResourceMock ->expects ($ this ->once ())->method ('save ' )->with ($ optionMock )->willReturnSelf ();
374- $ this ->linkManagementMock ->expects ($ this ->at (0 ))
375- ->method ('addChild ' )
376- ->with ($ productMock , $ optionId , $ productLink1 );
377- $ this ->linkManagementMock ->expects ($ this ->at (1 ))
378- ->method ('addChild ' )
379- ->with ($ productMock , $ optionId , $ productLink2 );
380- $ this ->assertEquals ($ optionId , $ this ->model ->save ($ productMock , $ optionMock ));
381- }
382307
383- /**
384- * @expectedException \Magento\Framework\Exception\CouldNotSaveException
385- * @expectedExceptionMessage The option couldn't be saved.
386- */
387- public function testSaveCanNotSave ()
388- {
389- $ productId = 1 ;
390- $ productSku = 'bundle_sku ' ;
391- $ storeId = 2 ;
392- $ optionId = 5 ;
308+ $ optionMock ->expects ($ this ->atLeastOnce ())->method ('getOptionId ' )->willReturn ($ optionId );
393309
394- $ productMock = $ this ->createMock (\Magento \Catalog \Model \Product::class);
395- $ productMock ->expects ($ this ->once ())->method ('getData ' )->willReturn ($ productId );
396- $ productMock ->expects ($ this ->once ())->method ('getStoreId ' )->willReturn ($ storeId );
397- $ productMock ->expects ($ this ->any ())->method ('getSku ' )->willReturn ($ productSku );
310+ $ this ->optionSaveActionMock ->expects ($ this ->once ())->method ('save ' )->with ($ productMock , $ optionMock )
311+ ->willReturn ($ optionMock );
398312
399- $ optionCollectionMock = $ this ->getMockBuilder (\Magento \Bundle \Model \ResourceModel \Option \Collection::class)
400- ->disableOriginalConstructor ()
401- ->getMock ();
402- $ this ->typeMock ->expects ($ this ->once ())
403- ->method ('getOptionsCollection ' )
404- ->with ($ productMock )
405- ->willReturn ($ optionCollectionMock );
406- $ optionCollectionMock ->expects ($ this ->once ())->method ('setIdFilter ' )->with ($ optionId )->willReturnSelf ();
313+ $ this ->productRepositoryMock
314+ ->expects ($ this ->once ())
315+ ->method ('get ' )
316+ ->with ($ productSku )
317+ ->willReturn ($ productMock );
407318
408- $ optionMock = $ this ->createPartialMock (
409- \Magento \Bundle \Model \Option::class,
410- [
411- 'setStoreId ' ,
412- 'setParentId ' ,
413- 'getProductLinks ' ,
414- 'getOptionId ' ,
415- 'setOptionId ' ,
416- 'setDefaultTitle ' ,
417- 'getTitle ' ,
418- 'getResource '
419- ]
420- );
421- $ optionCollectionMock ->expects ($ this ->once ())->method ('getFirstItem ' )->willReturn ($ optionMock );
422- $ metadataMock = $ this ->createMock (
423- \Magento \Framework \EntityManager \EntityMetadata::class
424- );
425- $ metadataMock ->expects ($ this ->once ())->method ('getLinkField ' )->willReturn ('product_option ' );
426-
427- $ this ->metadataPoolMock ->expects ($ this ->once ())->method ('getMetadata ' )
428- ->with (\Magento \Catalog \Api \Data \ProductInterface::class)
429- ->willReturn ($ metadataMock );
430- $ optionMock ->method ('getOptionId ' )->willReturn ($ optionId );
431-
432- $ productLink1 = $ this ->createMock (\Magento \Bundle \Api \Data \LinkInterface::class);
433- $ productLink2 = $ this ->createMock (\Magento \Bundle \Api \Data \LinkInterface::class);
434- $ optionMock ->expects ($ this ->exactly (2 ))
435- ->method ('getProductLinks ' )
436- ->willReturn ([$ productLink1 , $ productLink2 ]);
437-
438- $ this ->optionResourceMock ->expects ($ this ->once ())->method ('save ' )->with ($ optionMock )
439- ->willThrowException ($ this ->createMock (\Exception::class));
440- $ this ->model ->save ($ productMock , $ optionMock );
319+ $ this ->productRepositoryMock
320+ ->expects ($ this ->once ())
321+ ->method ('save ' )
322+ ->with ($ productMock );
323+ $ this ->assertEquals ($ optionId , $ this ->model ->save ($ productMock , $ optionMock ));
441324 }
442325
443326 public function testGetList ()
0 commit comments