CreditMemoCreateRefundTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Service\V1;
  7. use Magento\Sales\Api\OrderRepositoryInterface;
  8. use Magento\Sales\Model\Order;
  9. use Magento\TestFramework\TestCase\WebapiAbstract;
  10. /**
  11. * Class CreditMemoCreateRefundTest
  12. */
  13. class CreditMemoCreateRefundTest extends WebapiAbstract
  14. {
  15. const RESOURCE_PATH = '/V1/creditmemo/refund';
  16. const SERVICE_READ_NAME = 'salesCreditmemoManagementV1';
  17. const SERVICE_VERSION = 'V1';
  18. /**
  19. * @var \Magento\Framework\ObjectManagerInterface
  20. */
  21. protected $objectManager;
  22. protected function setUp()
  23. {
  24. $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  25. }
  26. /**
  27. * @magentoApiDataFixture Magento/Sales/_files/invoice.php
  28. */
  29. public function testInvoke()
  30. {
  31. /** @var \Magento\Sales\Model\Order $order */
  32. $orderCollection = $this->objectManager->get(\Magento\Sales\Model\ResourceModel\Order\Collection::class);
  33. $order = $orderCollection->getFirstItem();
  34. $items = [];
  35. if (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
  36. $items = $this->getItemsForRest($order);
  37. } else {
  38. $items = $this->getItemsForSoap($order);
  39. }
  40. $serviceInfo = [
  41. 'rest' => [
  42. 'resourcePath' => self::RESOURCE_PATH,
  43. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
  44. ],
  45. 'soap' => [
  46. 'service' => self::SERVICE_READ_NAME,
  47. 'serviceVersion' => self::SERVICE_VERSION,
  48. 'operation' => self::SERVICE_READ_NAME.'refund',
  49. ],
  50. ];
  51. $data = [
  52. 'order_id' => $order->getId(),
  53. 'subtotal' => $order->getSubtotal(),
  54. 'grand_total' => $order->getGrandTotal(),
  55. 'base_grand_total' => $order->getBaseGrandTotal(),
  56. 'base_shipping_amount' => $order->getBaseShippingAmount(),
  57. 'shipping_address_id' => $order->getShippigAddressId(),
  58. 'billing_address_id' => $order->getBillingAddressId(),
  59. 'invoiceId' => $order->getInvoiceCollection()->getFirstItem()->getId(),
  60. 'adjustment' => null,
  61. 'adjustment_negative' => null,
  62. 'adjustment_positive' => null,
  63. 'base_adjustment' => null,
  64. 'base_adjustment_negative' => null,
  65. 'base_adjustment_positive' => null,
  66. 'base_currency_code' => null,
  67. 'base_discount_amount' => null,
  68. 'base_discount_tax_compensation_amount' => null,
  69. 'base_shipping_discount_tax_compensation_amnt' => null,
  70. 'base_shipping_incl_tax' => null,
  71. 'base_shipping_tax_amount' => null,
  72. 'base_subtotal' => null,
  73. 'base_subtotal_incl_tax' => null,
  74. 'base_tax_amount' => null,
  75. 'base_to_global_rate' => null,
  76. 'base_to_order_rate' => null,
  77. 'created_at' => null,
  78. 'creditmemo_status' => null,
  79. 'discount_amount' => null,
  80. 'discount_description' => null,
  81. 'email_sent' => null,
  82. 'entity_id' => null,
  83. 'global_currency_code' => null,
  84. 'discount_tax_compensation_amount' => null,
  85. 'increment_id' => null,
  86. 'invoice_id' => null,
  87. 'order_currency_code' => null,
  88. 'shipping_amount' => null,
  89. 'shipping_discount_tax_compensation_amount' => null,
  90. 'shipping_incl_tax' => null,
  91. 'shipping_tax_amount' => null,
  92. 'state' => null,
  93. 'store_currency_code' => null,
  94. 'store_id' => null,
  95. 'store_to_base_rate' => null,
  96. 'store_to_order_rate' => null,
  97. 'subtotal_incl_tax' => null,
  98. 'tax_amount' => null,
  99. 'transaction_id' => null,
  100. 'updated_at' => null,
  101. 'items' => $items,
  102. ];
  103. $result = $this->_webApiCall(
  104. $serviceInfo,
  105. ['creditmemo' => $data, 'offline_requested' => true]
  106. );
  107. $this->assertNotEmpty($result);
  108. $order = $this->objectManager->get(OrderRepositoryInterface::class)->get($order->getId());
  109. $this->assertEquals(Order::STATE_CLOSED, $order->getState());
  110. }
  111. private function getItemsForRest($order)
  112. {
  113. $items = [];
  114. /** @var \Magento\Sales\Model\Order\Item $orderItem */
  115. foreach ($order->getAllItems() as $orderItem) {
  116. $items[] = [
  117. 'order_item_id' => $orderItem->getId(),
  118. 'qty' => $orderItem->getQtyInvoiced(),
  119. 'price' => $orderItem->getPrice(),
  120. 'row_total' => $orderItem->getRowTotal(),
  121. 'entity_id' => null,
  122. ];
  123. }
  124. return $items;
  125. }
  126. private function getItemsForSoap($order)
  127. {
  128. $items = [];
  129. /** @var \Magento\Sales\Model\Order\Item $orderItem */
  130. foreach ($order->getAllItems() as $orderItem) {
  131. $items[] = array_merge($orderItem->getData(), [
  132. 'order_item_id' => $orderItem->getId(),
  133. 'qty' => $orderItem->getQtyInvoiced(),
  134. 'price' => $orderItem->getPrice(),
  135. 'row_total' => $orderItem->getRowTotal(),
  136. 'entity_id' => null,
  137. ]);
  138. }
  139. return $items;
  140. }
  141. }