Skip to content

Commit 3ed7508

Browse files
author
Eric Bohanon
committed
MAGETWO-90182: Fix unit tests
1 parent 4e38140 commit 3ed7508

File tree

1 file changed

+43
-160
lines changed

1 file changed

+43
-160
lines changed

app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php

Lines changed: 43 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@
1414
*/
1515
class 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

Comments
 (0)