RefundDataBuilderTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Test\Unit\Gateway\Request;
  7. use Magento\Braintree\Gateway\Request\PaymentDataBuilder;
  8. use Magento\Braintree\Gateway\Request\RefundDataBuilder;
  9. use Magento\Braintree\Gateway\SubjectReader;
  10. use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
  11. use Magento\Sales\Api\Data\TransactionInterface;
  12. use Magento\Sales\Model\Order\Payment;
  13. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  14. /**
  15. * Tests \Magento\Braintree\Gateway\Request\RefundDataBuilder.
  16. */
  17. class RefundDataBuilderTest extends \PHPUnit\Framework\TestCase
  18. {
  19. /**
  20. * @var SubjectReader|MockObject
  21. */
  22. private $subjectReaderMock;
  23. /**
  24. * @var PaymentDataObjectInterface|MockObject
  25. */
  26. private $paymentDOMock;
  27. /**
  28. * @var Payment|MockObject
  29. */
  30. private $paymentModelMock;
  31. /**
  32. * @var RefundDataBuilder
  33. */
  34. private $dataBuilder;
  35. /**
  36. * @var string
  37. */
  38. private $transactionId = 'xsd7n';
  39. public function setUp()
  40. {
  41. $this->paymentModelMock = $this->getMockBuilder(Payment::class)
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class)
  45. ->disableOriginalConstructor()
  46. ->getMock();
  47. $this->dataBuilder = new RefundDataBuilder($this->subjectReaderMock);
  48. }
  49. public function testBuild()
  50. {
  51. $this->initPaymentDOMock();
  52. $buildSubject = ['payment' => $this->paymentDOMock, 'amount' => 12.358];
  53. $this->subjectReaderMock->expects(self::once())
  54. ->method('readPayment')
  55. ->with($buildSubject)
  56. ->willReturn($this->paymentDOMock);
  57. $this->paymentModelMock->expects(self::once())
  58. ->method('getParentTransactionId')
  59. ->willReturn($this->transactionId);
  60. $this->subjectReaderMock->expects(self::once())
  61. ->method('readAmount')
  62. ->with($buildSubject)
  63. ->willReturn($buildSubject['amount']);
  64. static::assertEquals(
  65. [
  66. 'transaction_id' => $this->transactionId,
  67. PaymentDataBuilder::AMOUNT => '12.36',
  68. ],
  69. $this->dataBuilder->build($buildSubject)
  70. );
  71. }
  72. public function testBuildNullAmount()
  73. {
  74. $this->initPaymentDOMock();
  75. $buildSubject = ['payment' => $this->paymentDOMock];
  76. $this->subjectReaderMock->expects(self::once())
  77. ->method('readPayment')
  78. ->with($buildSubject)
  79. ->willReturn($this->paymentDOMock);
  80. $this->paymentModelMock->expects(self::once())
  81. ->method('getParentTransactionId')
  82. ->willReturn($this->transactionId);
  83. $this->subjectReaderMock->expects(self::once())
  84. ->method('readAmount')
  85. ->with($buildSubject)
  86. ->willThrowException(new \InvalidArgumentException());
  87. static::assertEquals(
  88. [
  89. 'transaction_id' => $this->transactionId,
  90. PaymentDataBuilder::AMOUNT => null,
  91. ],
  92. $this->dataBuilder->build($buildSubject)
  93. );
  94. }
  95. public function testBuildCutOffLegacyTransactionIdPostfix()
  96. {
  97. $this->initPaymentDOMock();
  98. $buildSubject = ['payment' => $this->paymentDOMock];
  99. $legacyTxnId = 'xsd7n-' . TransactionInterface::TYPE_CAPTURE;
  100. $this->subjectReaderMock->expects(self::once())
  101. ->method('readPayment')
  102. ->with($buildSubject)
  103. ->willReturn($this->paymentDOMock);
  104. $this->paymentModelMock->expects(self::once())
  105. ->method('getParentTransactionId')
  106. ->willReturn($legacyTxnId);
  107. $this->subjectReaderMock->expects(self::once())
  108. ->method('readAmount')
  109. ->with($buildSubject)
  110. ->willThrowException(new \InvalidArgumentException());
  111. static::assertEquals(
  112. [
  113. 'transaction_id' => $this->transactionId,
  114. PaymentDataBuilder::AMOUNT => null,
  115. ],
  116. $this->dataBuilder->build($buildSubject)
  117. );
  118. }
  119. /**
  120. * Creates mock object for PaymentDataObjectInterface
  121. *
  122. * @return PaymentDataObjectInterface|MockObject
  123. */
  124. private function initPaymentDOMock()
  125. {
  126. $this->paymentDOMock = $this->createMock(PaymentDataObjectInterface::class);
  127. $this->paymentDOMock->expects(self::once())
  128. ->method('getPayment')
  129. ->willReturn($this->paymentModelMock);
  130. }
  131. }