ConfigProviderTest.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Test\Unit\Model\Ui;
  7. use Magento\Braintree\Gateway\Config\Config;
  8. use Magento\Braintree\Model\Adapter\BraintreeAdapter;
  9. use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory;
  10. use Magento\Braintree\Model\Ui\ConfigProvider;
  11. use Magento\Customer\Model\Session;
  12. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  13. /**
  14. * Class ConfigProviderTest
  15. *
  16. * Test for class \Magento\Braintree\Model\Ui\ConfigProvider
  17. */
  18. class ConfigProviderTest extends \PHPUnit\Framework\TestCase
  19. {
  20. const SDK_URL = 'https://js.braintreegateway.com/v2/braintree.js';
  21. const CLIENT_TOKEN = 'token';
  22. const MERCHANT_ACCOUNT_ID = '245345';
  23. /**
  24. * @var Config|MockObject
  25. */
  26. private $config;
  27. /**
  28. * @var BraintreeAdapter|MockObject
  29. */
  30. private $braintreeAdapter;
  31. /**
  32. * @var Session|MockObject
  33. */
  34. private $session;
  35. /**
  36. * @var ConfigProvider
  37. */
  38. private $configProvider;
  39. protected function setUp()
  40. {
  41. $this->config = $this->getMockBuilder(Config::class)
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. $this->braintreeAdapter = $this->getMockBuilder(BraintreeAdapter::class)
  45. ->disableOriginalConstructor()
  46. ->getMock();
  47. /** @var BraintreeAdapterFactory|MockObject $adapterFactoryMock */
  48. $adapterFactoryMock = $this->getMockBuilder(BraintreeAdapterFactory::class)
  49. ->disableOriginalConstructor()
  50. ->getMock();
  51. $adapterFactoryMock->method('create')
  52. ->willReturn($this->braintreeAdapter);
  53. $this->session = $this->getMockBuilder(Session::class)
  54. ->disableOriginalConstructor()
  55. ->setMethods(['getStoreId'])
  56. ->getMock();
  57. $this->session->method('getStoreId')
  58. ->willReturn(null);
  59. $this->configProvider = new ConfigProvider(
  60. $this->config,
  61. $adapterFactoryMock,
  62. $this->session
  63. );
  64. }
  65. /**
  66. * Run test getConfig method
  67. *
  68. * @param array $config
  69. * @param array $expected
  70. * @dataProvider getConfigDataProvider
  71. */
  72. public function testGetConfig($config, $expected)
  73. {
  74. $this->braintreeAdapter->expects(static::once())
  75. ->method('generate')
  76. ->willReturn(self::CLIENT_TOKEN);
  77. foreach ($config as $method => $value) {
  78. $this->config->expects(static::once())
  79. ->method($method)
  80. ->willReturn($value);
  81. }
  82. static::assertEquals($expected, $this->configProvider->getConfig());
  83. }
  84. /**
  85. * @covers \Magento\Braintree\Model\Ui\ConfigProvider::getClientToken
  86. * @dataProvider getClientTokenDataProvider
  87. */
  88. public function testGetClientToken($merchantAccountId, $params)
  89. {
  90. $this->config->expects(static::once())
  91. ->method('getMerchantAccountId')
  92. ->willReturn($merchantAccountId);
  93. $this->braintreeAdapter->expects(static::once())
  94. ->method('generate')
  95. ->with($params)
  96. ->willReturn(self::CLIENT_TOKEN);
  97. static::assertEquals(self::CLIENT_TOKEN, $this->configProvider->getClientToken());
  98. }
  99. /**
  100. * @return array
  101. */
  102. public function getConfigDataProvider()
  103. {
  104. return [
  105. [
  106. 'config' => [
  107. 'isActive' => true,
  108. 'getCcTypesMapper' => ['visa' => 'VI', 'american-express'=> 'AE'],
  109. 'getSdkUrl' => self::SDK_URL,
  110. 'getCountrySpecificCardTypeConfig' => [
  111. 'GB' => ['VI', 'AE'],
  112. 'US' => ['DI', 'JCB']
  113. ],
  114. 'getAvailableCardTypes' => ['AE', 'VI', 'MC', 'DI', 'JCB'],
  115. 'isCvvEnabled' => true,
  116. 'isVerify3DSecure' => true,
  117. 'getThresholdAmount' => 20,
  118. 'get3DSecureSpecificCountries' => ['GB', 'US', 'CA'],
  119. 'getEnvironment' => 'test-environment',
  120. 'getKountMerchantId' => 'test-kount-merchant-id',
  121. 'getMerchantId' => 'test-merchant-id',
  122. 'hasFraudProtection' => true,
  123. ],
  124. 'expected' => [
  125. 'payment' => [
  126. ConfigProvider::CODE => [
  127. 'isActive' => true,
  128. 'clientToken' => self::CLIENT_TOKEN,
  129. 'ccTypesMapper' => ['visa' => 'VI', 'american-express' => 'AE'],
  130. 'sdkUrl' => self::SDK_URL,
  131. 'countrySpecificCardTypes' =>[
  132. 'GB' => ['VI', 'AE'],
  133. 'US' => ['DI', 'JCB']
  134. ],
  135. 'availableCardTypes' => ['AE', 'VI', 'MC', 'DI', 'JCB'],
  136. 'useCvv' => true,
  137. 'environment' => 'test-environment',
  138. 'kountMerchantId' => 'test-kount-merchant-id',
  139. 'merchantId' => 'test-merchant-id',
  140. 'hasFraudProtection' => true,
  141. 'ccVaultCode' => ConfigProvider::CC_VAULT_CODE
  142. ],
  143. Config::CODE_3DSECURE => [
  144. 'enabled' => true,
  145. 'thresholdAmount' => 20,
  146. 'specificCountries' => ['GB', 'US', 'CA']
  147. ]
  148. ]
  149. ]
  150. ]
  151. ];
  152. }
  153. /**
  154. * @return array
  155. */
  156. public function getClientTokenDataProvider()
  157. {
  158. return [
  159. [
  160. 'merchantAccountId' => '',
  161. 'params' => []
  162. ],
  163. [
  164. 'merchantAccountId' => self::MERCHANT_ACCOUNT_ID,
  165. 'params' => ['merchantAccountId' => self::MERCHANT_ACCOUNT_ID]
  166. ]
  167. ];
  168. }
  169. }