8 use Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory;
25 private $scopeConfigMock;
30 private $errorFactoryMock;
40 private $resultFactoryMock;
45 private $methodFactoryMock;
50 private $tablerateFactoryMock;
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->tablerateFactoryMock = $this
87 ->disableOriginalConstructor()
88 ->setMethods([
'create',
'getRate'])
91 $this->helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
92 $this->model = $this->helper->getObject(
93 \
Magento\OfflineShipping\Model\Carrier\Tablerate::class,
95 'scopeConfig' => $this->scopeConfigMock,
96 'rateErrorFactory' => $this->errorFactoryMock,
97 'logger' => $this->loggerMock,
98 'rateResultFactory' => $this->resultFactoryMock,
99 'resultMethodFactory' => $this->methodFactoryMock,
100 'tablerateFactory' => $this->tablerateFactoryMock
117 $request = $this->getMockBuilder(\
Magento\Quote\Model\Quote\Address\RateRequest::class)
118 ->disableOriginalConstructor()
119 ->setMethods([
'getAllItems',
'getPackageQty',
'getFreeShipping'])
122 $item = $this->getMockBuilder(\
Magento\Sales\Model\Order\Item::class)
123 ->disableOriginalConstructor()
138 $product = $this->getMockBuilder(\
Magento\Catalog\Model\Product::class)
139 ->disableOriginalConstructor()
140 ->setMethods([
'isVirtual'])
143 $tablerate = $this->getMockBuilder(\
Magento\OfflineShipping\Model\Carrier\Tablerate::class)
144 ->disableOriginalConstructor()
145 ->setMethods([
'getRate'])
148 $this->scopeConfigMock->expects($this->any())->method(
'isSetFlag')->willReturn(
true);
150 $tablerate->expects($this->any())->method(
'getRate')->willReturn(
$rate);
151 $this->tablerateFactoryMock->expects($this->once())->method(
'create')->willReturn($tablerate);
153 $method = $this->getMockBuilder(Method::class)
154 ->disableOriginalConstructor()
155 ->setMethods([
'setCarrier',
'setCarrierTitle',
'setMethod',
'setMethodTitle',
'setPrice',
'setCost'])
157 $this->methodFactoryMock->expects($this->once())->method(
'create')->willReturn(
$method);
159 $result = $this->getMockBuilder(Result::class)
160 ->disableOriginalConstructor()
161 ->setMethods([
'append'])
163 $this->resultFactoryMock->expects($this->once())->method(
'create')->willReturn(
$result);
165 $product->expects($this->any())->method(
'isVirtual')->willReturn(
false);
167 $item->expects($this->any())->method(
'getProduct')->willReturn(
$product);
168 $item->expects($this->any())->method(
'getFreeShipping')->willReturn(1);
169 $item->expects($this->any())->method(
'getQty')->willReturn(1);
171 $request->expects($this->any())->method(
'getAllItems')->willReturn([
$item]);
172 $request->expects($this->any())->method(
'getPackageQty')->willReturn(1);
175 $method->expects($this->once())->method(
'setPrice')->with($this->captureArg($returnPrice));
178 $method->expects($this->once())->method(
'setCost')->with($this->captureArg($returnCost));
180 $returnMethod =
null;
181 $result->expects($this->once())->method(
'append')->with($this->captureArg($returnMethod));
183 $request->expects($this->never())->method(
'getFreeShipping')->willReturn($freeshipping);
185 $returnResult = $this->model->collectRates(
$request);
187 $this->assertEquals(
$rate[
'price'], $returnPrice);
188 $this->assertEquals(
$rate[
'cost'], $returnCost);
189 $this->assertEquals(
$method, $returnMethod);
190 $this->assertEquals(
$result, $returnResult);
199 private function captureArg(&$captureVar)
201 return $this->callback(
function ($argToMock) use (&$captureVar) {
202 $captureVar = $argToMock;
214 [
'freeshipping' =>
true],
215 [
'freeshipping' =>
false]
testCollectRatesWithGlobalFreeShipping($freeshipping)
collectRatesWithGlobalFreeShippingDataProvider()