|
12 | 12 | use Magento\Framework\App\Config\ScopeConfigInterface;
|
13 | 13 | use Magento\Framework\HTTP\ClientFactory;
|
14 | 14 | use Magento\Framework\HTTP\ClientInterface;
|
15 |
| -use Magento\Framework\Model\AbstractModel; |
16 | 15 | use Magento\Framework\Phrase;
|
17 | 16 | use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
|
18 | 17 | use Magento\Quote\Model\Quote\Address\RateRequest;
|
|
33 | 32 | * Unit tests for \Magento\Ups\Model\Carrier class.
|
34 | 33 | *
|
35 | 34 | * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
| 35 | + * @SuppressWarnings(PHPMD.TooManyPublicMethods) |
36 | 36 | */
|
37 | 37 | class CarrierTest extends TestCase
|
38 | 38 | {
|
@@ -79,11 +79,6 @@ class CarrierTest extends TestCase
|
79 | 79 | */
|
80 | 80 | private $country;
|
81 | 81 |
|
82 |
| - /** |
83 |
| - * @var AbstractModel |
84 |
| - */ |
85 |
| - private $abstractModel; |
86 |
| - |
87 | 82 | /**
|
88 | 83 | * @var Result
|
89 | 84 | */
|
@@ -135,13 +130,8 @@ protected function setUp(): void
|
135 | 130 | ->onlyMethods(['load', 'getData'])
|
136 | 131 | ->getMock();
|
137 | 132 |
|
138 |
| - $this->abstractModel = $this->getMockBuilder(AbstractModel::class) |
139 |
| - ->disableOriginalConstructor() |
140 |
| - ->onlyMethods(['getData']) |
141 |
| - ->getMock(); |
142 |
| - |
143 | 133 | $this->country->method('load')
|
144 |
| - ->willReturn($this->abstractModel); |
| 134 | + ->willReturnCallback([$this, 'getCountryById']); |
145 | 135 |
|
146 | 136 | $this->countryFactory = $this->getMockBuilder(CountryFactory::class)
|
147 | 137 | ->disableOriginalConstructor()
|
@@ -363,51 +353,185 @@ public function logDataProvider(): array
|
363 | 353 | }
|
364 | 354 |
|
365 | 355 | /**
|
366 |
| - * @param string $countryCode |
367 |
| - * @param string $foundCountryCode |
| 356 | + * @param array $requestData |
| 357 | + * @param array $rawRequestData |
368 | 358 | *
|
369 | 359 | * @return void
|
370 | 360 | * @dataProvider countryDataProvider
|
371 | 361 | */
|
372 |
| - public function testSetRequest($countryCode, $foundCountryCode): void |
| 362 | + public function testSetRequest(array $requestData, array $rawRequestData): void |
373 | 363 | {
|
374 | 364 | /** @var RateRequest $request */
|
375 | 365 | $request = $this->helper->getObject(RateRequest::class);
|
376 |
| - $request->setData( |
377 |
| - [ |
378 |
| - 'orig_country' => 'USA', |
379 |
| - 'orig_region_code' => 'CA', |
380 |
| - 'orig_post_code' => 90230, |
381 |
| - 'orig_city' => 'Culver City', |
382 |
| - 'dest_country_id' => $countryCode |
383 |
| - ] |
384 |
| - ); |
385 |
| - |
386 |
| - $this->country |
387 |
| - ->method('load') |
388 |
| - ->withConsecutive([], [$countryCode]) |
389 |
| - ->willReturnSelf(); |
390 |
| - |
391 |
| - $this->country->method('getData') |
392 |
| - ->with('iso2_code') |
393 |
| - ->willReturn($foundCountryCode); |
394 |
| - |
| 366 | + $request->setData($requestData); |
395 | 367 | $this->model->setRequest($request);
|
| 368 | + $property = new \ReflectionProperty($this->model, '_rawRequest'); |
| 369 | + $property->setAccessible(true); |
| 370 | + $rawRequest = $property->getValue($this->model); |
| 371 | + $this->assertEquals($rawRequestData, array_intersect_key($rawRequest->getData(), $rawRequestData)); |
396 | 372 | }
|
397 | 373 |
|
398 | 374 | /**
|
399 |
| - * Get list of country variations. |
| 375 | + * Get list of request variations for setRequest. |
400 | 376 | *
|
401 | 377 | * @return array
|
402 | 378 | */
|
403 | 379 | public function countryDataProvider(): array
|
404 | 380 | {
|
405 | 381 | return [
|
406 |
| - ['countryCode' => 'PR', 'foundCountryCode' => null], |
407 |
| - ['countryCode' => 'US', 'foundCountryCode' => 'US'] |
| 382 | + [ |
| 383 | + [ |
| 384 | + 'orig_region_code' => 'CA', |
| 385 | + 'orig_postcode' => '90230', |
| 386 | + 'orig_country' => 'US', |
| 387 | + 'dest_region_code' => 'NY', |
| 388 | + 'dest_postcode' => '11236', |
| 389 | + 'dest_country_id' => 'US', |
| 390 | + ], |
| 391 | + [ |
| 392 | + 'orig_region_code' => 'CA', |
| 393 | + 'orig_postal' => '90230', |
| 394 | + 'orig_country' => 'US', |
| 395 | + 'dest_region_code' => 'NY', |
| 396 | + 'dest_postal' => '11236', |
| 397 | + 'dest_country' => 'US', |
| 398 | + ] |
| 399 | + ], |
| 400 | + [ |
| 401 | + [ |
| 402 | + 'orig_region_code' => 'CA', |
| 403 | + 'orig_postcode' => '90230', |
| 404 | + 'orig_country' => 'US', |
| 405 | + 'dest_region_code' => 'PR', |
| 406 | + 'dest_postcode' => '00968', |
| 407 | + 'dest_country_id' => 'US', |
| 408 | + ], |
| 409 | + [ |
| 410 | + 'orig_region_code' => 'CA', |
| 411 | + 'orig_postal' => '90230', |
| 412 | + 'orig_country' => 'US', |
| 413 | + 'dest_region_code' => 'PR', |
| 414 | + 'dest_postal' => '00968', |
| 415 | + 'dest_country' => 'PR', |
| 416 | + ] |
| 417 | + ], |
| 418 | + [ |
| 419 | + [ |
| 420 | + 'orig_region_code' => 'PR', |
| 421 | + 'orig_postcode' => '00968', |
| 422 | + 'orig_country' => 'US', |
| 423 | + 'dest_region_code' => 'CA', |
| 424 | + 'dest_postcode' => '90230', |
| 425 | + 'dest_country_id' => 'US', |
| 426 | + ], |
| 427 | + [ |
| 428 | + 'orig_region_code' => 'PR', |
| 429 | + 'orig_postal' => '00968', |
| 430 | + 'orig_country' => 'PR', |
| 431 | + 'dest_region_code' => 'CA', |
| 432 | + 'dest_postal' => '90230', |
| 433 | + 'dest_country' => 'US', |
| 434 | + ] |
| 435 | + ], |
408 | 436 | ];
|
409 | 437 | }
|
410 | 438 |
|
| 439 | + /** |
| 440 | + * @param array $requestData |
| 441 | + * @param array $expectedRequestData |
| 442 | + * @dataProvider requestToShipmentDataProvider |
| 443 | + */ |
| 444 | + public function testRequestToShipment(array $requestData, array $expectedRequestData): void |
| 445 | + { |
| 446 | + /** @var \Magento\Shipping\Model\Shipment\Request $request */ |
| 447 | + $request = $this->helper->getObject(\Magento\Shipping\Model\Shipment\Request::class); |
| 448 | + $request->setData($requestData); |
| 449 | + $request->setPackages([['items' => []]]); |
| 450 | + $this->model->requestToShipment($request); |
| 451 | + $this->assertEquals($expectedRequestData, array_intersect_key($request->getData(), $expectedRequestData)); |
| 452 | + } |
| 453 | + |
| 454 | + /** |
| 455 | + * Get list of request variations for requestToShipment. |
| 456 | + * |
| 457 | + * @return array |
| 458 | + */ |
| 459 | + public function requestToShipmentDataProvider(): array |
| 460 | + { |
| 461 | + return [ |
| 462 | + [ |
| 463 | + [ |
| 464 | + 'recipient_address_state_or_province_code' => 'CA', |
| 465 | + 'recipient_address_postal_code' => '90230', |
| 466 | + 'recipient_address_country_code' => 'US', |
| 467 | + 'shipper_address_state_or_province_code' => 'NY', |
| 468 | + 'shipper_address_postal_code' => '11236', |
| 469 | + 'shipper_address_country_code' => 'US', |
| 470 | + ], |
| 471 | + [ |
| 472 | + 'recipient_address_state_or_province_code' => 'CA', |
| 473 | + 'recipient_address_postal_code' => '90230', |
| 474 | + 'recipient_address_country_code' => 'US', |
| 475 | + 'shipper_address_state_or_province_code' => 'NY', |
| 476 | + 'shipper_address_postal_code' => '11236', |
| 477 | + 'shipper_address_country_code' => 'US', |
| 478 | + ] |
| 479 | + ], |
| 480 | + [ |
| 481 | + [ |
| 482 | + 'recipient_address_state_or_province_code' => 'CA', |
| 483 | + 'recipient_address_postal_code' => '90230', |
| 484 | + 'recipient_address_country_code' => 'US', |
| 485 | + 'shipper_address_state_or_province_code' => 'PR', |
| 486 | + 'shipper_address_postal_code' => '00968', |
| 487 | + 'shipper_address_country_code' => 'US', |
| 488 | + ], |
| 489 | + [ |
| 490 | + 'recipient_address_state_or_province_code' => 'CA', |
| 491 | + 'recipient_address_postal_code' => '90230', |
| 492 | + 'recipient_address_country_code' => 'US', |
| 493 | + 'shipper_address_state_or_province_code' => 'PR', |
| 494 | + 'shipper_address_postal_code' => '00968', |
| 495 | + 'shipper_address_country_code' => 'PR', |
| 496 | + ] |
| 497 | + ], |
| 498 | + [ |
| 499 | + [ |
| 500 | + 'recipient_address_state_or_province_code' => 'PR', |
| 501 | + 'recipient_address_postal_code' => '00968', |
| 502 | + 'recipient_address_country_code' => 'US', |
| 503 | + 'shipper_address_state_or_province_code' => 'CA', |
| 504 | + 'shipper_address_postal_code' => '90230', |
| 505 | + 'shipper_address_country_code' => 'US', |
| 506 | + ], |
| 507 | + [ |
| 508 | + 'recipient_address_state_or_province_code' => 'PR', |
| 509 | + 'recipient_address_postal_code' => '00968', |
| 510 | + 'recipient_address_country_code' => 'PR', |
| 511 | + 'shipper_address_state_or_province_code' => 'CA', |
| 512 | + 'shipper_address_postal_code' => '90230', |
| 513 | + 'shipper_address_country_code' => 'US', |
| 514 | + ] |
| 515 | + ], |
| 516 | + ]; |
| 517 | + } |
| 518 | + |
| 519 | + /** |
| 520 | + * @param string|null $id |
| 521 | + * @return Country |
| 522 | + */ |
| 523 | + public function getCountryById(?string $id): Country |
| 524 | + { |
| 525 | + $countries = [ |
| 526 | + 'US' => 'US' |
| 527 | + ]; |
| 528 | + $countryMock = $this->getMockBuilder(Country::class) |
| 529 | + ->disableOriginalConstructor() |
| 530 | + ->getMockForAbstractClass(); |
| 531 | + $countryMock->setData('iso2_code', $countries[$id] ?? null); |
| 532 | + return $countryMock; |
| 533 | + } |
| 534 | + |
411 | 535 | /**
|
412 | 536 | * @param string $carrierType
|
413 | 537 | * @param string $methodType
|
|
0 commit comments