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(),
 | 
						|
                ],
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |