Skip to content

Commit

Permalink
issue-magento#25675 Added fix for magento#25675 issue to the 2.4 Mage…
Browse files Browse the repository at this point in the history
…nto version
  • Loading branch information
molneek committed Feb 2, 2020
1 parent 90a479f commit e088db1
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
*/
namespace Magento\CatalogInventory\Model\Quote\Item\QuantityValidator;

/**
* Class QuoteItemQtyList collects qty of quote items
*/
class QuoteItemQtyList
{
/**
Expand All @@ -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
Expand All @@ -29,18 +33,18 @@ 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']
)
) {
$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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\CatalogInventory\Test\Unit\Model\Quote\Item\QuantityValidator;

use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use PHPUnit\Framework\TestCase;
use Magento\CatalogInventory\Model\Quote\Item\QuantityValidator\QuoteItemQtyList;

/**
* Class QuoteItemQtyListTest
*/
class QuoteItemQtyListTest extends TestCase
{
/**
* @var QuoteItemQtyList
*/
private $quoteItemQtyList;

/**
* @var int
*/
private $itemQtyTestValue;

/**
* Sets up the fixture, for example, open a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$objectManagerHelper = new ObjectManager($this);
$this->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);
}
}

0 comments on commit e088db1

Please sign in to comment.