Skip to content
Snippets Groups Projects
Commit 0ea68363 authored by isavchuk's avatar isavchuk
Browse files

Merge remote-tracking branch 'origin/MAGETWO-62662' into pr-mpi-bugfix-ce

parents 966409c9 f23a4412
Branches
No related merge requests found
......@@ -5,8 +5,10 @@
*/
namespace Magento\Shipping\Model;
use Magento\Sales\Model\Order\Shipment;
use Magento\Framework\App\ObjectManager;
use Magento\Quote\Model\Quote\Address\RateCollectorInterface;
use Magento\Quote\Model\Quote\Address\RateRequestFactory;
use Magento\Sales\Model\Order\Shipment;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
......@@ -81,6 +83,11 @@ class Shipping implements RateCollectorInterface
*/
protected $stockRegistry;
/**
* @var RateRequestFactory
*/
private $rateRequestFactory;
/**
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param \Magento\Shipping\Model\Config $shippingConfig
......@@ -91,6 +98,7 @@ class Shipping implements RateCollectorInterface
* @param \Magento\Directory\Model\RegionFactory $regionFactory
* @param \Magento\Framework\Math\Division $mathDivision
* @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
* @param RateRequestFactory $rateRequestFactory
*/
public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
......@@ -101,7 +109,8 @@ class Shipping implements RateCollectorInterface
\Magento\Shipping\Model\Shipment\RequestFactory $shipmentRequestFactory,
\Magento\Directory\Model\RegionFactory $regionFactory,
\Magento\Framework\Math\Division $mathDivision,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
RateRequestFactory $rateRequestFactory = null
) {
$this->_scopeConfig = $scopeConfig;
$this->_shippingConfig = $shippingConfig;
......@@ -112,6 +121,7 @@ class Shipping implements RateCollectorInterface
$this->_regionFactory = $regionFactory;
$this->mathDivision = $mathDivision;
$this->stockRegistry = $stockRegistry;
$this->rateRequestFactory = $rateRequestFactory ?: ObjectManager::getInstance()->get(RateRequestFactory::class);
}
/**
......@@ -463,7 +473,7 @@ class Shipping implements RateCollectorInterface
public function collectRatesByAddress(\Magento\Framework\DataObject $address, $limitCarrier = null)
{
/** @var $request \Magento\Quote\Model\Quote\Address\RateRequest */
$request = $this->_shipmentRequestFactory->create();
$request = $this->rateRequestFactory->create();
$request->setAllItems($address->getAllItems());
$request->setDestCountryId($address->getCountryId());
$request->setDestRegionId($address->getRegionId());
......@@ -473,10 +483,13 @@ class Shipping implements RateCollectorInterface
$request->setPackageWeight($address->getWeight());
$request->setFreeMethodWeight($address->getFreeMethodWeight());
$request->setPackageQty($address->getItemQty());
$request->setStoreId($this->_storeManager->getStore()->getId());
$request->setWebsiteId($this->_storeManager->getStore()->getWebsiteId());
$request->setBaseCurrency($this->_storeManager->getStore()->getBaseCurrency());
$request->setPackageCurrency($this->_storeManager->getStore()->getCurrentCurrency());
/** @var \Magento\Store\Api\Data\StoreInterface $store */
$store = $this->_storeManager->getStore();
$request->setStoreId($store->getId());
$request->setWebsiteId($store->getWebsiteId());
$request->setBaseCurrency($store->getBaseCurrency());
$request->setPackageCurrency($store->getCurrentCurrency());
$request->setLimitCarrier($limitCarrier);
$request->setBaseSubtotalInclTax($address->getBaseSubtotalInclTax());
......
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Shipping\Model;
use Magento\Framework\DataObject;
use Magento\Framework\ObjectManagerInterface;
use Magento\Quote\Model\Quote\Address\RateResult\Method;
use Magento\Shipping\Model\Rate\Result;
use Magento\TestFramework\Helper\Bootstrap;
/**
* Contains list of tests for Shipping model
*/
class ShippingTest extends \PHPUnit_Framework_TestCase
{
/**
* @var Shipping
*/
private $model;
/**
* @var ObjectManagerInterface
*/
private $objectManager;
/**
* @inheritdoc
*/
protected function setUp()
{
$this->objectManager = Bootstrap::getObjectManager();
$this->model = $this->objectManager->get(Shipping::class);
}
/**
* Checks shipping rates processing by address.
* @covers \Magento\Shipping\Model\Shipping::collectRatesByAddress
* @return Result
*/
public function testCollectRatesByAddress()
{
$address = $this->objectManager->create(DataObject::class, [
'data' => [
'region_id' => 'CA',
'postcode' => '11111',
'lastname' => 'John',
'firstname' => 'Doe',
'street' => 'Some street',
'city' => 'Los Angeles',
'email' => 'john.doe@example.com',
'telephone' => '11111111',
'country_id' => 'US',
'item_qty' => 1
]
]);
/** @var Shipping $result */
$result = $this->model->collectRatesByAddress($address, 'flatrate');
static::assertInstanceOf(Shipping::class, $result);
return $result->getResult();
}
/**
* Checks shipping rate details for processed address.
* @covers \Magento\Shipping\Model\Shipping::collectRatesByAddress
* @param Result $result
* @depends testCollectRatesByAddress
* @magentoConfigFixture carriers/flatrate/active 1
* @magentoConfigFixture carriers/flatrate/price 5.00
*/
public function testCollectRates(Result $result)
{
$rates = $result->getAllRates();
static::assertNotEmpty($rates);
/** @var Method $rate */
$rate = array_pop($rates);
static::assertInstanceOf(Method::class, $rate);
static::assertEquals('flatrate', $rate->getData('carrier'));
static::assertEquals(5, $rate->getData('price'));
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment