14
14
*/
15
15
class OptionRepositoryTest extends \PHPUnit \Framework \TestCase
16
16
{
17
- /**
18
- * @var \PHPUnit_Framework_MockObject_MockObject
19
- */
20
- protected $ metadataPoolMock ;
21
-
22
17
/**
23
18
* @var \Magento\Bundle\Model\OptionRepository
24
19
*/
@@ -67,12 +62,12 @@ class OptionRepositoryTest extends \PHPUnit\Framework\TestCase
67
62
/**
68
63
* @var \PHPUnit_Framework_MockObject_MockObject
69
64
*/
70
- protected $ linkListMock ;
65
+ protected $ dataObjectHelperMock ;
71
66
72
67
/**
73
- * @var \PHPUnit_Framework_MockObject_MockObject
68
+ * @var \Magento\Bundle\Model\Option\SaveAction|\ PHPUnit_Framework_MockObject_MockObject
74
69
*/
75
- protected $ dataObjectHelperMock ;
70
+ private $ optionSaveActionMock ;
76
71
77
72
protected function setUp ()
78
73
{
@@ -94,24 +89,18 @@ protected function setUp()
94
89
$ this ->storeManagerMock = $ this ->createMock (\Magento \Store \Model \StoreManagerInterface::class);
95
90
$ this ->linkManagementMock = $ this ->createMock (\Magento \Bundle \Api \ProductLinkManagementInterface::class);
96
91
$ 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);
99
93
100
94
$ this ->model = new OptionRepository (
101
95
$ this ->productRepositoryMock ,
102
96
$ this ->typeMock ,
103
97
$ this ->optionFactoryMock ,
104
98
$ this ->optionResourceMock ,
105
- $ this ->storeManagerMock ,
106
99
$ this ->linkManagementMock ,
107
100
$ this ->optionListMock ,
108
- $ this ->linkListMock ,
109
- $ this ->dataObjectHelperMock
101
+ $ this ->dataObjectHelperMock ,
102
+ $ this ->optionSaveActionMock
110
103
);
111
- $ refClass = new \ReflectionClass (OptionRepository::class);
112
- $ refProperty = $ refClass ->getProperty ('metadataPool ' );
113
- $ refProperty ->setAccessible (true );
114
- $ refProperty ->setValue ($ this ->model , $ this ->metadataPoolMock );
115
104
}
116
105
117
106
/**
@@ -174,7 +163,7 @@ public function testGet()
174
163
$ productMock ->expects ($ this ->once ())
175
164
->method ('getTypeId ' )
176
165
->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 );
178
167
179
168
$ this ->productRepositoryMock ->expects ($ this ->once ())
180
169
->method ('get ' )
@@ -194,7 +183,6 @@ public function testGet()
194
183
$ optionMock ->expects ($ this ->once ())->method ('getData ' )->willReturn ($ optionData );
195
184
196
185
$ linkMock = ['item ' ];
197
- $ this ->linkListMock ->expects ($ this ->once ())->method ('getItems ' )->with ($ productMock , 100 )->willReturn ($ linkMock );
198
186
199
187
$ newOptionMock = $ this ->createMock (\Magento \Bundle \Api \Data \OptionInterface::class);
200
188
$ this ->dataObjectHelperMock ->expects ($ this ->once ())
@@ -207,10 +195,10 @@ public function testGet()
207
195
->with ($ optionData ['title ' ])
208
196
->willReturnSelf ();
209
197
$ 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 );
214
202
215
203
$ this ->optionFactoryMock ->expects ($ this ->once ())->method ('create ' )->willReturn ($ newOptionMock );
216
204
@@ -272,172 +260,67 @@ public function testDeleteById()
272
260
*/
273
261
public function testSaveExistingOption ()
274
262
{
275
- $ productId = 1 ;
276
-
277
- $ storeId = 2 ;
278
263
$ optionId = 5 ;
279
- $ existingLinkToUpdateId = '23 ' ;
264
+
265
+ $ productSku = 'sku ' ;
280
266
281
267
$ 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 );
292
269
293
270
$ optionMock = $ this ->createPartialMock (
294
271
\Magento \Bundle \Model \Option::class,
295
272
['setStoreId ' , 'setParentId ' , 'getProductLinks ' , 'getOptionId ' , 'getResource ' ]
296
273
);
297
- $ optionCollectionMock ->expects ($ this ->once ())->method ('getFirstItem ' )->willReturn ($ optionMock );
298
274
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 );
305
275
$ optionMock ->expects ($ this ->atLeastOnce ())->method ('getOptionId ' )->willReturn ($ optionId );
306
276
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 );
314
285
315
- $ this ->linkManagementMock ->expects ($ this ->exactly (2 ))
316
- ->method ('addChild ' )
286
+ $ this ->productRepositoryMock
287
+ ->expects ($ this ->once ())
288
+ ->method ('save ' )
317
289
->with ($ productMock );
290
+
318
291
$ this ->assertEquals ($ optionId , $ this ->model ->save ($ productMock , $ optionMock ));
319
292
}
320
293
321
294
public function testSaveNewOption ()
322
295
{
323
- $ productId = 1 ;
324
- $ productSku = 'bundle_sku ' ;
325
- $ storeId = 2 ;
326
296
$ optionId = 5 ;
327
297
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 ' ;
332
299
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 );
341
302
342
303
$ optionMock = $ this ->createPartialMock (
343
304
\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 ' ]
358
306
);
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
- }
382
307
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 );
393
309
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 );
398
312
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 );
407
318
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 ));
441
324
}
442
325
443
326
public function testGetList ()
0 commit comments