GuestShippingMethodManagementTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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\Quote\Api\Data\ShippingMethodInterface;
  8. use Magento\TestFramework\ObjectManager;
  9. use Magento\TestFramework\TestCase\WebapiAbstract;
  10. class GuestShippingMethodManagementTest extends WebapiAbstract
  11. {
  12. const SERVICE_VERSION = 'V1';
  13. const SERVICE_NAME = 'quoteGuestShippingMethodManagementV1';
  14. const RESOURCE_PATH = '/V1/guest-carts/';
  15. /**
  16. * @var ObjectManager
  17. */
  18. private $objectManager;
  19. /**
  20. * @var \Magento\Quote\Model\Quote
  21. */
  22. protected $quote;
  23. /**
  24. * @var \Magento\Quote\Model\Quote\TotalsCollector
  25. */
  26. protected $totalsCollector;
  27. protected function setUp()
  28. {
  29. $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  30. $this->quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  31. $this->totalsCollector = $this->objectManager->create(\Magento\Quote\Model\Quote\TotalsCollector::class);
  32. }
  33. /**
  34. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_and_address.php
  35. *
  36. */
  37. public function testGetListForVirtualCart()
  38. {
  39. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  40. $cartId = $quote->load('test_order_with_virtual_product', 'reserved_order_id')->getId();
  41. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  42. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  43. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  44. ->create();
  45. $quoteIdMask->load($cartId, 'quote_id');
  46. //Use masked cart Id
  47. $cartId = $quoteIdMask->getMaskedId();
  48. $this->assertEquals([], $this->_webApiCall($this->getListServiceInfo($cartId), ["cartId" => $cartId]));
  49. }
  50. /**
  51. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
  52. */
  53. public function testGetList()
  54. {
  55. /** @var \Magento\Quote\Model\Quote $quote */
  56. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  57. $quote->load('test_order_1', 'reserved_order_id');
  58. $cartId = $quote->getId();
  59. if (!$cartId) {
  60. $this->fail('quote fixture failed');
  61. }
  62. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  63. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  64. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  65. ->create();
  66. $quoteIdMask->load($cartId, 'quote_id');
  67. //Use masked cart Id
  68. $cartId = $quoteIdMask->getMaskedId();
  69. $quote->getShippingAddress()->collectShippingRates();
  70. $expectedRates = $quote->getShippingAddress()->getGroupedAllShippingRates();
  71. $expectedData = $this->convertRates($expectedRates, $quote->getQuoteCurrencyCode());
  72. $requestData = ["cartId" => $cartId];
  73. $returnedRates = $this->_webApiCall($this->getListServiceInfo($cartId), $requestData);
  74. $this->assertEquals($expectedData, $returnedRates);
  75. }
  76. /**
  77. * Service info
  78. *
  79. * @param int $cartId
  80. * @return array
  81. */
  82. protected function getListServiceInfo($cartId)
  83. {
  84. return [
  85. 'rest' => [
  86. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/shipping-methods',
  87. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  88. ],
  89. 'soap' => [
  90. 'service' => self::SERVICE_NAME,
  91. 'serviceVersion' => self::SERVICE_VERSION,
  92. 'operation' => self::SERVICE_NAME . 'GetList',
  93. ],
  94. ];
  95. }
  96. /**
  97. * Convert rate models array to data array
  98. *
  99. * @param string $currencyCode
  100. * @param \Magento\Quote\Model\Quote\Address\Rate[] $groupedRates
  101. * @return array
  102. */
  103. protected function convertRates($groupedRates, $currencyCode)
  104. {
  105. $result = [];
  106. /** @var \Magento\Quote\Model\Cart\ShippingMethodConverter $converter */
  107. $converter = $this->objectManager->create(\Magento\Quote\Model\Cart\ShippingMethodConverter::class);
  108. foreach ($groupedRates as $carrierRates) {
  109. foreach ($carrierRates as $rate) {
  110. $result[] = $converter->modelToDataObject($rate, $currencyCode)->__toArray();
  111. }
  112. }
  113. return $result;
  114. }
  115. }