PageRenderTime 40ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 266 lines | 188 code | 32 blank | 46 comment | 0 complexity | 78193d244f98094abc6a0a014f11ac06 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Vault\Test\Unit\Model\Method;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  8. use Magento\Payment\Gateway\Command\CommandManagerInterface;
  9. use Magento\Payment\Gateway\Command\CommandManagerPoolInterface;
  10. use Magento\Payment\Gateway\ConfigInterface;
  11. use Magento\Payment\Model\InfoInterface;
  12. use Magento\Payment\Model\MethodInterface;
  13. use Magento\Quote\Api\Data\CartInterface;
  14. use Magento\Sales\Api\Data\OrderPaymentExtensionInterface;
  15. use Magento\Sales\Api\Data\TransactionInterface;
  16. use Magento\Sales\Model\Order\Payment;
  17. use Magento\Vault\Api\Data\PaymentTokenInterface;
  18. use Magento\Vault\Api\PaymentTokenManagementInterface;
  19. use Magento\Vault\Model\Method\Vault;
  20. use Magento\Vault\Model\VaultPaymentInterface;
  21. /**
  22. * Class VaultTest
  23. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  24. */
  25. class VaultTest extends \PHPUnit_Framework_TestCase
  26. {
  27. /**
  28. * @var ObjectManager
  29. */
  30. private $objectManager;
  31. public function setUp()
  32. {
  33. $this->objectManager = new ObjectManager($this);
  34. }
  35. /**
  36. * @expectedException \DomainException
  37. * @expectedExceptionMessage Not implemented
  38. */
  39. public function testAuthorizeNotOrderPayment()
  40. {
  41. $paymentModel = $this->getMock(InfoInterface::class);
  42. /** @var Vault $model */
  43. $model = $this->objectManager->getObject(Vault::class);
  44. $model->authorize($paymentModel, 0);
  45. }
  46. /**
  47. * @expectedException \LogicException
  48. * @expectedExceptionMessage Token metadata should be defined
  49. */
  50. public function testAuthorizeNoTokenMetadata()
  51. {
  52. $paymentModel = $this->getMockBuilder(Payment::class)
  53. ->disableOriginalConstructor()
  54. ->getMock();
  55. $paymentModel->expects(static::once())
  56. ->method('getAdditionalInformation')
  57. ->willReturn([]);
  58. /** @var Vault $model */
  59. $model = $this->objectManager->getObject(Vault::class);
  60. $model->authorize($paymentModel, 0);
  61. }
  62. /**
  63. * @expectedException \LogicException
  64. * @expectedExceptionMessage No token found
  65. */
  66. public function testAuthorizeNoToken()
  67. {
  68. $customerId = 1;
  69. $publicHash = 'token_public_hash';
  70. $paymentModel = $this->getMockBuilder(Payment::class)
  71. ->disableOriginalConstructor()
  72. ->getMock();
  73. $tokenManagement = $this->getMock(PaymentTokenManagementInterface::class);
  74. $paymentModel->expects(static::once())
  75. ->method('getAdditionalInformation')
  76. ->willReturn(
  77. [
  78. Vault::TOKEN_METADATA_KEY => [
  79. PaymentTokenInterface::CUSTOMER_ID => $customerId,
  80. PaymentTokenInterface::PUBLIC_HASH => $publicHash
  81. ]
  82. ]
  83. );
  84. $tokenManagement->expects(static::once())
  85. ->method('getByPublicHash')
  86. ->with($publicHash, $customerId)
  87. ->willReturn(null);
  88. /** @var Vault $model */
  89. $model = $this->objectManager->getObject(
  90. Vault::class,
  91. [
  92. 'tokenManagement' => $tokenManagement
  93. ]
  94. );
  95. $model->authorize($paymentModel, 0);
  96. }
  97. public function testAuthorize()
  98. {
  99. $customerId = 1;
  100. $publicHash = 'token_public_hash';
  101. $vaultProviderCode = 'vault_provider_code';
  102. $amount = 10.01;
  103. $paymentModel = $this->getMockBuilder(Payment::class)
  104. ->disableOriginalConstructor()
  105. ->getMock();
  106. $extensionAttributes = $this->getMockBuilder(OrderPaymentExtensionInterface::class)
  107. ->setMethods(['setVaultPaymentToken'])
  108. ->getMock();
  109. $commandManagerPool = $this->getMock(CommandManagerPoolInterface::class);
  110. $commandManager = $this->getMock(CommandManagerInterface::class);
  111. $vaultProvider = $this->getMock(MethodInterface::class);
  112. $tokenManagement = $this->getMock(PaymentTokenManagementInterface::class);
  113. $token = $this->getMock(PaymentTokenInterface::class);
  114. $paymentModel->expects(static::once())
  115. ->method('getAdditionalInformation')
  116. ->willReturn(
  117. [
  118. Vault::TOKEN_METADATA_KEY => [
  119. PaymentTokenInterface::CUSTOMER_ID => $customerId,
  120. PaymentTokenInterface::PUBLIC_HASH => $publicHash
  121. ]
  122. ]
  123. );
  124. $tokenManagement->expects(static::once())
  125. ->method('getByPublicHash')
  126. ->with($publicHash, $customerId)
  127. ->willReturn($token);
  128. $paymentModel->expects(static::once())
  129. ->method('getExtensionAttributes')
  130. ->willReturn($extensionAttributes);
  131. $extensionAttributes->expects(static::once())
  132. ->method('setVaultPaymentToken')
  133. ->with($token);
  134. $vaultProvider->expects(static::atLeastOnce())
  135. ->method('getCode')
  136. ->willReturn($vaultProviderCode);
  137. $commandManagerPool->expects(static::once())
  138. ->method('get')
  139. ->with($vaultProviderCode)
  140. ->willReturn($commandManager);
  141. $commandManager->expects(static::once())
  142. ->method('executeByCode')
  143. ->with(
  144. VaultPaymentInterface::VAULT_AUTHORIZE_COMMAND,
  145. $paymentModel,
  146. [
  147. 'amount' => $amount
  148. ]
  149. );
  150. $paymentModel->expects(static::once())
  151. ->method('setMethod')
  152. ->with($vaultProviderCode);
  153. /** @var Vault $model */
  154. $model = $this->objectManager->getObject(
  155. Vault::class,
  156. [
  157. 'tokenManagement' => $tokenManagement,
  158. 'commandManagerPool' => $commandManagerPool,
  159. 'vaultProvider' => $vaultProvider
  160. ]
  161. );
  162. $model->authorize($paymentModel, $amount);
  163. }
  164. /**
  165. * @expectedException \DomainException
  166. * @expectedExceptionMessage Not implemented
  167. */
  168. public function testCaptureNotOrderPayment()
  169. {
  170. $paymentModel = $this->getMock(InfoInterface::class);
  171. /** @var Vault $model */
  172. $model = $this->objectManager->getObject(Vault::class);
  173. $model->capture($paymentModel, 0);
  174. }
  175. /**
  176. * @expectedException \DomainException
  177. * @expectedExceptionMessage Capture can not be performed through vault
  178. */
  179. public function testCapture()
  180. {
  181. $paymentModel = $this->getMockBuilder(Payment::class)
  182. ->disableOriginalConstructor()
  183. ->getMock();
  184. $authorizationTransaction = $this->getMock(TransactionInterface::class);
  185. $paymentModel->expects(static::once())
  186. ->method('getAuthorizationTransaction')
  187. ->willReturn($authorizationTransaction);
  188. /** @var Vault $model */
  189. $model = $this->objectManager->getObject(Vault::class);
  190. $model->capture($paymentModel, 0);
  191. }
  192. /**
  193. * @covers \Magento\Vault\Model\Method\Vault::isAvailable
  194. * @dataProvider isAvailableDataProvider
  195. */
  196. public function testIsAvailable($isAvailableProvider, $isActive, $expected)
  197. {
  198. $storeId = 1;
  199. $quote = $this->getMockForAbstractClass(CartInterface::class);
  200. $vaultProvider = $this->getMockForAbstractClass(MethodInterface::class);
  201. $config = $this->getMockForAbstractClass(ConfigInterface::class);
  202. $vaultProvider->expects(static::once())
  203. ->method('isAvailable')
  204. ->with($quote)
  205. ->willReturn($isAvailableProvider);
  206. $config->expects(static::any())
  207. ->method('getValue')
  208. ->with('active', $storeId)
  209. ->willReturn($isActive);
  210. $quote->expects(static::any())
  211. ->method('getStoreId')
  212. ->willReturn($storeId);
  213. /** @var Vault $model */
  214. $model = $this->objectManager->getObject(Vault::class, [
  215. 'config' => $config,
  216. 'vaultProvider' => $vaultProvider
  217. ]);
  218. $actual = $model->isAvailable($quote);
  219. static::assertEquals($expected, $actual);
  220. }
  221. /**
  222. * List of variations for testing isAvailable method
  223. * @return array
  224. */
  225. public function isAvailableDataProvider()
  226. {
  227. return [
  228. ['isAvailableProvider' => true, 'isActiveVault' => false, 'expected' => false],
  229. ['isAvailableProvider' => false, 'isActiveVault' => false, 'expected' => false],
  230. ['isAvailableProvider' => false, 'isActiveVault' => true, 'expected' => false],
  231. ['isAvailableProvider' => true, 'isActiveVault' => true, 'expected' => true],
  232. ];
  233. }
  234. }