VaultCaptureDataBuilderTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Braintree\Test\Unit\Gateway\Request;
  8. use Magento\Braintree\Gateway\Request\VaultCaptureDataBuilder;
  9. use Magento\Braintree\Gateway\SubjectReader;
  10. use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
  11. use Magento\Sales\Api\Data\OrderPaymentExtension;
  12. use Magento\Sales\Model\Order\Payment;
  13. use Magento\Vault\Model\PaymentToken;
  14. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  15. /**
  16. * Tests \Magento\Braintree\Gateway\Request\VaultCaptureDataBuilder.
  17. */
  18. class VaultCaptureDataBuilderTest extends \PHPUnit\Framework\TestCase
  19. {
  20. /**
  21. * @var VaultCaptureDataBuilder
  22. */
  23. private $builder;
  24. /**
  25. * @var PaymentDataObjectInterface|MockObject
  26. */
  27. private $paymentDO;
  28. /**
  29. * @var Payment|MockObject
  30. */
  31. private $payment;
  32. /**
  33. * @var SubjectReader|MockObject
  34. */
  35. private $subjectReader;
  36. /**
  37. * @inheritdoc
  38. */
  39. protected function setUp(): void
  40. {
  41. $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class);
  42. $this->payment = $this->getMockBuilder(Payment::class)
  43. ->disableOriginalConstructor()
  44. ->getMock();
  45. $this->paymentDO->method('getPayment')
  46. ->willReturn($this->payment);
  47. $this->subjectReader = $this->getMockBuilder(SubjectReader::class)
  48. ->disableOriginalConstructor()
  49. ->getMock();
  50. $this->builder = new VaultCaptureDataBuilder($this->subjectReader);
  51. }
  52. /**
  53. * Checks the result after builder execution.
  54. */
  55. public function testBuild(): void
  56. {
  57. $amount = 30.00;
  58. $token = '5tfm4c';
  59. $buildSubject = [
  60. 'payment' => $this->paymentDO,
  61. 'amount' => $amount,
  62. ];
  63. $expected = [
  64. 'amount' => $amount,
  65. 'paymentMethodToken' => $token,
  66. ];
  67. $this->subjectReader->method('readPayment')
  68. ->with($buildSubject)
  69. ->willReturn($this->paymentDO);
  70. $this->subjectReader->method('readAmount')
  71. ->with($buildSubject)
  72. ->willReturn($amount);
  73. /** @var OrderPaymentExtension|MockObject $paymentExtension */
  74. $paymentExtension = $this->getMockBuilder(OrderPaymentExtension::class)
  75. ->setMethods(['getVaultPaymentToken'])
  76. ->disableOriginalConstructor()
  77. ->getMockForAbstractClass();
  78. /** @var PaymentToken|MockObject $paymentToken */
  79. $paymentToken = $this->getMockBuilder(PaymentToken::class)
  80. ->disableOriginalConstructor()
  81. ->getMock();
  82. $paymentExtension->method('getVaultPaymentToken')
  83. ->willReturn($paymentToken);
  84. $this->payment->method('getExtensionAttributes')
  85. ->willReturn($paymentExtension);
  86. $paymentToken->method('getGatewayToken')
  87. ->willReturn($token);
  88. $result = $this->builder->build($buildSubject);
  89. self::assertEquals($expected, $result);
  90. }
  91. /**
  92. * Checks a builder execution if Payment Token doesn't exist.
  93. *
  94. * @expectedException \Magento\Payment\Gateway\Command\CommandException
  95. * @expectedExceptionMessage The Payment Token is not available to perform the request.
  96. */
  97. public function testBuildWithoutPaymentToken(): void
  98. {
  99. $amount = 30.00;
  100. $buildSubject = [
  101. 'payment' => $this->paymentDO,
  102. 'amount' => $amount,
  103. ];
  104. $this->subjectReader->method('readPayment')
  105. ->with($buildSubject)
  106. ->willReturn($this->paymentDO);
  107. $this->subjectReader->method('readAmount')
  108. ->with($buildSubject)
  109. ->willReturn($amount);
  110. /** @var OrderPaymentExtension|MockObject $paymentExtension */
  111. $paymentExtension = $this->getMockBuilder(OrderPaymentExtension::class)
  112. ->setMethods(['getVaultPaymentToken'])
  113. ->disableOriginalConstructor()
  114. ->getMockForAbstractClass();
  115. $this->payment->method('getExtensionAttributes')
  116. ->willReturn($paymentExtension);
  117. $paymentExtension->method('getVaultPaymentToken')
  118. ->willReturn(null);
  119. $this->builder->build($buildSubject);
  120. }
  121. }