Skip to content

Commit 2f6dab7

Browse files
author
Yurii Hryhoriev
committed
MAGETWO-47698: [Github] Custom options not displayed correctly on a store view level #2908 #5885
1 parent e2dc5d8 commit 2f6dab7

File tree

3 files changed

+128
-3
lines changed

3 files changed

+128
-3
lines changed

app/code/Magento/Catalog/Model/Product/Option/SaveHandler.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ class SaveHandler implements ExtensionInterface
2020

2121
/**
2222
* @param OptionRepository $optionRepository
23-
* @param MetadataPool $metadataPool
2423
*/
2524
public function __construct(
2625
OptionRepository $optionRepository
@@ -43,7 +42,7 @@ public function execute($entity, $arguments = [])
4342
$optionIds = array_map(function ($option) {
4443
/** @var \Magento\Catalog\Model\Product\Option $option */
4544
return $option->getOptionId();
46-
}, $entity->getOptions());
45+
}, $options);
4746
}
4847

4948
/** @var \Magento\Catalog\Api\Data\ProductInterface $entity */

app/code/Magento/Catalog/Test/Unit/Model/Product/Option/RepositoryTest.php

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Magento\Catalog\Test\Unit\Model\Product\Option;
99

1010
use \Magento\Catalog\Model\Product\Option\Repository;
11+
use Magento\Catalog\Api\Data\ProductCustomOptionInterface;
1112

1213
/**
1314
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -30,7 +31,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
3031
protected $optionResourceMock;
3132

3233
/**
33-
* @var \PHPUnit_Framework_MockObject_MockObject
34+
* @var ProductCustomOptionInterface|\PHPUnit_Framework_MockObject_MockObject
3435
*/
3536
protected $optionMock;
3637

@@ -240,4 +241,57 @@ private function setProperties($object, $properties = [])
240241
}
241242
}
242243
}
244+
245+
/**
246+
* @expectedException \Magento\Framework\Exception\CouldNotSaveException
247+
* @expectedExceptionMessage ProductSku should be specified
248+
*/
249+
public function testSaveCouldNotSaveException()
250+
{
251+
$this->optionMock->expects($this->once())->method('getProductSku')->willReturn(null);
252+
$this->optionRepository->save($this->optionMock);
253+
}
254+
255+
/**
256+
* @expectedException \Magento\Framework\Exception\NoSuchEntityException
257+
*/
258+
public function testSaveNoSuchEntityException()
259+
{
260+
$productSku = 'simple_product';
261+
$optionId = 1;
262+
$this->optionMock->expects($this->once())->method('getProductSku')->willReturn($productSku);
263+
$this->productRepositoryMock
264+
->expects($this->once())
265+
->method('get')
266+
->with($productSku)
267+
->willReturn($this->productMock);
268+
$this->optionMock->expects($this->any())->method('getOptionId')->willReturn($optionId);
269+
$this->productMock->expects($this->once())->method('getOptionById')->with($optionId)->willReturn(null);
270+
$this->optionRepository->save($this->optionMock);
271+
}
272+
273+
public function testSave()
274+
{
275+
$productSku = 'simple_product';
276+
$optionId = 1;
277+
$this->optionMock->expects($this->once())->method('getProductSku')->willReturn($productSku);
278+
$this->productRepositoryMock
279+
->expects($this->once())
280+
->method('get')
281+
->with($productSku)
282+
->willReturn($this->productMock);
283+
$this->optionMock->expects($this->any())->method('getOptionId')->willReturn($optionId);
284+
$this->productMock
285+
->expects($this->once())
286+
->method('getOptionById')
287+
->with($optionId)
288+
->willReturn($this->optionMock);
289+
$this->optionMock->expects($this->once())->method('getData')->with('values')->willReturn([
290+
['option_type_id' => 3],
291+
['option_type_id' => 4],
292+
['option_type_id' => 5],
293+
]);
294+
$this->optionMock->expects($this->once())->method('getValues')->willReturn([]);
295+
$this->assertEquals($this->optionMock, $this->optionRepository->save($this->optionMock));
296+
}
243297
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Catalog\Test\Unit\Model\Product\Option;
8+
9+
use Magento\Catalog\Model\Product;
10+
use Magento\Catalog\Model\Product\Option;
11+
use \Magento\Catalog\Model\Product\Option\Repository;
12+
use \Magento\Catalog\Model\Product\Option\SaveHandler;
13+
14+
class SaveHandlerTest extends \PHPUnit_Framework_TestCase
15+
{
16+
/**
17+
* @var SaveHandler|\PHPUnit_Framework_MockObject_MockObject
18+
*/
19+
protected $model;
20+
21+
/**
22+
* @var Product|\PHPUnit_Framework_MockObject_MockObject
23+
*/
24+
protected $entity;
25+
26+
/**
27+
* @var Option|\PHPUnit_Framework_MockObject_MockObject
28+
*/
29+
protected $optionMock;
30+
31+
/**
32+
* @var Repository|\PHPUnit_Framework_MockObject_MockObject
33+
*/
34+
protected $optionRepository;
35+
36+
public function setUp()
37+
{
38+
$this->entity = $this->getMockBuilder(Product::class)
39+
->disableOriginalConstructor()
40+
->getMock();
41+
$this->optionMock = $this->getMockBuilder(Option::class)
42+
->disableOriginalConstructor()
43+
->getMock();
44+
$this->optionRepository = $this->getMockBuilder(Repository::class)
45+
->disableOriginalConstructor()
46+
->getMock();
47+
48+
$this->model = new SaveHandler($this->optionRepository);
49+
}
50+
51+
public function testExecute()
52+
{
53+
$this->optionMock->expects($this->any())->method('getOptionId')->willReturn(5);
54+
$this->entity->expects($this->once())->method('getOptions')->willReturn([$this->optionMock]);
55+
56+
$secondOptionMock = $this->getMockBuilder(Option::class)
57+
->disableOriginalConstructor()
58+
->getMock();
59+
$secondOptionMock->expects($this->once())->method('getOptionId')->willReturn(6);
60+
61+
$this->optionRepository
62+
->expects($this->once())
63+
->method('getProductOptions')
64+
->with($this->entity)
65+
->willReturn([$this->optionMock, $secondOptionMock]);
66+
67+
$this->optionRepository->expects($this->once())->method('delete');
68+
$this->optionRepository->expects($this->once())->method('save')->with($this->optionMock);
69+
70+
$this->assertEquals($this->entity, $this->model->execute($this->entity));
71+
}
72+
}

0 commit comments

Comments
 (0)