CardDetailsHandlerTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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\CardDetailsHandler;
  9. use Magento\Payment\Gateway\Data\PaymentDataObject;
  10. use Magento\Sales\Model\Order\Payment;
  11. use Magento\Braintree\Gateway\Config\Config;
  12. use Magento\Braintree\Gateway\SubjectReader;
  13. /**
  14. * Tests \Magento\Braintree\Gateway\Response\CardDetailsHandler.
  15. */
  16. class CardDetailsHandlerTest extends \PHPUnit\Framework\TestCase
  17. {
  18. /**
  19. * @var \Magento\Braintree\Gateway\Response\CardDetailsHandler
  20. */
  21. private $cardHandler;
  22. /**
  23. * @var \Magento\Sales\Model\Order\Payment|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $paymentMock;
  26. /**
  27. * @var \Magento\Braintree\Gateway\Config\Config|\PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $configMock;
  30. /**
  31. * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $subjectReaderMock;
  34. protected function setUp()
  35. {
  36. $this->initConfigMock();
  37. $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class)
  38. ->disableOriginalConstructor()
  39. ->getMock();
  40. $this->cardHandler = new CardDetailsHandler($this->configMock, $this->subjectReaderMock);
  41. }
  42. /**
  43. * @covers \Magento\Braintree\Gateway\Response\CardDetailsHandler::handle
  44. */
  45. public function testHandle()
  46. {
  47. $paymentDataMock = $this->getPaymentDataObjectMock();
  48. $transaction = $this->getBraintreeTransaction();
  49. $subject = ['payment' => $paymentDataMock];
  50. $response = ['object' => $transaction];
  51. $this->subjectReaderMock->expects(self::once())
  52. ->method('readPayment')
  53. ->with($subject)
  54. ->willReturn($paymentDataMock);
  55. $this->subjectReaderMock->expects(self::once())
  56. ->method('readTransaction')
  57. ->with($response)
  58. ->willReturn($transaction);
  59. $this->paymentMock->expects(static::once())
  60. ->method('setCcLast4');
  61. $this->paymentMock->expects(static::once())
  62. ->method('setCcExpMonth');
  63. $this->paymentMock->expects(static::once())
  64. ->method('setCcExpYear');
  65. $this->paymentMock->expects(static::once())
  66. ->method('setCcType');
  67. $this->paymentMock->expects(static::exactly(2))
  68. ->method('setAdditionalInformation');
  69. $this->cardHandler->handle($subject, $response);
  70. }
  71. /**
  72. * Create mock for gateway config
  73. */
  74. private function initConfigMock()
  75. {
  76. $this->configMock = $this->getMockBuilder(Config::class)
  77. ->disableOriginalConstructor()
  78. ->setMethods(['getCctypesMapper'])
  79. ->getMock();
  80. $this->configMock->expects(static::once())
  81. ->method('getCctypesMapper')
  82. ->willReturn([
  83. 'american-express' => 'AE',
  84. 'discover' => 'DI',
  85. 'jcb' => 'JCB',
  86. 'mastercard' => 'MC',
  87. 'master-card' => 'MC',
  88. 'visa' => 'VI'
  89. ]);
  90. }
  91. /**
  92. * Create mock for payment data object and order payment
  93. * @return \PHPUnit_Framework_MockObject_MockObject
  94. */
  95. private function getPaymentDataObjectMock()
  96. {
  97. $this->paymentMock = $this->getMockBuilder(Payment::class)
  98. ->disableOriginalConstructor()
  99. ->setMethods([
  100. 'setCcLast4',
  101. 'setCcExpMonth',
  102. 'setCcExpYear',
  103. 'setCcType',
  104. 'setAdditionalInformation',
  105. ])
  106. ->getMock();
  107. $mock = $this->getMockBuilder(PaymentDataObject::class)
  108. ->setMethods(['getPayment'])
  109. ->disableOriginalConstructor()
  110. ->getMock();
  111. $mock->expects(static::once())
  112. ->method('getPayment')
  113. ->willReturn($this->paymentMock);
  114. return $mock;
  115. }
  116. /**
  117. * Create Braintree transaction
  118. * @return \Braintree\Transaction
  119. */
  120. private function getBraintreeTransaction()
  121. {
  122. $attributes = [
  123. 'creditCard' => [
  124. 'bin' => '5421',
  125. 'cardType' => 'American Express',
  126. 'expirationMonth' => 12,
  127. 'expirationYear' => 21,
  128. 'last4' => 1231
  129. ]
  130. ];
  131. $transaction = Transaction::factory($attributes);
  132. return $transaction;
  133. }
  134. }