TransactionTest.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  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\Model\Order;
  8. use Magento\Sales\Model\Order\Payment;
  9. use Magento\Sales\Model\Order\Payment\Transaction;
  10. use Magento\TestFramework\TestCase\WebapiAbstract;
  11. /**
  12. * Class TransactionReadTest
  13. */
  14. class TransactionTest extends WebapiAbstract
  15. {
  16. /**
  17. * Service read name
  18. */
  19. const SERVICE_READ_NAME = 'salesTransactionRepositoryV1';
  20. /**
  21. * Resource path for REST
  22. */
  23. const RESOURCE_PATH = '/V1/transactions';
  24. /**
  25. * Service version
  26. */
  27. const SERVICE_VERSION = 'V1';
  28. /**
  29. * @var \Magento\Framework\ObjectManagerInterface
  30. */
  31. protected $objectManager;
  32. protected function setUp()
  33. {
  34. $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  35. }
  36. /**
  37. * Tests list of order transactions
  38. *
  39. * @magentoApiDataFixture Magento/Sales/_files/transactions_detailed.php
  40. */
  41. public function testTransactionGet()
  42. {
  43. /** @var Order $order */
  44. $order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
  45. /**
  46. * @var $transactionRepository \Magento\Sales\Model\Order\Payment\Transaction\Repository
  47. */
  48. $transactionRepository = \Magento\Sales\Model\Order\Payment\Transaction\Repository::class;
  49. $transactionRepository = $this->objectManager->create($transactionRepository);
  50. $order->loadByIncrementId('100000006');
  51. /** @var Payment $payment */
  52. $payment = $order->getPayment();
  53. /** @var Transaction $transaction */
  54. $transaction = $transactionRepository->getByTransactionId('trx_auth', $payment->getId(), $order->getId());
  55. $childTransactions = $transaction->getChildTransactions();
  56. $childTransaction = reset($childTransactions);
  57. $expectedData = $this->getPreparedTransactionData($transaction);
  58. $childTransactionData = $this->getPreparedTransactionData($childTransaction);
  59. $expectedData['child_transactions'][] = $childTransactionData;
  60. $serviceInfo = [
  61. 'rest' => [
  62. 'resourcePath' => self::RESOURCE_PATH . '/' . $transaction->getId(),
  63. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  64. ],
  65. 'soap' => [
  66. 'service' => self::SERVICE_READ_NAME,
  67. 'serviceVersion' => self::SERVICE_VERSION,
  68. 'operation' => self::SERVICE_READ_NAME . 'get',
  69. ],
  70. ];
  71. $result = $this->_webApiCall($serviceInfo, ['id' => $transaction->getId()]);
  72. ksort($expectedData);
  73. ksort($result);
  74. $this->assertEquals($expectedData, $result);
  75. }
  76. /**
  77. * Tests list of order transactions
  78. * @magentoApiDataFixture Magento/Sales/_files/transactions_list.php
  79. */
  80. public function testTransactionList()
  81. {
  82. /** @var Order $order */
  83. $order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
  84. /**
  85. * @var $transactionRepository \Magento\Sales\Model\Order\Payment\Transaction\Repository
  86. */
  87. $transactionRepository = \Magento\Sales\Model\Order\Payment\Transaction\Repository::class;
  88. $transactionRepository = $this->objectManager->create($transactionRepository);
  89. $order->loadByIncrementId('100000006');
  90. /** @var Payment $payment */
  91. $payment = $order->getPayment();
  92. /** @var Transaction $transaction */
  93. $transaction = $transactionRepository->getByTransactionId('trx_auth', $payment->getId(), $order->getId());
  94. $childTransactions = $transaction->getChildTransactions();
  95. $childTransaction = reset($childTransactions);
  96. /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */
  97. $searchCriteriaBuilder = $this->objectManager->create(
  98. \Magento\Framework\Api\SearchCriteriaBuilder::class
  99. );
  100. /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */
  101. $filterBuilder = $this->objectManager->create(
  102. \Magento\Framework\Api\FilterBuilder::class
  103. );
  104. /** @var \Magento\Framework\Api\SortOrderBuilder $sortOrderBuilder */
  105. $sortOrderBuilder = $this->objectManager->create(
  106. \Magento\Framework\Api\SortOrderBuilder::class
  107. );
  108. $filter1 = $filterBuilder->setField('txn_id')
  109. ->setValue('%trx_auth%')
  110. ->setConditionType('like')
  111. ->create();
  112. $filter2 = $filterBuilder->setField('txn_id')
  113. ->setValue('trx_capture')
  114. ->setConditionType('eq')
  115. ->create();
  116. $filter3 = $filterBuilder->setField('parent_txn_id')
  117. ->setValue(null)
  118. ->setConditionType('null')
  119. ->create();
  120. $filter4 = $filterBuilder->setField('is_closed')
  121. ->setValue(0)
  122. ->setConditionType('eq')
  123. ->create();
  124. $sortOrder = $sortOrderBuilder->setField('parent_id')
  125. ->setDirection('ASC')
  126. ->create();
  127. $searchCriteriaBuilder->addFilters([$filter1, $filter2]);
  128. $searchCriteriaBuilder->addFilters([$filter3, $filter4]);
  129. $searchCriteriaBuilder->addSortOrder($sortOrder);
  130. $searchData = $searchCriteriaBuilder->create()->__toArray();
  131. $requestData = ['searchCriteria' => $searchData];
  132. $serviceInfo = [
  133. 'rest' => [
  134. 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
  135. 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
  136. ],
  137. 'soap' => [
  138. 'service' => self::SERVICE_READ_NAME,
  139. 'serviceVersion' => self::SERVICE_VERSION,
  140. 'operation' => self::SERVICE_READ_NAME . 'getList',
  141. ],
  142. ];
  143. $result = $this->_webApiCall($serviceInfo, $requestData);
  144. $this->assertArrayHasKey('items', $result);
  145. $transactionData = $this->getPreparedTransactionData($transaction);
  146. $childTransactionData = $this->getPreparedTransactionData($childTransaction);
  147. $transactionData['child_transactions'][] = $childTransactionData;
  148. $expectedData = [$transactionData, $childTransactionData];
  149. $this->assertEquals($expectedData, $result['items']);
  150. $this->assertArrayHasKey('search_criteria', $result);
  151. $this->assertEquals($searchData, $result['search_criteria']);
  152. }
  153. /**
  154. * @param Transaction $transaction
  155. * @return array
  156. */
  157. private function getPreparedTransactionData(Transaction $transaction)
  158. {
  159. $additionalInfo = [];
  160. foreach ($transaction->getAdditionalInformation() as $value) {
  161. $additionalInfo[] = $value;
  162. }
  163. $expectedData = ['transaction_id' => (int)$transaction->getId()];
  164. if ($transaction->getParentId() !== null) {
  165. $expectedData['parent_id'] = (int)$transaction->getParentId();
  166. }
  167. $expectedData = array_merge(
  168. $expectedData,
  169. [
  170. 'order_id' => (int)$transaction->getOrderId(),
  171. 'payment_id' => (int)$transaction->getPaymentId(),
  172. 'txn_id' => $transaction->getTxnId(),
  173. 'parent_txn_id' => ($transaction->getParentTxnId() ? (string)$transaction->getParentTxnId() : null),
  174. 'txn_type' => $transaction->getTxnType(),
  175. 'is_closed' => (int)$transaction->getIsClosed(),
  176. 'additional_information' => ['data'],
  177. 'created_at' => $transaction->getCreatedAt(),
  178. 'child_transactions' => [],
  179. ]
  180. );
  181. return $expectedData;
  182. }
  183. /**
  184. * @deprecated
  185. * @return array
  186. */
  187. public function filtersDataProvider()
  188. {
  189. /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */
  190. $filterBuilder = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  191. \Magento\Framework\Api\FilterBuilder::class
  192. );
  193. return [
  194. [
  195. [
  196. $filterBuilder->setField('created_at')->setValue('2020-12-12 00:00:00')
  197. ->setConditionType('lteq')->create(),
  198. ],
  199. ]
  200. ];
  201. }
  202. }