Skip to content

Commit 22085d3

Browse files
committed
AC-2518: salesrule percentage amount bug
- add integration test
1 parent b413eb5 commit 22085d3

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

app/code/Magento/SalesRule/Model/Utility.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,6 @@ public function deltaRoundingFix(
189189
$rowTotalInclTax = $item->getRowTotalInclTax();
190190
$baseRowTotalInclTax = $item->getBaseRowTotalInclTax();
191191

192-
//TODO Seems \Magento\Quote\Model\Quote\Item\AbstractItem::getDiscountPercent() returns float value
193-
//that can not be used as array index
194192
$percentKey = (string)$item->getDiscountPercent();
195193
$rowTotal = $item->getRowTotal();
196194
if ($percentKey && $rowTotal > 0) {

dev/tests/integration/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/CartFixedTest.php

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -498,31 +498,56 @@ public function multishippingDataProvider(): array
498498
* @magentoDataFixture Magento/SalesRule/_files/cart_rule_50_percent_off_no_condition.php
499499
* @magentoDataFixture Magento/SalesRule/_files/cart_fixed_10_discount.php
500500
* @magentoDataFixture Magento/Checkout/_files/quote_with_simple_products.php
501+
* @dataProvider discountByPercentDataProvider
501502
* @return void
502503
*/
503-
public function testDiscountsWhenByPercentRuleAppliedFirstAndCartFixedRuleSecond(): void
504-
{
505-
$totalDiscount = -20.99;
506-
$discounts = [
507-
'simple1' => 5.72,
508-
'simple2' => 15.27,
509-
];
504+
public function testDiscountsWhenByPercentRuleAppliedFirstAndCartFixedRuleSecond(
505+
$percentDiscount,
506+
$expectedDiscounts
507+
): void {
508+
//Update rule discount
509+
/** @var \Magento\SalesRule\Model\Rule $rule */
510+
$rule = $this->getRule('50% off - July 4');
511+
$rule->setDiscountAmount($percentDiscount);
512+
$this->saveRule($rule);
510513
$quote = $this->getQuote('test_quote_with_simple_products');
511514
$quote->setCouponCode('2?ds5!2d');
512515
$quote->collectTotals();
513516
$this->quoteRepository->save($quote);
514517
$this->assertEquals(21.98, $quote->getBaseSubtotal());
515-
$this->assertEquals($totalDiscount, $quote->getShippingAddress()->getDiscountAmount());
518+
$this->assertEquals($expectedDiscounts['totalDiscount'], $quote->getShippingAddress()->getDiscountAmount());
516519
$items = $quote->getAllItems();
517520
$this->assertCount(2, $items);
518521
$item = array_shift($items);
519522
$this->assertEquals('simple1', $item->getSku());
520523
$this->assertEquals(5.99, $item->getPrice());
521-
$this->assertEquals($discounts[$item->getSku()], $item->getDiscountAmount());
524+
$this->assertEquals($expectedDiscounts[$item->getSku()], $item->getDiscountAmount());
522525
$item = array_shift($items);
523526
$this->assertEquals('simple2', $item->getSku());
524527
$this->assertEquals(15.99, $item->getPrice());
525-
$this->assertEquals($discounts[$item->getSku()], $item->getDiscountAmount());
528+
$this->assertEquals($expectedDiscounts[$item->getSku()], $item->getDiscountAmount());
529+
}
530+
531+
public function discountByPercentDataProvider()
532+
{
533+
return [
534+
[
535+
'percentDiscount' => 0,
536+
'expectedDiscounts' => ['simple1' => 2.73, 'simple2' => 7.27, 'totalDiscount' => -10]
537+
],
538+
[
539+
'percentDiscount' => 15.5,
540+
'expectedDiscounts' => ['simple1' => 3.65, 'simple2' => 9.76, 'totalDiscount' => -13.41]
541+
],
542+
[
543+
'percentDiscount' => 50,
544+
'expectedDiscounts' => ['simple1' => 5.72, 'simple2' => 15.27, 'totalDiscount' => -20.99]
545+
],
546+
[
547+
'percentDiscount' => 100,
548+
'expectedDiscounts' => ['simple1' => 5.99, 'simple2' => 15.99, 'totalDiscount' => -21.98]
549+
],
550+
];
526551
}
527552

528553
/**

0 commit comments

Comments
 (0)