Skip to content

Commit de4369f

Browse files
authored
Merge pull request #1542 from magento-honey-badgers/bugs
[Honey Badger] Bugfixes
2 parents 7ca7002 + 4215a8b commit de4369f

File tree

43 files changed

+805
-122
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+805
-122
lines changed

app/code/Magento/Catalog/Pricing/Price/TierPrice.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public function __construct(
8282
GroupManagementInterface $groupManagement,
8383
CustomerGroupRetrieverInterface $customerGroupRetriever = null
8484
) {
85-
$quantity = $quantity ?: 1;
85+
$quantity = floatval($quantity) ? $quantity : 1;
8686
parent::__construct($saleableItem, $quantity, $calculator, $priceCurrency);
8787
$this->customerSession = $customerSession;
8888
$this->groupManagement = $groupManagement;

app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,4 +390,38 @@ public function dataProviderGetSavePercent()
390390
['basePrice' => '20.80', 'tierPrice' => '18.72', 'savedPercent' => '10']
391391
];
392392
}
393+
394+
/**
395+
* @param null|string|float $quantity
396+
* @param float $expectedValue
397+
* @dataProvider getQuantityDataProvider
398+
*/
399+
public function testGetQuantity($quantity, $expectedValue)
400+
{
401+
$tierPrice = new TierPrice(
402+
$this->product,
403+
$quantity,
404+
$this->calculator,
405+
$this->priceCurrencyMock,
406+
$this->session,
407+
$this->groupManagement,
408+
$this->customerGroupRetriever
409+
);
410+
411+
$this->assertEquals($expectedValue, $tierPrice->getQuantity());
412+
}
413+
414+
public function getQuantityDataProvider()
415+
{
416+
return [
417+
[null, 1],
418+
['one', 1],
419+
['', 1],
420+
[4, 4],
421+
[4.5, 4.5],
422+
['0.7', 0.7],
423+
['0.0000000', 1]
424+
];
425+
426+
}
393427
}

app/code/Magento/Customer/Block/CustomerScopeData.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class CustomerScopeData extends \Magento\Framework\View\Element\Template
2929
* @param \Magento\Framework\View\Element\Template\Context $context
3030
* @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
3131
* @param array $data
32+
* @since 100.2.0
3233
*/
3334
public function __construct(
3435
\Magento\Framework\View\Element\Template\Context $context,

app/code/Magento/Customer/view/frontend/templates/js/customer-data/invalidation-rules.phtml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@
55
*/
66

77
// @codingStandardsIgnoreFile
8-
?>
9-
<?php
108
/* @var $block \Magento\Customer\Block\CustomerScopeData */
119
?>
1210
<script type="text/x-magento-init">
1311
<?php
1412
/* @noEscape */
15-
echo \Zend_Json::encode([
13+
echo \Magento\Framework\Serialize\JsonConverter::convert([
1614
'*' => ['Magento_Customer/js/invalidation-processor' => [
1715
'invalidationRules' => [
1816
'website-rule' => [

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Magento\Quote\Model\Quote\Address;
1515
use Magento\Quote\Model\Quote\Address\Total as AddressTotal;
1616
use Magento\Sales\Model\Status;
17+
use Magento\Framework\App\ObjectManager;
18+
use Magento\Sales\Model\OrderIncrementIdChecker;
1719

1820
/**
1921
* Quote model
@@ -353,6 +355,11 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
353355
*/
354356
protected $shippingAddressesItems;
355357

358+
/**
359+
* @var \Magento\Sales\Model\OrderIncrementIdChecker
360+
*/
361+
private $orderIncrementIdChecker;
362+
356363
/**
357364
* @param \Magento\Framework\Model\Context $context
358365
* @param \Magento\Framework\Registry $registry
@@ -394,6 +401,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
394401
* @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
395402
* @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
396403
* @param array $data
404+
* @param OrderIncrementIdChecker|null $orderIncrementIdChecker
397405
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
398406
*/
399407
public function __construct(
@@ -436,7 +444,8 @@ public function __construct(
436444
\Magento\Quote\Model\ShippingAssignmentFactory $shippingAssignmentFactory,
437445
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
438446
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
439-
array $data = []
447+
array $data = [],
448+
OrderIncrementIdChecker $orderIncrementIdChecker = null
440449
) {
441450
$this->quoteValidator = $quoteValidator;
442451
$this->_catalogProduct = $catalogProduct;
@@ -471,6 +480,8 @@ public function __construct(
471480
$this->totalsReader = $totalsReader;
472481
$this->shippingFactory = $shippingFactory;
473482
$this->shippingAssignmentFactory = $shippingAssignmentFactory;
483+
$this->orderIncrementIdChecker = $orderIncrementIdChecker ?: ObjectManager::getInstance()
484+
->get(OrderIncrementIdChecker::class);
474485
parent::__construct(
475486
$context,
476487
$registry,
@@ -2184,7 +2195,7 @@ public function reserveOrderId()
21842195
} else {
21852196
//checking if reserved order id was already used for some order
21862197
//if yes reserving new one if not using old one
2187-
if ($this->_getResource()->isOrderIncrementIdUsed($this->getReservedOrderId())) {
2198+
if ($this->orderIncrementIdChecker->isIncrementIdUsed($this->getReservedOrderId())) {
21882199
$this->setReservedOrderId($this->_getResource()->getReservedOrderId($this));
21892200
}
21902201
}

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

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

175-
/**
176-
* Check if order increment ID is already used.
177-
* Method can be used to avoid collisions of order IDs.
178-
*
179-
* @param int $orderIncrementId
180-
* @return bool
181-
*/
182-
public function isOrderIncrementIdUsed($orderIncrementId)
183-
{
184-
/** @var \Magento\Framework\DB\Adapter\AdapterInterface $adapter */
185-
$adapter = $this->getConnection();
186-
$bind = [':increment_id' => $orderIncrementId];
187-
/** @var \Magento\Framework\DB\Select $select */
188-
$select = $adapter->select();
189-
$select->from($this->getTable('sales_order'), 'entity_id')->where('increment_id = :increment_id');
190-
$entity_id = $adapter->fetchOne($select, $bind);
191-
if ($entity_id > 0) {
192-
return true;
193-
}
194-
195-
return false;
196-
}
197-
198175
/**
199176
* Mark quotes - that depend on catalog price rules - to be recollected on demand
200177
*

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ class QuoteTest extends \PHPUnit\Framework\TestCase
147147
*/
148148
private $itemProcessor;
149149

150+
/**
151+
* @var \PHPUnit_Framework_MockObject_MockObject
152+
*/
153+
private $orderIncrementIdChecker;
154+
150155
/**
151156
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
152157
*/
@@ -233,6 +238,9 @@ protected function setUp()
233238
->getMock();
234239
$this->extensionAttributesJoinProcessorMock = $this->createMock(\Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface::class);
235240
$this->customerDataFactoryMock = $this->createPartialMock(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class, ['create']);
241+
$this->orderIncrementIdChecker = $this->getMockBuilder(\Magento\Sales\Model\OrderIncrementIdChecker::class)
242+
->disableOriginalConstructor()
243+
->getMock();
236244
$this->quote = (new ObjectManager($this))
237245
->getObject(
238246
\Magento\Quote\Model\Quote::class,
@@ -257,6 +265,7 @@ protected function setUp()
257265
'extensionAttributesJoinProcessor' => $this->extensionAttributesJoinProcessorMock,
258266
'customerDataFactory' => $this->customerDataFactoryMock,
259267
'itemProcessor' => $this->itemProcessor,
268+
'orderIncrementIdChecker' => $this->orderIncrementIdChecker,
260269
'data' => [
261270
'reserved_order_id' => 1000001
262271
]
@@ -1186,9 +1195,9 @@ public function testGetAllItems()
11861195
*/
11871196
public function testReserveOrderId($isReservedOrderIdExist, $reservedOrderId)
11881197
{
1189-
$this->resourceMock
1198+
$this->orderIncrementIdChecker
11901199
->expects($this->once())
1191-
->method('isOrderIncrementIdUsed')
1200+
->method('isIncrementIdUsed')
11921201
->with(1000001)->willReturn($isReservedOrderIdExist);
11931202
$this->resourceMock->expects($this->any())->method('getReservedOrderId')->willReturn($reservedOrderId);
11941203
$this->quote->reserveOrderId();

app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,19 @@ public function addOrderedQty($from = '', $to = '')
6565

6666
$this->getSelect()->reset()->from(
6767
['order_items' => $this->getTable('sales_order_item')],
68-
['ordered_qty' => 'SUM(order_items.qty_ordered)', 'order_items_name' => 'order_items.name']
68+
[
69+
'ordered_qty' => 'order_items.qty_ordered',
70+
'order_items_name' => 'order_items.name',
71+
'order_items_sku' => 'order_items.sku'
72+
]
6973
)->joinInner(
7074
['order' => $this->getTable('sales_order')],
7175
implode(' AND ', $orderJoinCondition),
7276
[]
7377
)->where(
74-
'parent_item_id IS NULL'
75-
)->group(
76-
'order_items.product_id'
78+
'order_items.parent_item_id IS NULL'
7779
)->having(
78-
'SUM(order_items.qty_ordered) > ?',
80+
'order_items.qty_ordered > ?',
7981
0
8082
);
8183
return $this;

app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_sold_grid.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@
4141
<argument name="header_css_class" xsi:type="string">col-product</argument>
4242
</arguments>
4343
</block>
44+
<block class="Magento\Backend\Block\Widget\Grid\Column" as="sku">
45+
<arguments>
46+
<argument name="header" xsi:type="string" translate="true">SKU</argument>
47+
<argument name="type" xsi:type="string">text</argument>
48+
<argument name="index" xsi:type="string">order_items_sku</argument>
49+
<argument name="id" xsi:type="string">sku</argument>
50+
<argument name="column_css_class" xsi:type="string">col-sku</argument>
51+
<argument name="header_css_class" xsi:type="string">col-sku</argument>
52+
</arguments>
53+
</block>
4454
<block class="Magento\Backend\Block\Widget\Grid\Column" as="ordered_qty">
4555
<arguments>
4656
<argument name="header" xsi:type="string" translate="true">Ordered Quantity</argument>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Sales\Model;
8+
9+
/**
10+
* This class uses for checking if reserved order id was already used for some order
11+
*/
12+
class OrderIncrementIdChecker
13+
{
14+
/**
15+
* @var \Magento\Sales\Model\ResourceModel\Order
16+
*/
17+
private $resourceModel;
18+
19+
/**
20+
* OrderIncrementIdChecker constructor.
21+
* @param ResourceModel\Order $resourceModel
22+
*/
23+
public function __construct(ResourceModel\Order $resourceModel)
24+
{
25+
$this->resourceModel = $resourceModel;
26+
}
27+
28+
/**
29+
* Check if order increment ID is already used.
30+
*
31+
* Method can be used to avoid collisions of order IDs.
32+
*
33+
* @param int $orderIncrementId
34+
* @return bool
35+
*/
36+
public function isIncrementIdUsed($orderIncrementId)
37+
{
38+
/** @var \Magento\Framework\DB\Adapter\AdapterInterface $adapter */
39+
$adapter = $this->resourceModel->getConnection();
40+
$bind = [':increment_id' => $orderIncrementId];
41+
/** @var \Magento\Framework\DB\Select $select */
42+
$select = $adapter->select();
43+
$select->from($this->resourceModel->getMainTable(), 'entity_id')->where('increment_id = :increment_id');
44+
$entity_id = $adapter->fetchOne($select, $bind);
45+
if ($entity_id > 0) {
46+
return true;
47+
}
48+
49+
return false;
50+
}
51+
}

app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php renamed to app/code/Magento/Sales/Test/Unit/Model/OrderIncrementIdCheckerTest.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\Quote\Test\Unit\Model\ResourceModel;
7+
namespace Magento\Sales\Test\Unit\Model;
88

9-
class QuoteTest extends \PHPUnit\Framework\TestCase
9+
class OrderIncrementIdCheckerTest extends \PHPUnit\Framework\TestCase
1010
{
1111
/**
12-
* @var \Magento\Quote\Model\ResourceModel\Quote
12+
* @var \Magento\Sales\Model\OrderIncrementIdChecker
1313
*/
1414
private $model;
1515

@@ -42,7 +42,7 @@ protected function setUp()
4242
->getMock();
4343
$this->adapterMock->expects($this->any())->method('select')->will($this->returnValue($this->selectMock));
4444

45-
$this->resourceMock = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class)
45+
$this->resourceMock = $this->getMockBuilder(\Magento\Sales\Model\ResourceModel\Order::class)
4646
->disableOriginalConstructor()
4747
->getMock();
4848
$this->resourceMock->expects(
@@ -54,9 +54,9 @@ protected function setUp()
5454
);
5555

5656
$this->model = $objectManagerHelper->getObject(
57-
\Magento\Quote\Model\ResourceModel\Quote::class,
57+
\Magento\Sales\Model\OrderIncrementIdChecker::class,
5858
[
59-
'resource' => $this->resourceMock
59+
'resourceModel' => $this->resourceMock
6060
]
6161
);
6262
}
@@ -67,11 +67,11 @@ protected function setUp()
6767
* @param array $value
6868
* @dataProvider isOrderIncrementIdUsedDataProvider
6969
*/
70-
public function testIsOrderIncrementIdUsed($value)
70+
public function testIsIncrementIdUsed($value)
7171
{
7272
$expectedBind = [':increment_id' => $value];
7373
$this->adapterMock->expects($this->once())->method('fetchOne')->with($this->selectMock, $expectedBind);
74-
$this->model->isOrderIncrementIdUsed($value);
74+
$this->model->isIncrementIdUsed($value);
7575
}
7676

7777
/**

app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ class AjaxLoad extends \Magento\Tax\Controller\Adminhtml\Rate
1414
/**
1515
* Json needed for the Ajax Edit Form
1616
*
17-
* @return void
17+
* @return \Magento\Framework\Controller\Result\Json
18+
* @throws \InvalidArgumentException
1819
*/
1920
public function execute()
2021
{
@@ -23,13 +24,13 @@ public function execute()
2324
/* @var \Magento\Tax\Api\Data\TaxRateInterface */
2425
$taxRateDataObject = $this->_taxRateRepository->get($rateId);
2526
/* @var array */
26-
$resultArray= $this->_taxRateConverter->createArrayFromServiceObject($taxRateDataObject, true);
27+
$resultArray = $this->_taxRateConverter->createArrayFromServiceObject($taxRateDataObject, true);
2728

2829
$responseContent = [
2930
'success' => true,
3031
'error_message' => '',
31-
'result'=>$resultArray,
32-
];
32+
'result' => $resultArray,
33+
];
3334
} catch (NoSuchEntityException $e) {
3435
$responseContent = [
3536
'success' => false,

app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Rate
1414
* Save Tax Rate via AJAX
1515
*
1616
* @return \Magento\Framework\Controller\Result\Json
17+
* @throws \InvalidArgumentException
1718
*/
1819
public function execute()
1920
{

0 commit comments

Comments
 (0)