GuestCouponManagementTest.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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 GuestCouponManagementTest extends WebapiAbstract
  10. {
  11. const SERVICE_VERSION = 'V1';
  12. const SERVICE_NAME = 'quoteGuestCouponManagementV1';
  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. public function tearDown()
  23. {
  24. $createdQuotes = ['test_order_1', 'test01'];
  25. /** @var \Magento\Quote\Model\Quote $quote */
  26. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  27. foreach ($createdQuotes as $quoteId) {
  28. $quote->load($quoteId, 'reserved_order_id');
  29. $quote->delete();
  30. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  31. $quoteIdMask = $this->objectManager->create(\Magento\Quote\Model\QuoteIdMask::class);
  32. $quoteIdMask->load($quoteId, 'quote_id');
  33. $quoteIdMask->delete();
  34. }
  35. }
  36. protected function getQuoteMaskedId($quoteId)
  37. {
  38. /** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
  39. $quoteIdMask = $this->objectManager->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)->create();
  40. $quoteIdMask->load($quoteId, 'quote_id');
  41. return $quoteIdMask->getMaskedId();
  42. }
  43. /**
  44. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_coupon_saved.php
  45. */
  46. public function testGet()
  47. {
  48. /** @var \Magento\Quote\Model\Quote $quote */
  49. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  50. $quote->load('test_order_1', 'reserved_order_id');
  51. $cartId = $this->getQuoteMaskedId($quote->getId());
  52. $couponCode = $quote->getCouponCode();
  53. $serviceInfo = [
  54. 'rest' => [
  55. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/coupons/' ,
  56. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  57. ],
  58. 'soap' => [
  59. 'service' => self::SERVICE_NAME,
  60. 'serviceVersion' => self::SERVICE_VERSION,
  61. 'operation' => self::SERVICE_NAME . 'Get',
  62. ],
  63. ];
  64. $requestData = ["cartId" => $cartId];
  65. $this->assertEquals($couponCode, $this->_webApiCall($serviceInfo, $requestData));
  66. }
  67. /**
  68. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_coupon_saved.php
  69. */
  70. public function testDelete()
  71. {
  72. /** @var \Magento\Quote\Model\Quote $quote */
  73. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  74. $quote->load('test_order_1', 'reserved_order_id');
  75. $cartId = $this->getQuoteMaskedId($quote->getId());
  76. $serviceInfo = [
  77. 'rest' => [
  78. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/coupons',
  79. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
  80. ],
  81. 'soap' => [
  82. 'service' => self::SERVICE_NAME,
  83. 'serviceVersion' => self::SERVICE_VERSION,
  84. 'operation' => self::SERVICE_NAME . 'Remove',
  85. ],
  86. ];
  87. $requestData = ["cartId" => $cartId];
  88. $this->assertTrue($this->_webApiCall($serviceInfo, $requestData));
  89. $quote->load('test_order_1', 'reserved_order_id');
  90. $this->assertEquals('', $quote->getCouponCode());
  91. }
  92. /**
  93. * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
  94. * @expectedException \Exception
  95. * @expectedExceptionMessage The coupon code isn't valid. Verify the code and try again.
  96. */
  97. public function testSetCouponThrowsExceptionIfCouponDoesNotExist()
  98. {
  99. /** @var \Magento\Quote\Model\Quote $quote */
  100. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  101. $quote->load('test_order_1', 'reserved_order_id');
  102. $cartId = $this->getQuoteMaskedId($quote->getId());
  103. $couponCode = 'invalid_coupon_code';
  104. $serviceInfo = [
  105. 'rest' => [
  106. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/coupons/' . $couponCode,
  107. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
  108. ],
  109. 'soap' => [
  110. 'service' => self::SERVICE_NAME,
  111. 'serviceVersion' => self::SERVICE_VERSION,
  112. 'operation' => self::SERVICE_NAME . 'Set',
  113. ],
  114. ];
  115. $requestData = [
  116. "cartId" => $cartId,
  117. "couponCode" => $couponCode,
  118. ];
  119. $this->_webApiCall($serviceInfo, $requestData);
  120. }
  121. /**
  122. * @magentoApiDataFixture Magento/Sales/_files/quote.php
  123. * @magentoApiDataFixture Magento/Checkout/_files/discount_10percent.php
  124. */
  125. public function testSetCouponSuccess()
  126. {
  127. /** @var \Magento\Quote\Model\Quote $quote */
  128. $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  129. $quote->load('test01', 'reserved_order_id');
  130. $cartId = $this->getQuoteMaskedId($quote->getId());
  131. $salesRule = $this->objectManager->create(\Magento\SalesRule\Model\Rule::class);
  132. $salesRuleId = $this->objectManager->get(\Magento\Framework\Registry::class)
  133. ->registry('Magento/Checkout/_file/discount_10percent');
  134. $salesRule->load($salesRuleId);
  135. $couponCode = $salesRule->getPrimaryCoupon()->getCode();
  136. $serviceInfo = [
  137. 'rest' => [
  138. 'resourcePath' => self::RESOURCE_PATH . $cartId . '/coupons/' . $couponCode,
  139. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
  140. ],
  141. 'soap' => [
  142. 'service' => self::SERVICE_NAME,
  143. 'serviceVersion' => self::SERVICE_VERSION,
  144. 'operation' => self::SERVICE_NAME . 'Set',
  145. ],
  146. ];
  147. $requestData = [
  148. "cartId" => $cartId,
  149. "couponCode" => $couponCode,
  150. ];
  151. $this->assertTrue($this->_webApiCall($serviceInfo, $requestData));
  152. $quoteWithCoupon = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
  153. $quoteWithCoupon->load('test01', 'reserved_order_id');
  154. $this->assertEquals($quoteWithCoupon->getCouponCode(), $couponCode);
  155. }
  156. }