GuestCartItemRepositoryTest.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\Quote\Api;
  8. use Magento\TestFramework\TestCase\WebapiAbstract;
  9. class GuestCartItemRepositoryTest extends WebapiAbstract
  10. {
  11. const SERVICE_VERSION = 'V1';
  12. const SERVICE_NAME = 'quoteGuestCartItemRepositoryV1';
  13. const RESOURCE_PATH = '/V1/guest-carts/';
  14. /**
  15. * @var \Magento\TestFramework\ObjectManager
  16. */
  17. protected $objectManager;
  18. protected function setUp()
  19. {
  20. $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  21. }
  22. /**
  23. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
  24. */
  25. public function testGetList()
  26. {
  27. /** @var \Magento\Quote\Model\Quote $quote */
  28. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  29. $quote->load('test_order_item_with_items', 'reserved_order_id');
  30. $cartId = $quote->getId();
  31. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  32. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  33. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  34. ->create();
  35. $quoteIdMask->load($cartId, 'quote_id');
  36. //Use masked cart Id
  37. $cartId = $quoteIdMask->getMaskedId();
  38. $output = [];
  39. /** @var \Magento\Quote\Api\Data\CartItemInterface $item */
  40. foreach ($quote->getAllItems() as $item) {
  41. //Set masked Cart ID
  42. $item->setQuoteId($cartId);
  43. $data = [
  44. 'item_id' => $item->getItemId(),
  45. 'sku' => $item->getSku(),
  46. 'name' => $item->getName(),
  47. 'price' => $item->getPrice(),
  48. 'qty' => $item->getQty(),
  49. 'product_type' => $item->getProductType(),
  50. 'quote_id' => $item->getQuoteId()
  51. ];
  52. $output[] = $data;
  53. }
  54. $serviceInfo = [
  55. 'rest' => [
  56. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/items',
  57. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  58. ],
  59. 'soap' => [
  60. 'service' => self::SERVICE_NAME,
  61. 'serviceVersion' => self::SERVICE_VERSION,
  62. 'operation' => self::SERVICE_NAME . 'GetList',
  63. ],
  64. ];
  65. $requestData = ["cartId" => $cartId];
  66. $this->assertEquals($output, $this->_webApiCall($serviceInfo, $requestData));
  67. }
  68. /**
  69. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
  70. * @magentoApiDataFixture Magento/Catalog/_files/product_without_options.php
  71. */
  72. public function testAddItem()
  73. {
  74. /** @var \Magento\Catalog\Model\Product $product */
  75. $product = $this->objectManager->create(\Magento\Catalog\Model\Product::class)->load(2);
  76. $productSku = $product->getSku();
  77. /** @var \Magento\Quote\Model\Quote $quote */
  78. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  79. $quote->load('test_order_1', 'reserved_order_id');
  80. $cartId = $quote->getId();
  81. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  82. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  83. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  84. ->create();
  85. $quoteIdMask->load($cartId, 'quote_id');
  86. //Use masked cart Id
  87. $cartId = $quoteIdMask->getMaskedId();
  88. $serviceInfo = [
  89. 'rest' => [
  90. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/items',
  91. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
  92. ],
  93. 'soap' => [
  94. 'service' => self::SERVICE_NAME,
  95. 'serviceVersion' => self::SERVICE_VERSION,
  96. 'operation' => self::SERVICE_NAME . 'Save',
  97. ],
  98. ];
  99. $requestData = [
  100. "cartItem" => [
  101. "sku" => $productSku,
  102. "qty" => 7,
  103. "quote_id" => $cartId,
  104. ],
  105. ];
  106. $this->_webApiCall($serviceInfo, $requestData);
  107. $this->assertTrue($quote->hasProductId(2));
  108. $this->assertEquals(7, $quote->getItemByProduct($product)->getQty());
  109. }
  110. /**
  111. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
  112. */
  113. public function testRemoveItem()
  114. {
  115. /** @var \Magento\Quote\Model\Quote $quote */
  116. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  117. $quote->load('test_order_item_with_items', 'reserved_order_id');
  118. $cartId = $quote->getId();
  119. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  120. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  121. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  122. ->create();
  123. $quoteIdMask->load($cartId, 'quote_id');
  124. //Use masked cart Id
  125. $cartId = $quoteIdMask->getMaskedId();
  126. $product = $this->objectManager->create(\Magento\Catalog\Model\Product::class);
  127. $productId = $product->getIdBySku('simple_one');
  128. $product->load($productId);
  129. $itemId = $quote->getItemByProduct($product)->getId();
  130. $serviceInfo = [
  131. 'rest' => [
  132. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/items/' . $itemId,
  133. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
  134. ],
  135. 'soap' => [
  136. 'service' => self::SERVICE_NAME,
  137. 'serviceVersion' => self::SERVICE_VERSION,
  138. 'operation' => self::SERVICE_NAME . 'DeleteById',
  139. ],
  140. ];
  141. $requestData = [
  142. "cartId" => $cartId,
  143. "itemId" => $itemId,
  144. ];
  145. $this->assertTrue($this->_webApiCall($serviceInfo, $requestData));
  146. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  147. $quote->load('test_order_item_with_items', 'reserved_order_id');
  148. $this->assertFalse($quote->hasProductId($productId));
  149. }
  150. /**
  151. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
  152. */
  153. public function testUpdateItem()
  154. {
  155. /** @var \Magento\Quote\Model\Quote $quote */
  156. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  157. $quote->load('test_order_item_with_items', 'reserved_order_id');
  158. $cartId = $quote->getId();
  159. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  160. $quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  161. ->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
  162. ->create();
  163. $quoteIdMask->load($cartId, 'quote_id');
  164. //Use masked cart Id
  165. $cartId = $quoteIdMask->getMaskedId();
  166. $product = $this->objectManager->create(\Magento\Catalog\Model\Product::class);
  167. $productId = $product->getIdBySku('simple_one');
  168. $product->load($productId);
  169. $itemId = $quote->getItemByProduct($product)->getId();
  170. $serviceInfo = [
  171. 'rest' => [
  172. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/items/' . $itemId,
  173. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
  174. ],
  175. 'soap' => [
  176. 'service' => self::SERVICE_NAME,
  177. 'serviceVersion' => self::SERVICE_VERSION,
  178. 'operation' => self::SERVICE_NAME . 'Save',
  179. ],
  180. ];
  181. if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
  182. $requestData = [
  183. "cartItem" => [
  184. "qty" => 5,
  185. "quote_id" => $cartId,
  186. "itemId" => $itemId,
  187. ],
  188. ];
  189. } else {
  190. $requestData = [
  191. "cartItem" => [
  192. "qty" => 5,
  193. "quote_id" => $cartId,
  194. ],
  195. ];
  196. }
  197. $this->_webApiCall($serviceInfo, $requestData);
  198. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  199. $quote->load('test_order_item_with_items', 'reserved_order_id');
  200. $this->assertTrue($quote->hasProductId(1));
  201. $item = $quote->getItemByProduct($product);
  202. $this->assertEquals(5, $item->getQty());
  203. $this->assertEquals($itemId, $item->getItemId());
  204. }
  205. }