25 private $scopeConfigMock;
30 private $errorFactoryMock;
40 private $resultFactoryMock;
45 private $methodFactoryMock;
50 private $priceCalculatorMock;
60 $this->scopeConfigMock = $this->getMockBuilder(\
Magento\Framework\
App\Config\ScopeConfigInterface::class)
61 ->disableOriginalConstructor()
62 ->setMethods([
'create',
'isSetFlag',
'getValue'])
65 $this->errorFactoryMock = $this
66 ->getMockBuilder(\
Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory::class)
67 ->disableOriginalConstructor()
70 $this->loggerMock = $this->getMockBuilder(\Psr\Log\LoggerInterface::class)
71 ->disableOriginalConstructor()
74 $this->resultFactoryMock = $this->getMockBuilder(\
Magento\Shipping\Model\Rate\ResultFactory::class)
75 ->disableOriginalConstructor()
76 ->setMethods([
'create'])
79 $this->methodFactoryMock = $this
80 ->getMockBuilder(\
Magento\Quote\Model\Quote\Address\RateResult\MethodFactory::class)
81 ->disableOriginalConstructor()
82 ->setMethods([
'create'])
85 $this->priceCalculatorMock = $this
86 ->getMockBuilder(\
Magento\OfflineShipping\Model\Carrier\Flatrate\ItemPriceCalculator::class)
87 ->disableOriginalConstructor()
88 ->setMethods([
'getShippingPricePerOrder'])
91 $this->helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
92 $this->model = $this->helper->getObject(
93 \
Magento\OfflineShipping\Model\Carrier\Flatrate::class,
95 'scopeConfig' => $this->scopeConfigMock,
96 'rateErrorFactory' => $this->errorFactoryMock,
97 'logger' => $this->loggerMock,
98 'rateResultFactory' => $this->resultFactoryMock,
99 'rateMethodFactory' => $this->methodFactoryMock,
100 'itemPriceCalculator' => $this->priceCalculatorMock
112 $this->markTestSkipped(
'Test needs refactoring.');
115 $request = $this->getMockBuilder(\
Magento\Quote\Model\Quote\Address\RateRequest::class)
116 ->disableOriginalConstructor()
117 ->setMethods([
'getAllItems',
'getPackageQty',
'getFreeShipping'])
120 $item = $this->getMockBuilder(\
Magento\Sales\Model\Order\Item::class)
121 ->disableOriginalConstructor()
135 $product = $this->getMockBuilder(\
Magento\Catalog\Model\Product::class)
136 ->disableOriginalConstructor()
137 ->setMethods([
'isVirtual'])
140 $this->scopeConfigMock->expects($this->any())->method(
'isSetFlag')->willReturn(
true);
141 $this->scopeConfigMock->expects($this->any())->method(
'getValue')->willReturnMap([
142 [
'carriers/flatrate/active', \
Magento\Store\Model\ScopeInterface::SCOPE_STORE,
null,
true],
143 [
'carriers/flatrate/price', \
Magento\Store\Model\ScopeInterface::SCOPE_STORE,
null, 5],
144 [
'carriers/flatrate/type', \
Magento\Store\Model\ScopeInterface::SCOPE_STORE,
null,
'O'],
145 [
'carriers/flatrate/handling_fee', \
Magento\Store\Model\ScopeInterface::SCOPE_STORE,
null, 0],
147 'carriers/flatrate/handling_type',
148 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE,
153 'carriers/flatrate/handling_action',
154 \
Magento\Store\Model\ScopeInterface::SCOPE_STORE,
160 $this->priceCalculatorMock
161 ->expects($this->once())
162 ->method(
'getShippingPricePerOrder')
163 ->willReturn($expectedPrice);
165 $method = $this->getMockBuilder(Method::class)
166 ->disableOriginalConstructor()
167 ->setMethods([
'setCarrier',
'setCarrierTitle',
'setMethod',
'setMethodTitle',
'setPrice',
'setCost'])
169 $this->methodFactoryMock->expects($this->once())->method(
'create')->willReturn(
$method);
171 $result = $this->getMockBuilder(Result::class)
172 ->disableOriginalConstructor()
173 ->setMethods([
'append'])
175 $this->resultFactoryMock->expects($this->once())->method(
'create')->willReturn(
$result);
177 $product->expects($this->any())->method(
'isVirtual')->willReturn(
false);
179 $item->expects($this->any())->method(
'getProduct')->willReturn(
$product);
180 $item->expects($this->any())->method(
'getFreeShipping')->willReturn(1);
181 $item->expects($this->any())->method(
'getQty')->willReturn(1);
183 $request->expects($this->any())->method(
'getAllItems')->willReturn([
$item]);
184 $request->expects($this->any())->method(
'getPackageQty')->willReturn(1);
186 $request->expects($this->never())->method(
'getFreeShipping')->willReturn($freeshipping);
189 $method->expects($this->once())->method(
'setPrice')->with($this->captureArg($returnPrice));
192 $method->expects($this->once())->method(
'setCost')->with($this->captureArg($returnCost));
194 $returnMethod =
null;
195 $result->expects($this->once())->method(
'append')->with($this->captureArg($returnMethod));
197 $returnResult = $this->model->collectRates(
$request);
199 $this->assertEquals($expectedPrice, $returnPrice);
200 $this->assertEquals($expectedPrice, $returnCost);
201 $this->assertEquals(
$method, $returnMethod);
202 $this->assertEquals(
$result, $returnResult);
211 private function captureArg(&$captureVar)
213 return $this->callback(
function ($argToMock) use (&$captureVar) {
214 $captureVar = $argToMock;
226 [
'freeshipping' =>
true],
227 [
'freeshipping' =>
false]
const HANDLING_ACTION_PERORDER
const HANDLING_TYPE_FIXED
collectRatesWithGlobalFreeShippingDataProvider()
testCollectRatesWithGlobalFreeShipping($freeshipping)