Skip to content

Commit 0807920

Browse files
committed
MAGETWO-52098: Exception if add configurable product with out of stock items to shopping cart
1 parent 738376a commit 0807920

File tree

3 files changed

+5
-33
lines changed

3 files changed

+5
-33
lines changed

app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ public function getUsedProducts($product, $requiredAttributeIds = null)
512512
if (!$product->hasData($this->_usedProducts)) {
513513
$usedProducts = [];
514514
$collection = $this->getUsedProductCollection($product)
515+
->setFlag('has_stock_status_filter', true)
515516
->addAttributeToSelect('name')
516517
->addAttributeToSelect('price')
517518
->addAttributeToSelect('weight')

app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,7 @@ public function __construct(
4444
public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
4545
{
4646
$price = null;
47-
$configurableProducts = $this->configurable->getUsedProductCollection($product)
48-
->setFlag('has_stock_status_filter', true)
49-
->addAttributeToSelect('price');
50-
51-
foreach ($configurableProducts as $subProduct) {
47+
foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
5248
$productPrice = $this->priceResolver->resolvePrice($subProduct);
5349
$price = $price ? min($price, $productPrice) : $productPrice;
5450
}

app/code/Magento/ConfigurableProduct/Test/Unit/Pricing/Price/ConfigurablePriceResolverTest.php

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ConfigurablePriceResolverTest extends \PHPUnit_Framework_TestCase
2727
protected function setUp()
2828
{
2929
$className = 'Magento\ConfigurableProduct\Model\Product\Type\Configurable';
30-
$this->configurable = $this->getMock($className, ['getUsedProductCollection'], [], '', false);
30+
$this->configurable = $this->getMock($className, ['getUsedProducts'], [], '', false);
3131

3232
$className = 'Magento\ConfigurableProduct\Pricing\Price\PriceResolverInterface';
3333
$this->priceResolver = $this->getMockForAbstractClass($className, [], '', false, true, true, ['resolvePrice']);
@@ -59,9 +59,8 @@ public function testResolvePriceWithNoPrices()
5959
['getSku']
6060
);
6161
$product->expects($this->once())->method('getSku')->willReturn('Kiwi');
62-
$productCollection = $this->getProductCollection([]);
6362

64-
$this->configurable->expects($this->once())->method('getUsedProductCollection')->willReturn($productCollection);
63+
$this->configurable->expects($this->once())->method('getUsedProducts')->willReturn([]);
6564

6665
$this->resolver->resolvePrice($product);
6766
}
@@ -86,36 +85,12 @@ public function testResolvePrice($expectedValue)
8685
);
8786
$product->expects($this->never())->method('getSku');
8887

89-
$productCollection = $this->getProductCollection([$product]);
90-
$this->configurable->expects($this->once())->method('getUsedProductCollection')->willReturn($productCollection);
88+
$this->configurable->expects($this->once())->method('getUsedProducts')->willReturn([$product]);
9189
$this->priceResolver->expects($this->atLeastOnce())->method('resolvePrice')->willReturn($price);
9290

9391
$this->assertEquals($expectedValue, $this->resolver->resolvePrice($product));
9492
}
9593

96-
/**
97-
* @param array $products
98-
* @return \PHPUnit_Framework_MockObject_MockObject
99-
*/
100-
protected function getProductCollection($products)
101-
{
102-
$productCollection = $this->getMockBuilder(
103-
'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection'
104-
)->setMethods(
105-
[
106-
'setFlag',
107-
'addAttributeToSelect',
108-
'getIterator',
109-
]
110-
)->disableOriginalConstructor()
111-
->getMock();
112-
$productCollection->expects($this->once())->method('addAttributeToSelect')->willReturnSelf();
113-
$productCollection->expects($this->once())->method('setFlag')->willReturnSelf();
114-
$productCollection->expects($this->once())->method('getIterator')->willReturn(new \ArrayIterator($products));
115-
116-
return $productCollection;
117-
}
118-
11994
/**
12095
* @return array
12196
*/

0 commit comments

Comments
 (0)