PaymentDetailsHandlerTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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\Response;
  7. use Braintree\Transaction;
  8. use Magento\Braintree\Gateway\Response\PaymentDetailsHandler;
  9. use Magento\Payment\Gateway\Data\PaymentDataObject;
  10. use Magento\Sales\Model\Order\Payment;
  11. use Magento\Braintree\Gateway\SubjectReader;
  12. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  13. /**
  14. * Tests \\Magento\Braintree\Gateway\Response\PaymentDetailsHandler.
  15. */
  16. class PaymentDetailsHandlerTest extends \PHPUnit\Framework\TestCase
  17. {
  18. const TRANSACTION_ID = '432erwwe';
  19. /**
  20. * @var \Magento\Braintree\Gateway\Response\PaymentDetailsHandler
  21. */
  22. private $paymentHandler;
  23. /**
  24. * @var \Magento\Sales\Model\Order\Payment|MockObject
  25. */
  26. private $paymentMock;
  27. /**
  28. * @var SubjectReader|MockObject
  29. */
  30. private $subjectReaderMock;
  31. protected function setUp()
  32. {
  33. $this->paymentMock = $this->getMockBuilder(Payment::class)
  34. ->disableOriginalConstructor()
  35. ->setMethods([
  36. 'setCcTransId',
  37. 'setLastTransId',
  38. 'setAdditionalInformation',
  39. ])
  40. ->getMock();
  41. $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class)
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. $this->paymentMock->expects(static::once())
  45. ->method('setCcTransId');
  46. $this->paymentMock->expects(static::once())
  47. ->method('setLastTransId');
  48. $this->paymentMock->expects(static::any())
  49. ->method('setAdditionalInformation');
  50. $this->paymentHandler = new PaymentDetailsHandler($this->subjectReaderMock);
  51. }
  52. /**
  53. * @covers \Magento\Braintree\Gateway\Response\PaymentDetailsHandler::handle
  54. */
  55. public function testHandle()
  56. {
  57. $paymentDataMock = $this->getPaymentDataObjectMock();
  58. $transaction = $this->getBraintreeTransaction();
  59. $subject = ['payment' => $paymentDataMock];
  60. $response = ['object' => $transaction];
  61. $this->subjectReaderMock->expects(self::once())
  62. ->method('readPayment')
  63. ->with($subject)
  64. ->willReturn($paymentDataMock);
  65. $this->subjectReaderMock->expects(self::once())
  66. ->method('readTransaction')
  67. ->with($response)
  68. ->willReturn($transaction);
  69. $this->paymentHandler->handle($subject, $response);
  70. }
  71. /**
  72. * Create mock for payment data object and order payment
  73. * @return MockObject
  74. */
  75. private function getPaymentDataObjectMock()
  76. {
  77. $mock = $this->getMockBuilder(PaymentDataObject::class)
  78. ->setMethods(['getPayment'])
  79. ->disableOriginalConstructor()
  80. ->getMock();
  81. $mock->expects(static::once())
  82. ->method('getPayment')
  83. ->willReturn($this->paymentMock);
  84. return $mock;
  85. }
  86. /**
  87. * Create Braintree transaction
  88. * @return Transaction
  89. */
  90. private function getBraintreeTransaction()
  91. {
  92. $attributes = [
  93. 'id' => self::TRANSACTION_ID,
  94. 'avsPostalCodeResponseCode' => 'M',
  95. 'avsStreetAddressResponseCode' => 'M',
  96. 'cvvResponseCode' => 'M',
  97. 'processorAuthorizationCode' => 'W1V8XK',
  98. 'processorResponseCode' => '1000',
  99. 'processorResponseText' => 'Approved',
  100. ];
  101. return Transaction::factory($attributes);
  102. }
  103. }