Skip to content

Commit cf81282

Browse files
committed
MAGETWO-56947: [API] Can not link simple product to configurable one - mainline
1 parent 3ea348e commit cf81282

File tree

3 files changed

+26
-25
lines changed

3 files changed

+26
-25
lines changed

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

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* @method Product setHasError(bool $value)
2323
* @method \Magento\Catalog\Model\ResourceModel\Product getResource()
2424
* @method null|bool getHasError()
25+
* @method Product setAssociatedProductIds(array $productIds)
2526
* @method array getAssociatedProductIds()
2627
* @method Product setNewVariationsAttributeSetId(int $value)
2728
* @method int getNewVariationsAttributeSetId()
@@ -1908,12 +1909,10 @@ public function addOption(Product\Option $option)
19081909
*/
19091910
public function getOptionById($optionId)
19101911
{
1911-
if (is_array($this->getOptions())) {
1912-
/** @var \Magento\Catalog\Model\Product\Option $option */
1913-
foreach ($this->getOptions() as $option) {
1914-
if ($option->getId() == $optionId) {
1915-
return $option;
1916-
}
1912+
/** @var \Magento\Catalog\Model\Product\Option $option */
1913+
foreach ($this->getOptions() as $option) {
1914+
if ($option->getId() == $optionId) {
1915+
return $option;
19171916
}
19181917
}
19191918

@@ -2273,7 +2272,7 @@ public function getIdentities()
22732272
$identities[] = self::CACHE_PRODUCT_CATEGORY_TAG . '_' . $categoryId;
22742273
}
22752274
}
2276-
2275+
22772276
if (($this->getOrigData('status') != $this->getData('status')) || $this->isStockStatusChanged()) {
22782277
foreach ($this->getCategoryIds() as $categoryId) {
22792278
$identities[] = self::CACHE_PRODUCT_CATEGORY_TAG . '_' . $categoryId;
@@ -2288,7 +2287,7 @@ public function getIdentities()
22882287

22892288
/**
22902289
* Check whether stock status changed
2291-
*
2290+
*
22922291
* @return bool
22932292
*/
22942293
private function isStockStatusChanged()
@@ -2306,7 +2305,7 @@ private function isStockStatusChanged()
23062305
&& ($stockItem->getIsInStock() != $stockData['is_in_stock'])
23072306
);
23082307
}
2309-
2308+
23102309
/**
23112310
* Reload PriceInfo object
23122311
*
@@ -2613,14 +2612,4 @@ private function getMediaGalleryProcessor()
26132612
}
26142613
return $this->mediaGalleryProcessor;
26152614
}
2616-
2617-
/**
2618-
* Set the associated products
2619-
* @param array $productIds
2620-
* @return void
2621-
*/
2622-
public function setAssociatedProductIds(array $productIds)
2623-
{
2624-
$this->getExtensionAttributes()->setConfigurableProductLinks($productIds);
2625-
}
26262615
}

app/code/Magento/ConfigurableProduct/Model/LinkManagement.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public function addChild($sku, $childSku)
103103
}
104104

105105
$childrenIds[] = $child->getId();
106-
$product->setAssociatedProductIds($childrenIds);
106+
$product->getExtensionAttributes()->setConfigurableProductLinks($childrenIds);
107107
$product->save();
108108
return true;
109109
}
@@ -132,7 +132,7 @@ public function removeChild($sku, $childSku)
132132
if (count($options) == count($ids)) {
133133
throw new NoSuchEntityException(__('Requested option doesn\'t exist'));
134134
}
135-
$product->setAssociatedProductIds($ids);
135+
$product->getExtensionAttributes()->setConfigurableProductLinks($ids);
136136
$product->save();
137137
return true;
138138
}

app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace Magento\ConfigurableProduct\Test\Unit\Model;
88

99
use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
10+
use Magento\ConfigurableProduct\Test\Unit\Model\Product\ProductExtensionAttributes;
1011

1112
/**
1213
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -162,6 +163,15 @@ public function testAddChild()
162163
->will(
163164
$this->returnValue([0 => [1, 2, 3]])
164165
);
166+
167+
$extensionAttributes = $this->getMockBuilder(ProductExtensionAttributes::class)
168+
->setMethods(['setConfigurableProductLinks'])
169+
->disableOriginalConstructor()
170+
->getMockForAbstractClass();
171+
172+
$configurable->expects($this->once())->method('getExtensionAttributes')->willReturn($extensionAttributes);
173+
$extensionAttributes->expects($this->once())->method('setConfigurableProductLinks')->willReturnSelf();
174+
165175
$configurable->expects($this->once())->method('save');
166176

167177
$this->assertTrue(true, $this->object->addChild($productSku, $childSku));
@@ -233,12 +243,14 @@ public function testRemoveChild()
233243
$productType->expects($this->once())->method('getUsedProducts')
234244
->will($this->returnValue([$option]));
235245

236-
$extensionAttributesMock = $this->getMockBuilder(\Magento\Framework\Api\ExtensionAttributesInterface::class)
237-
->disableOriginalConstructor()
246+
$extensionAttributes = $this->getMockBuilder(ProductExtensionAttributes::class)
238247
->setMethods(['setConfigurableProductLinks'])
239-
->getMock();
248+
->disableOriginalConstructor()
249+
->getMockForAbstractClass();
250+
251+
$product->expects($this->once())->method('getExtensionAttributes')->willReturn($extensionAttributes);
252+
$extensionAttributes->expects($this->once())->method('setConfigurableProductLinks')->willReturnSelf();
240253

241-
$product->expects($this->once())->method('getExtensionAttributes')->willReturn($extensionAttributesMock);
242254
$product->expects($this->once())->method('save');
243255
$this->assertTrue($this->object->removeChild($productSku, $childSku));
244256
}

0 commit comments

Comments
 (0)