ThreeDSecureDataBuilderTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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\Config\Config;
  8. use Magento\Braintree\Gateway\SubjectReader;
  9. use Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder;
  10. use Magento\Payment\Gateway\Data\Order\AddressAdapter;
  11. use Magento\Payment\Gateway\Data\Order\OrderAdapter;
  12. use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
  13. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  14. /**
  15. * Tests \Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder.
  16. */
  17. class ThreeDSecureDataBuilderTest extends \PHPUnit\Framework\TestCase
  18. {
  19. /**
  20. * @var ThreeDSecureDataBuilder
  21. */
  22. private $builder;
  23. /**
  24. * @var Config|MockObject
  25. */
  26. private $configMock;
  27. /**
  28. * @var PaymentDataObjectInterface|MockObject
  29. */
  30. private $paymentDOMock;
  31. /**
  32. * @var OrderAdapter|MockObject
  33. */
  34. private $orderMock;
  35. /**
  36. * @var AddressAdapter|MockObject
  37. */
  38. private $billingAddressMock;
  39. /**
  40. * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject
  41. */
  42. private $subjectReaderMock;
  43. /**
  44. * @var int
  45. */
  46. private $storeId = 1;
  47. /**
  48. * @inheritdoc
  49. */
  50. protected function setUp()
  51. {
  52. $this->initOrderMock();
  53. $this->paymentDOMock = $this->getMockBuilder(PaymentDataObjectInterface::class)
  54. ->disableOriginalConstructor()
  55. ->setMethods(['getOrder', 'getPayment'])
  56. ->getMock();
  57. $this->paymentDOMock->expects(static::once())
  58. ->method('getOrder')
  59. ->willReturn($this->orderMock);
  60. $this->configMock = $this->getMockBuilder(Config::class)
  61. ->setMethods(['isVerify3DSecure', 'getThresholdAmount', 'get3DSecureSpecificCountries'])
  62. ->disableOriginalConstructor()
  63. ->getMock();
  64. $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class)
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $this->builder = new ThreeDSecureDataBuilder($this->configMock, $this->subjectReaderMock);
  68. }
  69. /**
  70. * @param bool $verify
  71. * @param float $thresholdAmount
  72. * @param string $countryId
  73. * @param array $countries
  74. * @param array $expected
  75. * @covers \Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder::build
  76. * @dataProvider buildDataProvider
  77. */
  78. public function testBuild($verify, $thresholdAmount, $countryId, array $countries, array $expected)
  79. {
  80. $buildSubject = [
  81. 'payment' => $this->paymentDOMock,
  82. 'amount' => 25,
  83. ];
  84. $this->configMock->expects(static::once())
  85. ->method('isVerify3DSecure')
  86. ->with(self::equalTo($this->storeId))
  87. ->willReturn($verify);
  88. $this->configMock->expects(static::any())
  89. ->method('getThresholdAmount')
  90. ->with(self::equalTo($this->storeId))
  91. ->willReturn($thresholdAmount);
  92. $this->configMock->expects(static::any())
  93. ->method('get3DSecureSpecificCountries')
  94. ->with(self::equalTo($this->storeId))
  95. ->willReturn($countries);
  96. $this->billingAddressMock->expects(static::any())
  97. ->method('getCountryId')
  98. ->willReturn($countryId);
  99. $this->subjectReaderMock->expects(self::once())
  100. ->method('readPayment')
  101. ->with($buildSubject)
  102. ->willReturn($this->paymentDOMock);
  103. $this->subjectReaderMock->expects(self::once())
  104. ->method('readAmount')
  105. ->with($buildSubject)
  106. ->willReturn(25);
  107. $result = $this->builder->build($buildSubject);
  108. self::assertEquals($expected, $result);
  109. }
  110. /**
  111. * Gets list of variations to build request data.
  112. *
  113. * @return array
  114. */
  115. public function buildDataProvider()
  116. {
  117. return [
  118. ['verify' => true, 'amount' => 20, 'countryId' => 'US', 'countries' => [], 'result' => [
  119. 'options' => [
  120. 'three_d_secure' => [
  121. 'required' => true
  122. ]
  123. ]
  124. ]],
  125. ['verify' => true, 'amount' => 0, 'countryId' => 'US', 'countries' => ['US', 'GB'], 'result' => [
  126. 'options' => [
  127. 'three_d_secure' => [
  128. 'required' => true
  129. ]
  130. ]
  131. ]],
  132. ['verify' => true, 'amount' => 40, 'countryId' => 'US', 'countries' => [], 'result' => []],
  133. ['verify' => false, 'amount' => 40, 'countryId' => 'US', 'countries' => [], 'result' => []],
  134. ['verify' => false, 'amount' => 20, 'countryId' => 'US', 'countries' => [], 'result' => []],
  135. ['verify' => true, 'amount' => 20, 'countryId' => 'CA', 'countries' => ['US', 'GB'], 'result' => []],
  136. ];
  137. }
  138. /**
  139. * Creates mock object for order adapter.
  140. *
  141. * @return void
  142. */
  143. private function initOrderMock()
  144. {
  145. $this->billingAddressMock = $this->getMockBuilder(AddressAdapter::class)
  146. ->disableOriginalConstructor()
  147. ->setMethods(['getCountryId'])
  148. ->getMock();
  149. $this->orderMock = $this->getMockBuilder(OrderAdapter::class)
  150. ->disableOriginalConstructor()
  151. ->setMethods(['getBillingAddress', 'getStoreId'])
  152. ->getMock();
  153. $this->orderMock->expects(static::any())
  154. ->method('getBillingAddress')
  155. ->willReturn($this->billingAddressMock);
  156. $this->orderMock->method('getStoreId')
  157. ->willReturn($this->storeId);
  158. }
  159. }