diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php index 36981aafc34e2..fa677b0b8b421 100644 --- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php @@ -592,7 +592,7 @@ protected function getGalleryReadHandler() * @param \Magento\Catalog\Model\Product $product * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection */ - public function getLinkedProductCollection($product) + protected function getLinkedProductCollection($product) { $collection = $this->_productCollectionFactory->create()->setFlag( 'product_children', @@ -767,8 +767,9 @@ public function isSalable($product) $storeId = $storeId->getId(); } - if (isset($this->isSaleableBySku[$storeId][$product->getSku()])) { - return $this->isSaleableBySku[$storeId][$product->getSku()]; + $sku = $product->getSku(); + if (isset($this->isSaleableBySku[$storeId][$sku])) { + return $this->isSaleableBySku[$storeId][$sku]; } $salable = parent::isSalable($product); @@ -780,7 +781,7 @@ public function isSalable($product) $salable = 0 !== $collection->getSize(); } - $this->isSaleableBySku[$storeId][$product->getSku()] = $salable; + $this->isSaleableBySku[$storeId][$sku] = $salable; return $salable; } diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php index 165e479d99348..603b5b4c90f46 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php @@ -567,12 +567,18 @@ public function testHasOptionsFalse() public function testIsSalable() { $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) - ->setMethods(['__wakeup', 'getStatus', 'hasData', 'getData', 'getStoreId', 'setData']) + ->setMethods(['__wakeup', 'getStatus', 'hasData', 'getData', 'getStoreId', 'setData', 'getSku']) ->disableOriginalConstructor() ->getMock(); + $productMock + ->expects($this->at(0)) + ->method('getData') + ->with('_cache_instance_store_filter') + ->willReturn(0); $productMock->expects($this->once())->method('getStatus')->willReturn(1); $productMock->expects($this->any())->method('hasData')->willReturn(true); - $productMock->expects($this->at(2))->method('getData')->with('is_salable')->willReturn(true); + $productMock->expects($this->at(1))->method('getSku')->willReturn('SKU-CODE'); + $productMock->expects($this->at(4))->method('getData')->with('is_salable')->willReturn(true); $productCollection = $this->getMockBuilder( \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection::class )