Skip to content

Commit 4c5372d

Browse files
committed
MAGETWO-87966: Incorrect tax presented on checkout page
1 parent 9d74001 commit 4c5372d

File tree

3 files changed

+109
-0
lines changed

3 files changed

+109
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+
namespace Magento\Checkout\Plugin\Model\Quote;
9+
10+
use Magento\Quote\Model\Quote;
11+
12+
/**
13+
* Clear quote addresses after all items were removed.
14+
*/
15+
class ResetQuoteAddresses
16+
{
17+
/**
18+
* @param Quote $quote
19+
* @param Quote $result
20+
* @param mixed $itemId
21+
*
22+
* @return Quote
23+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
24+
*/
25+
public function afterRemoveItem(Quote $quote, Quote $result, $itemId): Quote
26+
{
27+
if (empty($result->getAllVisibleItems())) {
28+
foreach ($result->getAllAddresses() as $address) {
29+
$result->removeAddress($address->getId());
30+
}
31+
}
32+
33+
return $result;
34+
}
35+
}

app/code/Magento/Checkout/etc/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,7 @@
4949
</argument>
5050
</arguments>
5151
</type>
52+
<type name="Magento\Quote\Model\Quote">
53+
<plugin name="clear_addresses_after_product_delete" type="Magento\Checkout\Plugin\Model\Quote\ResetQuoteAddresses"/>
54+
</type>
5255
</config>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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+
namespace Magento\Checkout\Plugin\Model\Quote;
9+
10+
use Magento\Checkout\Model\Cart;
11+
use Magento\Checkout\Model\Session;
12+
use Magento\Quote\Model\BillingAddressManagement;
13+
use Magento\Quote\Model\Quote;
14+
use Magento\Quote\Model\Quote\Address as QuoteAddress;
15+
use Magento\TestFramework\Helper\Bootstrap;
16+
17+
/**
18+
* Test for \Magento\Checkout\Plugin\Model\Quote\ResetQuoteAddresses
19+
*/
20+
class ResetQuoteAddressesTest extends \PHPUnit\Framework\TestCase
21+
{
22+
/**
23+
* @magentoDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
24+
*
25+
* @return void
26+
*/
27+
public function testAfterRemoveItem()
28+
{
29+
/** @var Quote $quote */
30+
$quote = Bootstrap::getObjectManager()->create(Quote::class);
31+
$quote->load('test_order_with_virtual_product', 'reserved_order_id');
32+
/** @var QuoteAddress $quoteShippingAddress */
33+
$quoteBillingAddress = Bootstrap::getObjectManager()->create(QuoteAddress::class);
34+
$quoteBillingAddress->setRegion('CA')
35+
->setPostcode('90210')
36+
->setFirstname('a_unique_firstname')
37+
->setLastname('lastname')
38+
->setStreet('street')
39+
->setCity('Beverly Hills')
40+
->setEmail('admin@example.com')
41+
->setTelephone('1111111111')
42+
->setCountryId('US')
43+
->setAddressType('billing');
44+
45+
/** @var BillingAddressManagement $billingAddressManagement */
46+
$billingAddressManagement = Bootstrap::getObjectManager()->create(BillingAddressManagement::class);
47+
$billingAddressManagement->assign($quote->getId(), $quoteBillingAddress);
48+
/** @var Session $checkoutSession */
49+
$checkoutSession = Bootstrap::getObjectManager()->create(Session::class);
50+
$checkoutSession->setQuoteId($quote->getId());
51+
/** @var Cart $cart */
52+
$cart = Bootstrap::getObjectManager()->create(Cart::class);
53+
54+
$activeQuote = $cart->getQuote();
55+
$cart->removeItem($activeQuote->getAllVisibleItems()[0]->getId());
56+
$cart->save();
57+
58+
/** @var Quote $quote */
59+
$quote = Bootstrap::getObjectManager()->create(Quote::class);
60+
$quote->load('test_order_with_virtual_product', 'reserved_order_id');
61+
$quoteBillingAddressUpdated = $quote->getBillingAddress();
62+
$customer = $quote->getCustomer();
63+
64+
$this->assertEquals($quoteBillingAddressUpdated->getEmail(), $customer->getEmail());
65+
$this->assertEmpty($quoteBillingAddressUpdated->getCountryId());
66+
$this->assertEmpty($quoteBillingAddressUpdated->getRegionId());
67+
$this->assertEmpty($quoteBillingAddressUpdated->getRegion());
68+
$this->assertEmpty($quoteBillingAddressUpdated->getPostcode());
69+
$this->assertEmpty($quoteBillingAddressUpdated->getCity());
70+
}
71+
}

0 commit comments

Comments
 (0)