diff --git a/app/code/Magento/CatalogInventory/Model/Quote/Item/QuantityValidator/QuoteItemQtyList.php b/app/code/Magento/CatalogInventory/Model/Quote/Item/QuantityValidator/QuoteItemQtyList.php index c0b60c9935d71..600bf9897a036 100644 --- a/app/code/Magento/CatalogInventory/Model/Quote/Item/QuantityValidator/QuoteItemQtyList.php +++ b/app/code/Magento/CatalogInventory/Model/Quote/Item/QuantityValidator/QuoteItemQtyList.php @@ -5,6 +5,9 @@ */ namespace Magento\CatalogInventory\Model\Quote\Item\QuantityValidator; +/** + * Class QuoteItemQtyList collects qty of quote items + */ class QuoteItemQtyList { /** @@ -17,6 +20,7 @@ class QuoteItemQtyList /** * Get product qty includes information from all quote items + * * Need be used only in singleton mode * * @param int $productId @@ -29,9 +33,7 @@ class QuoteItemQtyList public function getQty($productId, $quoteItemId, $quoteId, $itemQty) { $qty = $itemQty; - if (isset( - $this->_checkedQuoteItems[$quoteId][$productId]['qty'] - ) && !in_array( + if (isset($this->_checkedQuoteItems[$quoteId][$productId]['qty']) && !in_array( $quoteItemId, $this->_checkedQuoteItems[$quoteId][$productId]['items'] ) @@ -39,8 +41,10 @@ public function getQty($productId, $quoteItemId, $quoteId, $itemQty) $qty += $this->_checkedQuoteItems[$quoteId][$productId]['qty']; } - $this->_checkedQuoteItems[$quoteId][$productId]['qty'] = $qty; - $this->_checkedQuoteItems[$quoteId][$productId]['items'][] = $quoteItemId; + if ($quoteItemId !== null) { + $this->_checkedQuoteItems[$quoteId][$productId]['qty'] = $qty; + $this->_checkedQuoteItems[$quoteId][$productId]['items'][] = $quoteItemId; + } return $qty; } diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Quote/Item/QuantityValidator/QuoteItemQtyListTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Quote/Item/QuantityValidator/QuoteItemQtyListTest.php new file mode 100644 index 0000000000000..5966b530f72e1 --- /dev/null +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Quote/Item/QuantityValidator/QuoteItemQtyListTest.php @@ -0,0 +1,68 @@ +quoteItemQtyList = $objectManagerHelper->getObject(QuoteItemQtyList::class); + } + + /** + * This tests the scenario when item has not quote_item_id and after save gets a value. + * + * @return void + */ + public function testSingleQuoteItemQty() + { + $this->itemQtyTestValue = 1; + $qty = $this->quoteItemQtyList->getQty(125, null, 11232, 1); + $this->assertEquals($this->itemQtyTestValue, $qty); + + $qty = $this->quoteItemQtyList->getQty(125, 1, 11232, 1); + $this->assertEquals($this->itemQtyTestValue, $qty); + } + + /** + * This tests the scenario when item has been added twice to the cart. + * + * @return void + */ + public function testMultipleQuoteItemQty() + { + $this->itemQtyTestValue = 1; + $qty = $this->quoteItemQtyList->getQty(127, 1, 112, 1); + $this->assertEquals($this->itemQtyTestValue, $qty); + + $this->itemQtyTestValue = 2; + $qty = $this->quoteItemQtyList->getQty(127, 2, 112, 1); + $this->assertEquals($this->itemQtyTestValue, $qty); + } +}