Skip to content

Commit 688c0f9

Browse files
author
Sergey Shvets
committed
Merge branch 'MAGETWO-57616' into chaika-pr1
2 parents d7d6be9 + 3406521 commit 688c0f9

File tree

4 files changed

+84
-2
lines changed

4 files changed

+84
-2
lines changed

app/code/Magento/Quote/Model/Quote.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2161,6 +2161,12 @@ public function reserveOrderId()
21612161
{
21622162
if (!$this->getReservedOrderId()) {
21632163
$this->setReservedOrderId($this->_getResource()->getReservedOrderId($this));
2164+
} else {
2165+
//checking if reserved order id was already used for some order
2166+
//if yes reserving new one if not using old one
2167+
if ($this->_getResource()->isOrderIncrementIdUsed($this->getReservedOrderId())) {
2168+
$this->setReservedOrderId($this->_getResource()->getReservedOrderId($this));
2169+
}
21642170
}
21652171
return $this;
21662172
}

app/code/Magento/Quote/Model/ResourceModel/Quote.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,25 @@ public function getReservedOrderId($quote)
172172
->getNextValue();
173173
}
174174

175+
/**
176+
* Check is order increment id use in sales/order table
177+
*
178+
* @param int $orderIncrementId
179+
* @return bool
180+
*/
181+
public function isOrderIncrementIdUsed($orderIncrementId)
182+
{
183+
/** @var \Magento\Framework\DB\Adapter\AdapterInterface $adapter */
184+
$adapter = $this->getConnection();
185+
$bind = [':increment_id' => $orderIncrementId];
186+
/** @var \Magento\Framework\DB\Select $select */
187+
$select = $adapter->select()
188+
->from($this->getTable('sales_order'), 'entity_id')
189+
->where('increment_id = :increment_id');
190+
$entity_id = $adapter->fetchOne($select, $bind);
191+
return ($entity_id > 0);
192+
}
193+
175194
/**
176195
* Mark quotes - that depend on catalog price rules - to be recollected on demand
177196
*

app/code/Magento/Quote/Test/Unit/Model/QuoteTest.php

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,10 @@ protected function setUp()
307307
'customerRepository' => $this->customerRepositoryMock,
308308
'objectCopyService' => $this->objectCopyServiceMock,
309309
'extensionAttributesJoinProcessor' => $this->extensionAttributesJoinProcessorMock,
310-
'customerDataFactory' => $this->customerDataFactoryMock
310+
'customerDataFactory' => $this->customerDataFactoryMock,
311+
'data' => [
312+
'reserved_order_id' => 1000001
313+
]
311314
]
312315
);
313316
}
@@ -1233,4 +1236,39 @@ public function testGetAllItems()
12331236

12341237
$this->assertEquals($itemResult, $this->quote->getAllItems());
12351238
}
1239+
1240+
/**
1241+
* Test to verify if existing reserved_order_id in use
1242+
*
1243+
* @param bool $isReservedOrderIdExist
1244+
* @param int $reservedOrderId
1245+
* @dataProvider reservedOrderIdDataProvider
1246+
*/
1247+
public function testReserveOrderId($isReservedOrderIdExist, $reservedOrderId)
1248+
{
1249+
$this->resourceMock
1250+
->expects($this->once())
1251+
->method('isOrderIncrementIdUsed')
1252+
->with(1000001)
1253+
->willReturn($isReservedOrderIdExist);
1254+
$this->resourceMock
1255+
->expects($this->any())
1256+
->method('getReservedOrderId')
1257+
->willReturn($reservedOrderId);
1258+
$this->quote->reserveOrderId();
1259+
$this->assertEquals($reservedOrderId, $this->quote->getReservedOrderId());
1260+
}
1261+
1262+
/**
1263+
* DataProvider for reservedId test
1264+
*
1265+
* @return array
1266+
*/
1267+
public function reservedOrderIdDataProvider()
1268+
{
1269+
return [
1270+
'id_already_in_use' => [true, 100002],
1271+
'id_not_in_use' => [false, 1000001]
1272+
];
1273+
}
12361274
}

dev/tests/integration/testsuite/Magento/Quote/Model/QuoteTest.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ protected function _getCustomerDataArray()
432432
\Magento\Customer\Model\Data\Customer::WEBSITE_ID => 1
433433
];
434434
}
435-
435+
436436
/**
437437
* Test to verify that disabled product cannot be added to cart.
438438
*
@@ -457,4 +457,23 @@ public function testAddedProductToQuoteIsSalable()
457457
$quote = $objectManager->create(\Magento\Quote\Model\Quote::class);
458458
$quote->addProduct($product);
459459
}
460+
461+
/**
462+
* Test to verify that reserved_order_id will be changed if it already in used
463+
*
464+
* @magentoDataFixture Magento/Sales/_files/order.php
465+
* @magentoDataFixture Magento/Quote/_files/empty_quote.php
466+
*/
467+
public function testReserveOrderId()
468+
{
469+
$objectManager = Bootstrap::getObjectManager();
470+
/** @var \Magento\Quote\Model\Quote $quote */
471+
$quote = $objectManager->create(Quote::class);
472+
$quote->load('reserved_order_id', 'reserved_order_id');
473+
$quote->reserveOrderId();
474+
$this->assertEquals('reserved_order_id', $quote->getReservedOrderId());
475+
$quote->setReservedOrderId('100000001');
476+
$quote->reserveOrderId();
477+
$this->assertNotEquals('100000001', $quote->getReservedOrderId());
478+
}
460479
}

0 commit comments

Comments
 (0)