Skip to content

Commit c45c0e8

Browse files
committed
MC-19260: Coupon code removed during tax/shipping calculation on checkout
1 parent 10cfb26 commit c45c0e8

File tree

6 files changed

+123
-157
lines changed

6 files changed

+123
-157
lines changed

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

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111
use Magento\Catalog\Model\Product;
1212
use Magento\Catalog\Model\ProductRepository;
1313
use Magento\Framework\Api\SearchCriteriaBuilder;
14+
use Magento\Quote\Api\CartRepositoryInterface;
1415
use Magento\Quote\Api\Data\CartItemInterface;
1516
use Magento\Quote\Api\GuestCartItemRepositoryInterface;
1617
use Magento\Quote\Api\GuestCartManagementInterface;
1718
use Magento\Quote\Api\GuestCartTotalRepositoryInterface;
1819
use Magento\Quote\Api\GuestCouponManagementInterface;
20+
use Magento\Quote\Model\Quote;
21+
use Magento\Quote\Model\QuoteIdMask;
1922
use Magento\Sales\Api\Data\OrderInterface;
2023
use Magento\Sales\Api\OrderRepositoryInterface;
2124
use Magento\TestFramework\Helper\Bootstrap;
@@ -47,15 +50,28 @@ class CartFixedTest extends \PHPUnit\Framework\TestCase
4750
*/
4851
private $objectManager;
4952

53+
/**
54+
* @var SearchCriteriaBuilder
55+
*/
56+
private $criteriaBuilder;
57+
58+
/**
59+
* @var CartRepositoryInterface
60+
*/
61+
private $quoteRepository;
62+
5063
/**
5164
* @inheritdoc
5265
*/
5366
protected function setUp()
5467
{
55-
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
56-
$this->cartManagement = Bootstrap::getObjectManager()->create(GuestCartManagementInterface::class);
57-
$this->couponManagement = Bootstrap::getObjectManager()->create(GuestCouponManagementInterface::class);
58-
$this->cartItemRepository = Bootstrap::getObjectManager()->create(GuestCartItemRepositoryInterface::class);
68+
$objectManager = Bootstrap::getObjectManager();
69+
$this->cartManagement = $objectManager->create(GuestCartManagementInterface::class);
70+
$this->couponManagement = $objectManager->create(GuestCouponManagementInterface::class);
71+
$this->cartItemRepository = $objectManager->create(GuestCartItemRepositoryInterface::class);
72+
$this->criteriaBuilder = $objectManager->get(SearchCriteriaBuilder::class);
73+
$this->quoteRepository = $objectManager->get(CartRepositoryInterface::class);
74+
$this->objectManager = $objectManager;
5975
}
6076

6177
/**
@@ -64,6 +80,7 @@ protected function setUp()
6480
* @param array $productPrices
6581
* @return void
6682
* @magentoDbIsolation enabled
83+
* @magentoAppIsolation enabled
6784
* @magentoDataFixture Magento/SalesRule/_files/coupon_cart_fixed_discount.php
6885
* @dataProvider applyFixedDiscountDataProvider
6986
*/
@@ -96,25 +113,51 @@ public function testApplyFixedDiscount(array $productPrices): void
96113
/**
97114
* Applies fixed discount amount on whole cart and created order with it
98115
*
99-
* @return void
100-
* @magentoDataFixture Magento/SalesRule/_files/coupon_cart_fixed_discount_subtotal_with_discount.php
101-
* @magentoDataFixture Magento/SalesRule/_files/quote_with_coupon.php
102-
*
116+
* @magentoDbIsolation enabled
117+
* @magentoAppIsolation enabled
118+
* @magentoConfigFixture default_store carriers/freeshipping/active 1
119+
* @magentoDataFixture Magento/Sales/_files/quote.php
120+
* @magentoDataFixture Magento/SalesRule/_files/coupon_cart_fixed_subtotal_with_discount.php
103121
*/
104122
public function testOrderWithFixedDiscount(): void
105123
{
106-
/** @var $quote \Magento\Quote\Model\Quote */
107-
$quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
124+
$expectedGrandTotal = 5;
125+
126+
$quote = $this->getQuote();
127+
$quote->getShippingAddress()
128+
->setShippingMethod('freeshipping_freeshipping')
129+
->setCollectShippingRates(true);
130+
$quote->setCouponCode('CART_FIXED_DISCOUNT_15');
131+
$quote->collectTotals();
132+
$this->quoteRepository->save($quote);
133+
134+
$this->assertEquals($expectedGrandTotal, $quote->getGrandTotal());
135+
108136
/** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
109-
$quoteIdMask = $this->objectManager->create(\Magento\Quote\Model\QuoteIdMask::class);
110-
$quote->load('test01', 'reserved_order_id');
137+
$quoteIdMask = $this->objectManager->create(QuoteIdMask::class);
111138
$quoteIdMask->load($quote->getId(), 'quote_id');
112139
Bootstrap::getInstance()->reinitialize();
113-
114140
$cartManagement = Bootstrap::getObjectManager()->create(GuestCartManagementInterface::class);
115141
$cartManagement->placeOrder($quoteIdMask->getMaskedId());
116142
$order = $this->getOrder('test01');
117-
$this->assertEquals($quote->getGrandTotal(), $order->getGrandTotal());
143+
$this->assertEquals($expectedGrandTotal, $order->getGrandTotal());
144+
}
145+
146+
/**
147+
* Load cart from fixture.
148+
*
149+
* @return Quote
150+
*/
151+
private function getQuote(): Quote
152+
{
153+
$searchCriteria = $this->criteriaBuilder->addFilter('reserved_order_id', 'test01')->create();
154+
$carts = $this->quoteRepository->getList($searchCriteria)
155+
->getItems();
156+
if (!$carts) {
157+
throw new \RuntimeException('Cart from fixture not found');
158+
}
159+
160+
return array_shift($carts);
118161
}
119162

120163
/**

dev/tests/integration/testsuite/Magento/SalesRule/_files/coupon_cart_fixed_discount_rollback.php

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,32 @@
55
*/
66
declare(strict_types=1);
77

8+
use Magento\Framework\Api\SearchCriteriaBuilder;
9+
use Magento\Framework\Registry;
10+
use Magento\SalesRule\Api\RuleRepositoryInterface;
11+
use Magento\SalesRule\Model\Rule;
812
use Magento\TestFramework\Helper\Bootstrap;
913

10-
/** @var Magento\Framework\Registry $registry */
11-
$registry = Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class);
14+
$objectManager = Bootstrap::getObjectManager();
1215

13-
/** @var Magento\SalesRule\Model\Rule $rule */
14-
$rule = $registry->registry('cart_rule_fixed_discount_coupon');
15-
if ($rule) {
16-
$rule->delete();
16+
/** @var Registry $registry */
17+
$registry = $objectManager->get(Registry::class);
18+
$registry->unregister('isSecureArea');
19+
$registry->register('isSecureArea', true);
20+
21+
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
22+
$searchCriteriaBuilder = $objectManager->get(SearchCriteriaBuilder::class);
23+
$searchCriteria = $searchCriteriaBuilder->addFilter('name', '15$ fixed discount on whole cart')
24+
->create();
25+
/** @var RuleRepositoryInterface $ruleRepository */
26+
$ruleRepository = $objectManager->get(RuleRepositoryInterface::class);
27+
$items = $ruleRepository->getList($searchCriteria)
28+
->getItems();
29+
/** @var Rule $salesRule */
30+
$salesRule = array_pop($items);
31+
if ($salesRule !== null) {
32+
$ruleRepository->deleteById($salesRule->getRuleId());
1733
}
34+
35+
$registry->unregister('isSecureArea');
36+
$registry->register('isSecureArea', false);

dev/tests/integration/testsuite/Magento/SalesRule/_files/coupon_cart_fixed_discount_subtotal_with_discount.php

Lines changed: 0 additions & 58 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
include __DIR__ . '/coupon_cart_fixed_discount.php';
9+
10+
use Magento\SalesRule\Model\ResourceModel\Rule as ResourceModel;
11+
use Magento\SalesRule\Model\Rule\Condition\Address;
12+
use Magento\SalesRule\Model\Rule\Condition\Combine;
13+
14+
$salesRule->getConditions()->loadArray([
15+
'type' => Combine::class,
16+
'attribute' => null,
17+
'operator' => null,
18+
'value' => '1',
19+
'is_value_processed' => null,
20+
'aggregator' => 'any',
21+
'conditions' =>
22+
[
23+
[
24+
'type' => Address::class,
25+
'attribute' => 'base_subtotal_with_discount',
26+
'operator' => '>=',
27+
'value' => 9,
28+
'is_value_processed' => false
29+
],
30+
],
31+
]);
32+
$salesRule->setDiscountAmount(5);
33+
$objectManager->get(ResourceModel::class)->save($salesRule);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
include __DIR__ . '/coupon_cart_fixed_discount_rollback.php';

dev/tests/integration/testsuite/Magento/SalesRule/_files/quote_with_coupon.php

Lines changed: 0 additions & 79 deletions
This file was deleted.

0 commit comments

Comments
 (0)