Skip to content

Commit 791c512

Browse files
author
Valeriy Nayda
committed
MAGETWO-62271: Inconsistent saving of Stock Data
1 parent a01ecf7 commit 791c512

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

app/code/Magento/Catalog/Model/Product/Copier.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,12 @@ public function copy(\Magento\Catalog\Model\Product $product)
6060
/** @var \Magento\Catalog\Model\Product $duplicate */
6161
$duplicate = $this->productFactory->create();
6262
$productData = $product->getData();
63-
unset($productData[ProductInterface::EXTENSION_ATTRIBUTES_KEY]);
63+
if (isset($productData[ProductInterface::EXTENSION_ATTRIBUTES_KEY])) {
64+
$extensionAttributes = $productData[ProductInterface::EXTENSION_ATTRIBUTES_KEY];
65+
if (null !== $extensionAttributes->getStockItem()) {
66+
$extensionAttributes->setData('stock_item', null);
67+
}
68+
}
6469
$duplicate->setData($productData);
6570
$duplicate->setOptions([]);
6671
$duplicate->setIsDuplicate(true);

app/code/Magento/Catalog/Test/Unit/Model/Product/CopierTest.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,23 @@ protected function setUp()
8181

8282
public function testCopy()
8383
{
84+
$stockItem = $this->getMockBuilder(\Magento\CatalogInventory\Api\Data\StockItemInterface::class)
85+
->getMock();
86+
$extensionAttributes = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductExtension::class)
87+
->setMethods(['getStockItem', 'setData'])
88+
->getMock();
89+
$extensionAttributes
90+
->expects($this->once())
91+
->method('getStockItem')
92+
->willReturn($stockItem);
93+
$extensionAttributes
94+
->expects($this->once())
95+
->method('setData')
96+
->with('stock_item', null);
97+
8498
$productData = [
8599
'product data' => ['product data'],
86-
ProductInterface::EXTENSION_ATTRIBUTES_KEY => [],
100+
ProductInterface::EXTENSION_ATTRIBUTES_KEY => $extensionAttributes,
87101
];
88102
$this->productMock->expects($this->atLeastOnce())->method('getWebsiteIds');
89103
$this->productMock->expects($this->atLeastOnce())->method('getCategoryIds');
@@ -140,7 +154,7 @@ public function testCopy()
140154
)->with(
141155
\Magento\Store\Model\Store::DEFAULT_STORE_ID
142156
);
143-
$duplicateMock->expects($this->once())->method('setData')->with(['product data' => ['product data']]);
157+
$duplicateMock->expects($this->once())->method('setData')->with($productData);
144158
$this->copyConstructorMock->expects($this->once())->method('build')->with($this->productMock, $duplicateMock);
145159
$duplicateMock->expects($this->once())->method('getUrlKey')->willReturn('urk-key-1');
146160
$duplicateMock->expects($this->once())->method('setUrlKey')->with('urk-key-2');

0 commit comments

Comments
 (0)