Skip to content

Commit a6177a2

Browse files
committed
MAGETWO-96746: Invalid quote in session
1 parent 407a8d1 commit a6177a2

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

app/code/Magento/Checkout/Model/Session.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,14 @@ public function getQuote()
218218
$quote = $this->quoteRepository->getActive($this->getQuoteId());
219219
}
220220

221+
$customerId = $this->_customer
222+
? $this->_customer->getId()
223+
: $this->_customerSession->getCustomerId();
224+
if ($quote->getData('customer_id') && $quote->getData('customer_id') !== $customerId) {
225+
$quote = $this->quoteFactory->create();
226+
throw new \Magento\Framework\Exception\NoSuchEntityException();
227+
}
228+
221229
/**
222230
* If current currency code of quote is not equal current currency code of store,
223231
* need recalculate totals of quote. It is possible if customer use currency switcher or

dev/tests/integration/testsuite/Magento/Checkout/Model/SessionTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Checkout\Model;
77

88
use Magento\TestFramework\Helper\Bootstrap;
9+
use Magento\Quote\Model\Quote;
910

1011
class SessionTest extends \PHPUnit_Framework_TestCase
1112
{
@@ -65,6 +66,24 @@ public function testGetQuoteNotInitializedCustomerLoggedIn()
6566
$this->_validateCustomerDataInQuote($quote);
6667
}
6768

69+
/**
70+
* @magentoDataFixture Magento/Sales/_files/quote_with_customer.php
71+
* @magentoAppIsolation enabled
72+
*/
73+
public function testGetQuoteWithMismatchingSession()
74+
{
75+
/** @var Quote $quote */
76+
$quote = Bootstrap::getObjectManager()->create(Quote::class);
77+
/** @var \Magento\Quote\Model\ResourceModel\Quote $quoteResource */
78+
$quoteResource = Bootstrap::getObjectManager()->create(\Magento\Quote\Model\ResourceModel\Quote::class);
79+
$quoteResource->load($quote, 'test01', 'reserved_order_id');
80+
// Customer on quote is not logged in
81+
$this->_checkoutSession->setQuoteId($quote->getId());
82+
$sessionQuote = $this->_checkoutSession->getQuote();
83+
$this->assertEmpty($sessionQuote->getCustomerId());
84+
$this->assertNotEquals($quote->getId(), $sessionQuote->getId());
85+
}
86+
6887
/**
6988
* Tes merging of customer data into initialized quote object.
7089
*

0 commit comments

Comments
 (0)