Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CarrierCollectRatesOptionsTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
10 use PHPUnit_Framework_MockObject_MockObject as MockObject;
13 use Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory as RateResultErrorFactory;
14 use Psr\Log\LoggerInterface;
16 use Magento\Shipping\Model\Simplexml\ElementFactory;
17 use Magento\Shipping\Model\Rate\ResultFactory as RateResultFactory;
18 use Magento\Quote\Model\Quote\Address\RateResult\MethodFactory;
20 use Magento\Shipping\Model\Rate\Result as RateResult;
22 use Magento\Shipping\Model\Tracking\ResultFactory as TrackResultFactory;
23 use Magento\Shipping\Model\Tracking\Result\ErrorFactory as TrackingResultErrorFactory;
24 use Magento\Shipping\Model\Tracking\Result\StatusFactory;
27 use Magento\Directory\Model\CountryFactory;
28 use Magento\Directory\Model\CurrencyFactory;
37 
41 class CarrierCollectRatesOptionsTest extends \PHPUnit\Framework\TestCase
42 {
43 
47  private $objectManager;
48 
52  private $rateRequest;
53 
57  private $allowed_methods;
58 
62  private $negotiatedactive;
63 
67  private $include_taxes;
68 
72  private $httpClient;
73 
79  protected function setUp()
80  {
81 
82  $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
83 
84  $scopeMock = $this->getMockBuilder(ScopeConfigInterface::class)
85  ->disableOriginalConstructor()
86  ->getMock();
87 
88  $scopeMock->expects($this->any())
89  ->method('getValue')
90  ->willReturnCallback([$this, 'scopeConfigGetValue']);
91  $scopeMock->expects($this->any())
92  ->method('isSetFlag')
93  ->willReturnCallback([$this, 'scopeConfigisSetFlag']);
94 
95  $errorFactoryMock = $this->getMockBuilder(RateResultErrorFactory::class)
96  ->disableOriginalConstructor()
97  ->getMock();
98 
99  $loggerInterfaceMock = $this->getMockBuilder(LoggerInterface::class)
100  ->disableOriginalConstructor()
101  ->getMock();
102 
103  $securityMock = $this->getMockBuilder(Security::class)
104  ->disableOriginalConstructor()
105  ->getMock();
106 
107  $elementFactoryMock = $this->getMockBuilder(ElementFactory::class)
108  ->disableOriginalConstructor()
109  ->getMock();
110 
111  $rateResultMock = $this->getMockBuilder(RateResult::class)
112  ->disableOriginalConstructor()
113  ->setMethods(['getError'])
114  ->getMock();
115 
116  $rateFactoryMock = $this->getMockBuilder(RateResultFactory::class)
117  ->disableOriginalConstructor()
118  ->setMethods(['create'])
119  ->getMock();
120 
121  $rateFactoryMock->expects($this->any())
122  ->method('create')
123  ->willReturn($rateResultMock);
124 
125  $httpClientFactory = $this->getMockBuilder(ClientFactory::class)
126  ->disableOriginalConstructor()
127  ->setMethods(['create'])
128  ->getMock();
129  $this->httpClient = $this->getMockForAbstractClass(ClientInterface::class);
130  $httpClientFactory->method('create')
131  ->willReturn($this->httpClient);
132 
133  $priceInterfaceMock = $this->getMockBuilder(PriceCurrencyInterface::class)
134  ->disableOriginalConstructor()
135  ->getMock();
136 
137  $rateMethodMock = $this->getMockBuilder(Method::class)
138  ->setConstructorArgs(['priceCurrency' => $priceInterfaceMock])
139  ->setMethods(null)
140  ->getMock();
141 
142  $methodFactoryMock = $this->getMockBuilder(MethodFactory::class)
143  ->disableOriginalConstructor()
144  ->setMethods(['create'])
145  ->getMock();
146 
147  $methodFactoryMock->expects($this->any())
148  ->method('create')
149  ->willReturn($rateMethodMock);
150 
151  $resultFactoryMock = $this->getMockBuilder(TrackResultFactory::class)
152  ->disableOriginalConstructor()
153  ->getMock();
154 
155  $trErrorFactoryMock = $this->getMockBuilder(TrackingResultErrorFactory::class)
156  ->disableOriginalConstructor()
157  ->getMock();
158 
159  $statusFactoryMock = $this->getMockBuilder(StatusFactory::class)
160  ->disableOriginalConstructor()
161  ->getMock();
162 
163  $regionFactoryMock = $this->getMockBuilder(RegionFactory::class)
164  ->disableOriginalConstructor()
165  ->getMock();
166 
167  $countryMock = $this->getMockBuilder(Country::class)
168  ->disableOriginalConstructor()
169  ->setMethods(['load', 'getData'])
170  ->getMock();
171 
172  $countryMock->expects($this->any())
173  ->method('load')
174  ->willReturnSelf();
175 
176  $countryFactoryMock = $this->getMockBuilder(CountryFactory::class)
177  ->disableOriginalConstructor()
178  ->setMethods(['create'])
179  ->getMock();
180 
181  $countryFactoryMock->expects($this->any())
182  ->method('create')
183  ->willReturn($countryMock);
184 
185  $allowCurrencies = ['GBP'];
186  $baseCurrencies = ['GBP'];
187  $currencyRates = ['GBP' => ['GBP' => 1]];
188  $currencyFactoryMock = $this->getMockBuilder(CurrencyFactory::class)
189  ->disableOriginalConstructor()
190  ->setMethods(['create'])
191  ->getMock();
192  $currencyMock = $this->getMockBuilder(Currency::class)
193  ->disableOriginalConstructor()
194  ->setMethods(['getConfigAllowCurrencies', 'getConfigBaseCurrencies', 'getCurrencyRates'])
195  ->getMock();
196  $currencyFactoryMock->expects($this->once())
197  ->method('create')
198  ->willReturn($currencyMock);
199  $currencyMock->expects($this->any())
200  ->method('getConfigAllowCurrencies')
201  ->willReturn($allowCurrencies);
202  $currencyMock->expects($this->any())
203  ->method('getConfigBaseCurrencies')
204  ->willReturn($baseCurrencies);
205  $currencyMock->expects($this->any())
206  ->method('getCurrencyRates')
207  ->with($baseCurrencies, $allowCurrencies)
208  ->willReturn($currencyRates);
209 
210  $dataMock = $this->getMockBuilder(Data::class)
211  ->disableOriginalConstructor()
212  ->getMock();
213 
214  $stockRegistryMock = $this->getMockBuilder(StockRegistry::class)
215  ->disableOriginalConstructor()
216  ->getMock();
217 
218  $formatInterfaceMock = $this->getMockBuilder(FormatInterface::class)
219  ->disableOriginalConstructor()
220  ->getMock();
221 
222  $configHelperMock = $this->getMockBuilder(Config::class)
223  ->disableOriginalConstructor()
224  ->getMock();
225 
226  $this->model = $this->getMockBuilder(Carrier::class)
227  ->setMethods(['_getCachedQuotes', 'canCollectRates', '_updateFreeMethodQuote', '_getBaseCurrencyRate'])
228  ->setConstructorArgs(
229  [
230  'scopeConfig' => $scopeMock,
231  'rateErrorFactory' => $errorFactoryMock,
232  'logger' => $loggerInterfaceMock,
233  'xmlSecurity' => $securityMock,
234  'xmlElFactory' => $elementFactoryMock,
235  'rateFactory' => $rateFactoryMock,
236  'rateMethodFactory' => $methodFactoryMock,
237  'trackFactory' => $resultFactoryMock,
238  'trackErrorFactory' => $trErrorFactoryMock,
239  'trackStatusFactory' => $statusFactoryMock,
240  'regionFactory' => $regionFactoryMock,
241  'countryFactory' => $countryFactoryMock,
242  'currencyFactory' => $currencyFactoryMock,
243  'directoryData' => $dataMock,
244  'stockRegistry' => $stockRegistryMock,
245  'localeFormat' => $formatInterfaceMock,
246  'configHelper' => $configHelperMock,
247  'httpClientFactory' => $httpClientFactory,
248  'data' => [],
249  ]
250  )
251  ->getMock();
252 
253  $this->model->expects($this->any())
254  ->method('canCollectRates')
255  ->willReturn(true);
256 
257  $this->model->expects($this->any())
258  ->method('_getBaseCurrencyRate')
259  ->willReturn(1.00);
260 
261  $this->rateRequest = $this->objectManager->getObject(RateRequest::class);
262  }
263 
269  public function scopeConfigGetValue($path)
270  {
271  $pathMap = [
272  'carriers/ups/type' => 'UPS_XML',
273  'carriers/ups/shipper_number' => '12345',
274  'carriers/ups/allowed_methods' => $this->allowed_methods,
275  ];
276 
277  return isset($pathMap[$path]) ? $pathMap[$path] : null;
278  }
279 
285  public function scopeConfigisSetFlag($path)
286  {
287  $pathMap = [
288  'carriers/ups/negotiated_active' => $this->negotiatedactive,
289  'carriers/ups/include_taxes' => $this->include_taxes,
290  ];
291 
292  if (isset($pathMap[$path])) {
293  if ($pathMap[$path]) {
294  return(true);
295  }
296  }
297  return(false);
298  }
299 
308  public function testCollectRates($neg, $tax, $file, $method, $expectedprice)
309  {
310  $this->negotiatedactive = $neg;
311  $this->include_taxes = $tax;
312  $this->allowed_methods = $method;
313 
315  $this->model->expects($this->any())
316  ->method('_getCachedQuotes')
317  ->willReturn($response);
318 
319  $rates = $this->model->collectRates($this->rateRequest)->getAllRates();
320  $this->assertEquals($expectedprice, $rates[0]->getData('cost'));
321  $this->assertEquals($method, $rates[0]->getData('method'));
322  }
323 
328  public function collectRatesDataProvider()
329  {
330  return [
331  [0, 0, '/_files/ups_rates_response_option1.xml', '11', 6.45 ],
332  [0, 0, '/_files/ups_rates_response_option2.xml', '65', 29.59 ],
333  [0, 1, '/_files/ups_rates_response_option3.xml', '11', 7.74 ],
334  [0, 1, '/_files/ups_rates_response_option4.xml', '65', 29.59 ],
335  [1, 0, '/_files/ups_rates_response_option5.xml', '11', 9.35 ],
336  [1, 0, '/_files/ups_rates_response_option6.xml', '65', 41.61 ],
337  [1, 1, '/_files/ups_rates_response_option7.xml', '11', 11.22 ],
338  [1, 1, '/_files/ups_rates_response_option8.xml', '65', 41.61 ],
339  ];
340  }
341 }
$response
Definition: 404.php:11
defined('TESTS_BP')||define('TESTS_BP' __DIR__
Definition: _bootstrap.php:60
$rates
Definition: tax.phtml:35
$method
Definition: info.phtml:13