Skip to content

Commit c7e9c5c

Browse files
ENGCOM-620: #12889: Wrong shipping fee in backend with multiple store views #1132
- Merge Pull Request magento-engcom/magento2ce#1132 from p-bystritsky/magento2ce:ISSUE-12889 - Merged commits: 1. 18d7890 2. 64d051c 3. 8268922
2 parents ec47891 + 8268922 commit c7e9c5c

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,7 @@ public function requestShippingRates(\Magento\Quote\Model\Quote\Item\AbstractIte
10081008
/**
10091009
* Store and website identifiers specified from StoreManager
10101010
*/
1011+
$request->setQuoteStoreId($this->getQuote()->getStoreId());
10111012
$request->setStoreId($this->storeManager->getStore()->getId());
10121013
$request->setWebsiteId($this->storeManager->getWebsite()->getId());
10131014
$request->setFreeShipping($this->getFreeShipping());

app/code/Magento/Shipping/Model/Shipping.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ public function collectRates(\Magento\Quote\Model\Quote\Address\RateRequest $req
252252
public function collectCarrierRates($carrierCode, $request)
253253
{
254254
/* @var $carrier \Magento\Shipping\Model\Carrier\AbstractCarrier */
255-
$carrier = $this->_carrierFactory->createIfActive($carrierCode, $request->getStoreId());
255+
$carrier = $this->_carrierFactory->createIfActive($carrierCode, $request->getQuoteStoreId());
256256
if (!$carrier) {
257257
return $this;
258258
}

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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Quote\Model\Quote;
77

8+
use Magento\Store\Api\StoreRepositoryInterface;
89
use Magento\TestFramework\Helper\Bootstrap;
910

1011
/**
@@ -25,6 +26,9 @@ class AddressTest extends \PHPUnit\Framework\TestCase
2526
/**@var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository */
2627
protected $customerRepository;
2728

29+
/** @var StoreRepositoryInterface */
30+
private $storeRepository;
31+
2832
/**
2933
* Initialize quote and customer fixtures
3034
*/
@@ -48,6 +52,8 @@ public function setUp()
4852
$this->_address->setId(1);
4953
$this->_address->load($this->_address->getId());
5054
$this->_address->setQuote($this->_quote);
55+
$this->storeRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
56+
->create(StoreRepositoryInterface::class);
5157
}
5258

5359
protected function tearDown()
@@ -309,4 +315,50 @@ public function dataProvider()
309315
[[123, true], [123, true]]
310316
];
311317
}
318+
319+
/**
320+
* Tests different shipping rates for different stores.
321+
*
322+
* @magentoDataFixture Magento/Store/_files/second_website_with_two_stores.php
323+
* @magentoDataFixture Magento/Sales/_files/quote_with_customer.php
324+
* @magentoDataFixture Magento/Customer/_files/customer_two_addresses.php
325+
* @magentoDataFixture Magento/Sales/_files/quote.php
326+
* @magentoConfigFixture default_store carriers/flatrate/price 5
327+
* @magentoConfigFixture fixture_second_store_store carriers/flatrate/price 10
328+
* @magentoAppIsolation enabled
329+
* @magentoDbIsolation enabled
330+
* @dataProvider requestShippingRatesDataProvider
331+
*/
332+
public function testRequestShippingRates($storeCode, $expectedRate)
333+
{
334+
$store = $this->storeRepository->get($storeCode);
335+
$this->_quote->setStoreId($store->getId());
336+
$this->_address->setItemQty(1);
337+
$this->_address->requestShippingRates();
338+
/**
339+
* @var \Magento\Quote\Model\ResourceModel\Quote\Address\Rate\Collection $shippingRatesCollection
340+
*/
341+
$shippingRatesCollection = $this->_address->getShippingRatesCollection();
342+
/**
343+
* @var \Magento\Quote\Model\Quote\Address\Rate[] $shippingRates
344+
*/
345+
$shippingRates = $shippingRatesCollection->getItems();
346+
self::assertEquals(
347+
$expectedRate,
348+
$shippingRates[0]->getPrice()
349+
);
350+
}
351+
352+
/**
353+
* Data provider for testRequestShippingRates.
354+
*
355+
* @return array
356+
*/
357+
public function requestShippingRatesDataProvider()
358+
{
359+
return [
360+
['default', 5],
361+
['fixture_second_store', 10],
362+
];
363+
}
312364
}

0 commit comments

Comments
 (0)