6 declare(strict_types=1);
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;
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;
47 private $objectManager;
57 private $allowed_methods;
62 private $negotiatedactive;
67 private $include_taxes;
82 $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
84 $scopeMock = $this->getMockBuilder(ScopeConfigInterface::class)
85 ->disableOriginalConstructor()
88 $scopeMock->expects($this->any())
90 ->willReturnCallback([$this,
'scopeConfigGetValue']);
91 $scopeMock->expects($this->any())
93 ->willReturnCallback([$this,
'scopeConfigisSetFlag']);
95 $errorFactoryMock = $this->getMockBuilder(RateResultErrorFactory::class)
96 ->disableOriginalConstructor()
99 $loggerInterfaceMock = $this->getMockBuilder(LoggerInterface::class)
100 ->disableOriginalConstructor()
103 $securityMock = $this->getMockBuilder(Security::class)
104 ->disableOriginalConstructor()
107 $elementFactoryMock = $this->getMockBuilder(ElementFactory::class)
108 ->disableOriginalConstructor()
111 $rateResultMock = $this->getMockBuilder(RateResult::class)
112 ->disableOriginalConstructor()
113 ->setMethods([
'getError'])
116 $rateFactoryMock = $this->getMockBuilder(RateResultFactory::class)
117 ->disableOriginalConstructor()
118 ->setMethods([
'create'])
121 $rateFactoryMock->expects($this->any())
123 ->willReturn($rateResultMock);
125 $httpClientFactory = $this->getMockBuilder(ClientFactory::class)
126 ->disableOriginalConstructor()
127 ->setMethods([
'create'])
129 $this->httpClient = $this->getMockForAbstractClass(ClientInterface::class);
130 $httpClientFactory->method(
'create')
131 ->willReturn($this->httpClient);
133 $priceInterfaceMock = $this->getMockBuilder(PriceCurrencyInterface::class)
134 ->disableOriginalConstructor()
137 $rateMethodMock = $this->getMockBuilder(Method::class)
138 ->setConstructorArgs([
'priceCurrency' => $priceInterfaceMock])
142 $methodFactoryMock = $this->getMockBuilder(MethodFactory::class)
143 ->disableOriginalConstructor()
144 ->setMethods([
'create'])
147 $methodFactoryMock->expects($this->any())
149 ->willReturn($rateMethodMock);
151 $resultFactoryMock = $this->getMockBuilder(TrackResultFactory::class)
152 ->disableOriginalConstructor()
155 $trErrorFactoryMock = $this->getMockBuilder(TrackingResultErrorFactory::class)
156 ->disableOriginalConstructor()
159 $statusFactoryMock = $this->getMockBuilder(StatusFactory::class)
160 ->disableOriginalConstructor()
163 $regionFactoryMock = $this->getMockBuilder(RegionFactory::class)
164 ->disableOriginalConstructor()
167 $countryMock = $this->getMockBuilder(Country::class)
168 ->disableOriginalConstructor()
169 ->setMethods([
'load',
'getData'])
172 $countryMock->expects($this->any())
176 $countryFactoryMock = $this->getMockBuilder(CountryFactory::class)
177 ->disableOriginalConstructor()
178 ->setMethods([
'create'])
181 $countryFactoryMock->expects($this->any())
183 ->willReturn($countryMock);
185 $allowCurrencies = [
'GBP'];
186 $baseCurrencies = [
'GBP'];
187 $currencyRates = [
'GBP' => [
'GBP' => 1]];
188 $currencyFactoryMock = $this->getMockBuilder(CurrencyFactory::class)
189 ->disableOriginalConstructor()
190 ->setMethods([
'create'])
192 $currencyMock = $this->getMockBuilder(Currency::class)
193 ->disableOriginalConstructor()
194 ->setMethods([
'getConfigAllowCurrencies',
'getConfigBaseCurrencies',
'getCurrencyRates'])
196 $currencyFactoryMock->expects($this->once())
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);
210 $dataMock = $this->getMockBuilder(Data::class)
211 ->disableOriginalConstructor()
214 $stockRegistryMock = $this->getMockBuilder(StockRegistry::class)
215 ->disableOriginalConstructor()
218 $formatInterfaceMock = $this->getMockBuilder(FormatInterface::class)
219 ->disableOriginalConstructor()
222 $configHelperMock = $this->getMockBuilder(Config::class)
223 ->disableOriginalConstructor()
226 $this->model = $this->getMockBuilder(Carrier::class)
227 ->setMethods([
'_getCachedQuotes',
'canCollectRates',
'_updateFreeMethodQuote',
'_getBaseCurrencyRate'])
228 ->setConstructorArgs(
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,
253 $this->model->expects($this->any())
254 ->method(
'canCollectRates')
257 $this->model->expects($this->any())
258 ->method(
'_getBaseCurrencyRate')
261 $this->rateRequest = $this->objectManager->getObject(RateRequest::class);
272 'carriers/ups/type' =>
'UPS_XML',
273 'carriers/ups/shipper_number' =>
'12345',
274 'carriers/ups/allowed_methods' => $this->allowed_methods,
277 return isset($pathMap[
$path]) ? $pathMap[
$path] :
null;
288 'carriers/ups/negotiated_active' => $this->negotiatedactive,
289 'carriers/ups/include_taxes' => $this->include_taxes,
292 if (isset($pathMap[
$path])) {
293 if ($pathMap[
$path]) {
310 $this->negotiatedactive = $neg;
311 $this->include_taxes =
$tax;
312 $this->allowed_methods =
$method;
315 $this->model->expects($this->any())
316 ->method(
'_getCachedQuotes')
319 $rates = $this->model->collectRates($this->rateRequest)->getAllRates();
320 $this->assertEquals($expectedprice,
$rates[0]->getData(
'cost'));
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 ],
defined('TESTS_BP')||define('TESTS_BP' __DIR__
testCollectRates($neg, $tax, $file, $method, $expectedprice)
collectRatesDataProvider()
scopeConfigGetValue($path)
scopeConfigisSetFlag($path)