GuestShipmentEstimationTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Quote\Api;
  7. use Magento\TestFramework\ObjectManager;
  8. use Magento\TestFramework\TestCase\WebapiAbstract;
  9. use Magento\Quote\Api\Data\AddressInterface;
  10. class GuestShipmentEstimationTest extends WebapiAbstract
  11. {
  12. const SERVICE_VERSION = 'V1';
  13. const SERVICE_NAME = 'quoteGuestShipmentEstimationV1';
  14. const RESOURCE_PATH = '/V1/guest-carts/';
  15. /**
  16. * @var ObjectManager
  17. */
  18. private $objectManager;
  19. protected function setUp()
  20. {
  21. $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  22. }
  23. /**
  24. * @magentoApiDataFixture Magento/SalesRule/_files/cart_rule_free_shipping.php
  25. * @magentoApiDataFixture Magento/Sales/_files/quote.php
  26. */
  27. public function testEstimateByExtendedAddress()
  28. {
  29. /** @var \Magento\Quote\Model\Quote $quote */
  30. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  31. $quote->load('test01', 'reserved_order_id');
  32. $cartId = $quote->getId();
  33. if (!$cartId) {
  34. $this->fail('quote fixture failed');
  35. }
  36. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  37. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  38. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  39. ->create();
  40. $quoteIdMask->load($cartId, 'quote_id');
  41. //Use masked cart Id
  42. $cartId = $quoteIdMask->getMaskedId();
  43. $serviceInfo = [
  44. 'rest' => [
  45. 'resourcePath' => '/V1/guest-carts/' . $cartId . '/estimate-shipping-methods',
  46. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
  47. ],
  48. 'soap' => [
  49. 'service' => self::SERVICE_NAME,
  50. 'serviceVersion' => 'V1',
  51. 'operation' => self::SERVICE_NAME . 'EstimateByExtendedAddress',
  52. ],
  53. ];
  54. if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
  55. /** @var \Magento\Quote\Model\Quote\Address $address */
  56. $address = $quote->getBillingAddress();
  57. $data = [
  58. AddressInterface::KEY_ID => (int)$address->getId(),
  59. AddressInterface::KEY_REGION => $address->getRegion(),
  60. AddressInterface::KEY_REGION_ID => $address->getRegionId(),
  61. AddressInterface::KEY_REGION_CODE => $address->getRegionCode(),
  62. AddressInterface::KEY_COUNTRY_ID => $address->getCountryId(),
  63. AddressInterface::KEY_STREET => $address->getStreet(),
  64. AddressInterface::KEY_COMPANY => $address->getCompany(),
  65. AddressInterface::KEY_TELEPHONE => $address->getTelephone(),
  66. AddressInterface::KEY_POSTCODE => $address->getPostcode(),
  67. AddressInterface::KEY_CITY => $address->getCity(),
  68. AddressInterface::KEY_FIRSTNAME => $address->getFirstname(),
  69. AddressInterface::KEY_LASTNAME => $address->getLastname(),
  70. AddressInterface::KEY_CUSTOMER_ID => $address->getCustomerId(),
  71. AddressInterface::KEY_EMAIL => $address->getEmail(),
  72. AddressInterface::SAME_AS_BILLING => $address->getSameAsBilling(),
  73. AddressInterface::CUSTOMER_ADDRESS_ID => $address->getCustomerAddressId(),
  74. AddressInterface::SAVE_IN_ADDRESS_BOOK => $address->getSaveInAddressBook(),
  75. ];
  76. $requestData = [
  77. 'cartId' => $cartId,
  78. 'address' => $data
  79. ];
  80. } else {
  81. $requestData = [
  82. 'address' => [
  83. 'country_id' => "US",
  84. 'postcode' => null,
  85. 'region' => null,
  86. 'region_id' => null
  87. ],
  88. ];
  89. }
  90. // Cart must be anonymous (see fixture)
  91. $this->assertEmpty($quote->getCustomerId());
  92. $result = $this->_webApiCall($serviceInfo, $requestData);
  93. $this->assertNotEmpty($result);
  94. $this->assertEquals(1, count($result));
  95. foreach ($result as $rate) {
  96. $this->assertEquals("flatrate", $rate['carrier_code']);
  97. $this->assertEquals(0, $rate['amount']);
  98. }
  99. }
  100. }