232 lines
8.3 KiB
PHP
Executable File
232 lines
8.3 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Sales\Service\V1;
|
|
|
|
use Magento\Sales\Model\Order;
|
|
use Magento\Sales\Model\Order\Payment;
|
|
use Magento\Sales\Model\Order\Payment\Transaction;
|
|
use Magento\TestFramework\TestCase\WebapiAbstract;
|
|
|
|
/**
|
|
* Class TransactionReadTest
|
|
*/
|
|
class TransactionTest extends WebapiAbstract
|
|
{
|
|
/**
|
|
* Service read name
|
|
*/
|
|
const SERVICE_READ_NAME = 'salesTransactionRepositoryV1';
|
|
|
|
/**
|
|
* Resource path for REST
|
|
*/
|
|
const RESOURCE_PATH = '/V1/transactions';
|
|
|
|
/**
|
|
* Service version
|
|
*/
|
|
const SERVICE_VERSION = 'V1';
|
|
|
|
/**
|
|
* @var \Magento\Framework\ObjectManagerInterface
|
|
*/
|
|
protected $objectManager;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
|
|
}
|
|
|
|
/**
|
|
* Tests list of order transactions
|
|
*
|
|
* @magentoApiDataFixture Magento/Sales/_files/transactions_detailed.php
|
|
*/
|
|
public function testTransactionGet()
|
|
{
|
|
/** @var Order $order */
|
|
$order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
|
|
/**
|
|
* @var $transactionRepository \Magento\Sales\Model\Order\Payment\Transaction\Repository
|
|
*/
|
|
$transactionRepository = \Magento\Sales\Model\Order\Payment\Transaction\Repository::class;
|
|
$transactionRepository = $this->objectManager->create($transactionRepository);
|
|
$order->loadByIncrementId('100000006');
|
|
|
|
/** @var Payment $payment */
|
|
$payment = $order->getPayment();
|
|
/** @var Transaction $transaction */
|
|
$transaction = $transactionRepository->getByTransactionId('trx_auth', $payment->getId(), $order->getId());
|
|
|
|
$childTransactions = $transaction->getChildTransactions();
|
|
$childTransaction = reset($childTransactions);
|
|
|
|
$expectedData = $this->getPreparedTransactionData($transaction);
|
|
$childTransactionData = $this->getPreparedTransactionData($childTransaction);
|
|
$expectedData['child_transactions'][] = $childTransactionData;
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . '/' . $transaction->getId(),
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_READ_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => self::SERVICE_READ_NAME . 'get',
|
|
],
|
|
];
|
|
$result = $this->_webApiCall($serviceInfo, ['id' => $transaction->getId()]);
|
|
ksort($expectedData);
|
|
ksort($result);
|
|
$this->assertEquals($expectedData, $result);
|
|
}
|
|
|
|
/**
|
|
* Tests list of order transactions
|
|
* @magentoApiDataFixture Magento/Sales/_files/transactions_list.php
|
|
*/
|
|
public function testTransactionList()
|
|
{
|
|
/** @var Order $order */
|
|
$order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
|
|
/**
|
|
* @var $transactionRepository \Magento\Sales\Model\Order\Payment\Transaction\Repository
|
|
*/
|
|
$transactionRepository = \Magento\Sales\Model\Order\Payment\Transaction\Repository::class;
|
|
$transactionRepository = $this->objectManager->create($transactionRepository);
|
|
$order->loadByIncrementId('100000006');
|
|
|
|
/** @var Payment $payment */
|
|
$payment = $order->getPayment();
|
|
/** @var Transaction $transaction */
|
|
$transaction = $transactionRepository->getByTransactionId('trx_auth', $payment->getId(), $order->getId());
|
|
|
|
$childTransactions = $transaction->getChildTransactions();
|
|
|
|
$childTransaction = reset($childTransactions);
|
|
|
|
/** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */
|
|
$searchCriteriaBuilder = $this->objectManager->create(
|
|
\Magento\Framework\Api\SearchCriteriaBuilder::class
|
|
);
|
|
/** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */
|
|
$filterBuilder = $this->objectManager->create(
|
|
\Magento\Framework\Api\FilterBuilder::class
|
|
);
|
|
/** @var \Magento\Framework\Api\SortOrderBuilder $sortOrderBuilder */
|
|
$sortOrderBuilder = $this->objectManager->create(
|
|
\Magento\Framework\Api\SortOrderBuilder::class
|
|
);
|
|
$filter1 = $filterBuilder->setField('txn_id')
|
|
->setValue('%trx_auth%')
|
|
->setConditionType('like')
|
|
->create();
|
|
$filter2 = $filterBuilder->setField('txn_id')
|
|
->setValue('trx_capture')
|
|
->setConditionType('eq')
|
|
->create();
|
|
$filter3 = $filterBuilder->setField('parent_txn_id')
|
|
->setValue(null)
|
|
->setConditionType('null')
|
|
->create();
|
|
$filter4 = $filterBuilder->setField('is_closed')
|
|
->setValue(0)
|
|
->setConditionType('eq')
|
|
->create();
|
|
$sortOrder = $sortOrderBuilder->setField('parent_id')
|
|
->setDirection('ASC')
|
|
->create();
|
|
|
|
$searchCriteriaBuilder->addFilters([$filter1, $filter2]);
|
|
$searchCriteriaBuilder->addFilters([$filter3, $filter4]);
|
|
$searchCriteriaBuilder->addSortOrder($sortOrder);
|
|
$searchCriteriaBuilder->setPageSize(20);
|
|
$searchData = $searchCriteriaBuilder->create()->__toArray();
|
|
|
|
$requestData = ['searchCriteria' => $searchData];
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_READ_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => self::SERVICE_READ_NAME . 'getList',
|
|
],
|
|
];
|
|
$result = $this->_webApiCall($serviceInfo, $requestData);
|
|
$this->assertArrayHasKey('items', $result);
|
|
|
|
$transactionData = $this->getPreparedTransactionData($transaction);
|
|
$childTransactionData = $this->getPreparedTransactionData($childTransaction);
|
|
$transactionData['child_transactions'][] = $childTransactionData;
|
|
$expectedData = [$transactionData, $childTransactionData];
|
|
$this->assertEquals($expectedData, $result['items']);
|
|
$this->assertArrayHasKey('search_criteria', $result);
|
|
$this->assertEquals($searchData, $result['search_criteria']);
|
|
}
|
|
|
|
/**
|
|
* @param Transaction $transaction
|
|
* @return array
|
|
*/
|
|
private function getPreparedTransactionData(Transaction $transaction)
|
|
{
|
|
$additionalInfo = [];
|
|
foreach ($transaction->getAdditionalInformation() as $value) {
|
|
$additionalInfo[] = $value;
|
|
}
|
|
|
|
$expectedData = ['transaction_id' => (int)$transaction->getId()];
|
|
|
|
if ($transaction->getParentId() !== null) {
|
|
$expectedData['parent_id'] = (int)$transaction->getParentId();
|
|
}
|
|
|
|
$expectedData = array_merge(
|
|
$expectedData,
|
|
[
|
|
'order_id' => (int)$transaction->getOrderId(),
|
|
'payment_id' => (int)$transaction->getPaymentId(),
|
|
'txn_id' => $transaction->getTxnId(),
|
|
'parent_txn_id' => ($transaction->getParentTxnId() ? (string)$transaction->getParentTxnId() : null),
|
|
'txn_type' => $transaction->getTxnType(),
|
|
'is_closed' => (int)$transaction->getIsClosed(),
|
|
'additional_information' => ['data'],
|
|
'created_at' => $transaction->getCreatedAt(),
|
|
'child_transactions' => [],
|
|
]
|
|
);
|
|
|
|
return $expectedData;
|
|
}
|
|
|
|
/**
|
|
* @deprecated
|
|
* @return array
|
|
*/
|
|
public function filtersDataProvider()
|
|
{
|
|
/** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */
|
|
$filterBuilder = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
|
|
\Magento\Framework\Api\FilterBuilder::class
|
|
);
|
|
|
|
return [
|
|
[
|
|
[
|
|
$filterBuilder->setField('created_at')->setValue('2020-12-12 00:00:00')
|
|
->setConditionType('lteq')->create(),
|
|
],
|
|
]
|
|
];
|
|
}
|
|
}
|