FormTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Test\Unit\Block;
  7. use Magento\Backend\Model\Session\Quote;
  8. use Magento\Braintree\Block\Form;
  9. use Magento\Braintree\Gateway\Config\Config as GatewayConfig;
  10. use Magento\Braintree\Model\Adminhtml\Source\CcType;
  11. use Magento\Braintree\Model\Ui\ConfigProvider;
  12. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  13. use Magento\Payment\Helper\Data;
  14. use Magento\Payment\Model\Config;
  15. use Magento\Vault\Model\VaultPaymentInterface;
  16. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  17. /**
  18. * Tests \Magento\Braintree\Block\Form.
  19. */
  20. class FormTest extends \PHPUnit\Framework\TestCase
  21. {
  22. public static $baseCardTypes = [
  23. 'AE' => 'American Express',
  24. 'VI' => 'Visa',
  25. 'MC' => 'MasterCard',
  26. 'DI' => 'Discover',
  27. 'JBC' => 'JBC',
  28. 'CUP' => 'China Union Pay',
  29. 'MI' => 'Maestro',
  30. ];
  31. public static $configCardTypes = [
  32. 'AE', 'VI', 'MC', 'DI', 'JBC'
  33. ];
  34. /**
  35. * @var Form
  36. */
  37. private $block;
  38. /**
  39. * @var Quote|MockObject
  40. */
  41. private $sessionQuoteMock;
  42. /**
  43. * @var Config|MockObject
  44. */
  45. private $gatewayConfigMock;
  46. /**
  47. * @var CcType|MockObject
  48. */
  49. private $ccTypeMock;
  50. /**
  51. * @var Data|MockObject
  52. */
  53. private $paymentDataHelperMock;
  54. /**
  55. * @var string
  56. */
  57. private $storeId = '1';
  58. protected function setUp()
  59. {
  60. $this->initCcTypeMock();
  61. $this->initSessionQuoteMock();
  62. $this->initGatewayConfigMock();
  63. $this->paymentDataHelperMock = $this->getMockBuilder(Data::class)
  64. ->disableOriginalConstructor()
  65. ->setMethods(['getMethodInstance'])
  66. ->getMock();
  67. $managerHelper = new ObjectManager($this);
  68. $this->block = $managerHelper->getObject(Form::class, [
  69. 'paymentConfig' => $managerHelper->getObject(Config::class),
  70. 'sessionQuote' => $this->sessionQuoteMock,
  71. 'gatewayConfig' => $this->gatewayConfigMock,
  72. 'ccType' => $this->ccTypeMock,
  73. 'paymentDataHelper' =>$this->paymentDataHelperMock,
  74. ]);
  75. }
  76. /**
  77. * @covers \Magento\Braintree\Block\Form::getCcAvailableTypes
  78. * @param string $countryId
  79. * @param array $availableTypes
  80. * @param array $expected
  81. * @dataProvider countryCardTypesDataProvider
  82. */
  83. public function testGetCcAvailableTypes($countryId, array $availableTypes, array $expected)
  84. {
  85. $this->sessionQuoteMock->expects(static::once())
  86. ->method('getCountryId')
  87. ->willReturn($countryId);
  88. $this->gatewayConfigMock->expects(static::once())
  89. ->method('getAvailableCardTypes')
  90. ->with($this->storeId)
  91. ->willReturn(self::$configCardTypes);
  92. $this->gatewayConfigMock->expects(static::once())
  93. ->method('getCountryAvailableCardTypes')
  94. ->with($countryId, $this->storeId)
  95. ->willReturn($availableTypes);
  96. $result = $this->block->getCcAvailableTypes();
  97. static::assertEquals($expected, array_values($result));
  98. }
  99. /**
  100. * Get country card types testing data
  101. * @return array
  102. */
  103. public function countryCardTypesDataProvider()
  104. {
  105. return [
  106. ['US', ['AE', 'VI'], ['American Express', 'Visa']],
  107. ['UK', ['VI'], ['Visa']],
  108. ['CA', ['MC'], ['MasterCard']],
  109. ['UA', [], ['American Express', 'Visa', 'MasterCard', 'Discover', 'JBC']],
  110. ];
  111. }
  112. /**
  113. * @covers \Magento\Braintree\Block\Form::isVaultEnabled
  114. */
  115. public function testIsVaultEnabled()
  116. {
  117. $vaultPayment = $this->getMockForAbstractClass(VaultPaymentInterface::class);
  118. $this->paymentDataHelperMock->expects(static::once())
  119. ->method('getMethodInstance')
  120. ->with(ConfigProvider::CC_VAULT_CODE)
  121. ->willReturn($vaultPayment);
  122. $vaultPayment->expects(static::once())
  123. ->method('isActive')
  124. ->with($this->storeId)
  125. ->willReturn(true);
  126. static::assertTrue($this->block->isVaultEnabled());
  127. }
  128. /**
  129. * Create mock for credit card type
  130. */
  131. private function initCcTypeMock()
  132. {
  133. $this->ccTypeMock = $this->getMockBuilder(CcType::class)
  134. ->disableOriginalConstructor()
  135. ->setMethods(['getCcTypeLabelMap'])
  136. ->getMock();
  137. $this->ccTypeMock->expects(static::any())
  138. ->method('getCcTypeLabelMap')
  139. ->willReturn(self::$baseCardTypes);
  140. }
  141. /**
  142. * Create mock for session quote
  143. */
  144. private function initSessionQuoteMock()
  145. {
  146. $this->sessionQuoteMock = $this->getMockBuilder(Quote::class)
  147. ->disableOriginalConstructor()
  148. ->setMethods(['getQuote', 'getBillingAddress', 'getCountryId', '__wakeup', 'getStoreId'])
  149. ->getMock();
  150. $this->sessionQuoteMock->expects(static::any())
  151. ->method('getQuote')
  152. ->willReturnSelf();
  153. $this->sessionQuoteMock->expects(static::any())
  154. ->method('getBillingAddress')
  155. ->willReturnSelf();
  156. $this->sessionQuoteMock->expects(static::any())
  157. ->method('getStoreId')
  158. ->willReturn($this->storeId);
  159. }
  160. /**
  161. * Create mock for gateway config
  162. */
  163. private function initGatewayConfigMock()
  164. {
  165. $this->gatewayConfigMock = $this->getMockBuilder(GatewayConfig::class)
  166. ->disableOriginalConstructor()
  167. ->setMethods(['getCountryAvailableCardTypes', 'getAvailableCardTypes'])
  168. ->getMock();
  169. }
  170. }