PaymentDataBuilderTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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\SubjectReader;
  9. use Magento\Braintree\Observer\DataAssignObserver;
  10. use Magento\Payment\Gateway\Data\OrderAdapterInterface;
  11. use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
  12. use Magento\Sales\Model\Order\Payment;
  13. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  14. use Magento\Braintree\Gateway\Config\Config;
  15. /**
  16. * Tests \Magento\Braintree\Gateway\Request\PaymentDataBuilder.
  17. */
  18. class PaymentDataBuilderTest extends \PHPUnit\Framework\TestCase
  19. {
  20. const PAYMENT_METHOD_NONCE = 'nonce';
  21. /**
  22. * @var PaymentDataBuilder
  23. */
  24. private $builder;
  25. /**
  26. * @var Payment|MockObject
  27. */
  28. private $paymentMock;
  29. /**
  30. * @var PaymentDataObjectInterface|MockObject
  31. */
  32. private $paymentDOMock;
  33. /**
  34. * @var SubjectReader|MockObject
  35. */
  36. private $subjectReaderMock;
  37. /**
  38. * @var OrderAdapterInterface|MockObject
  39. */
  40. private $orderMock;
  41. /**
  42. * @inheritdoc
  43. */
  44. protected function setUp()
  45. {
  46. $this->paymentDOMock = $this->createMock(PaymentDataObjectInterface::class);
  47. $this->paymentMock = $this->getMockBuilder(Payment::class)
  48. ->disableOriginalConstructor()
  49. ->getMock();
  50. $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class)
  51. ->disableOriginalConstructor()
  52. ->getMock();
  53. $this->orderMock = $this->createMock(OrderAdapterInterface::class);
  54. /** @var Config $config */
  55. $config = $this->getMockBuilder(Config::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->builder = new PaymentDataBuilder($config, $this->subjectReaderMock);
  59. }
  60. /**
  61. * @return void
  62. * @expectedException \InvalidArgumentException
  63. */
  64. public function testBuildReadPaymentException(): void
  65. {
  66. $buildSubject = [];
  67. $this->subjectReaderMock->expects(self::once())
  68. ->method('readPayment')
  69. ->with($buildSubject)
  70. ->willThrowException(new \InvalidArgumentException());
  71. $this->builder->build($buildSubject);
  72. }
  73. /**
  74. * @return void
  75. * @expectedException \InvalidArgumentException
  76. */
  77. public function testBuildReadAmountException(): void
  78. {
  79. $buildSubject = [
  80. 'payment' => $this->paymentDOMock,
  81. 'amount' => null,
  82. ];
  83. $this->subjectReaderMock->expects(self::once())
  84. ->method('readPayment')
  85. ->with($buildSubject)
  86. ->willReturn($this->paymentDOMock);
  87. $this->subjectReaderMock->expects(self::once())
  88. ->method('readAmount')
  89. ->with($buildSubject)
  90. ->willThrowException(new \InvalidArgumentException());
  91. $this->builder->build($buildSubject);
  92. }
  93. /**
  94. * @return void
  95. */
  96. public function testBuild(): void
  97. {
  98. $additionalData = [
  99. [
  100. DataAssignObserver::PAYMENT_METHOD_NONCE,
  101. self::PAYMENT_METHOD_NONCE,
  102. ],
  103. ];
  104. $expectedResult = [
  105. PaymentDataBuilder::AMOUNT => 10.00,
  106. PaymentDataBuilder::PAYMENT_METHOD_NONCE => self::PAYMENT_METHOD_NONCE,
  107. PaymentDataBuilder::ORDER_ID => '000000101'
  108. ];
  109. $buildSubject = [
  110. 'payment' => $this->paymentDOMock,
  111. 'amount' => 10.00,
  112. ];
  113. $this->paymentMock->expects(self::exactly(count($additionalData)))
  114. ->method('getAdditionalInformation')
  115. ->willReturnMap($additionalData);
  116. $this->paymentDOMock->expects(self::once())
  117. ->method('getPayment')
  118. ->willReturn($this->paymentMock);
  119. $this->paymentDOMock->expects(self::once())
  120. ->method('getOrder')
  121. ->willReturn($this->orderMock);
  122. $this->subjectReaderMock->expects(self::once())
  123. ->method('readPayment')
  124. ->with($buildSubject)
  125. ->willReturn($this->paymentDOMock);
  126. $this->subjectReaderMock->expects(self::once())
  127. ->method('readAmount')
  128. ->with($buildSubject)
  129. ->willReturn(10.00);
  130. $this->orderMock->expects(self::once())
  131. ->method('getOrderIncrementId')
  132. ->willReturn('000000101');
  133. self::assertEquals(
  134. $expectedResult,
  135. $this->builder->build($buildSubject)
  136. );
  137. }
  138. }