AfterPaymentSaveObserverTest.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Vault\Test\Unit\Observer;
  7. use Magento\Framework\App\DeploymentConfig;
  8. use Magento\Framework\Encryption\Encryptor;
  9. use Magento\Framework\Event\Observer;
  10. use Magento\Framework\Math\Random;
  11. use Magento\Sales\Api\Data\OrderPaymentExtension;
  12. use Magento\Sales\Api\Data\OrderPaymentExtensionFactory;
  13. use Magento\Sales\Model\Order;
  14. use Magento\Sales\Model\Order\Payment;
  15. use Magento\Vault\Model\PaymentToken;
  16. use Magento\Vault\Model\PaymentTokenManagement;
  17. use Magento\Vault\Observer\AfterPaymentSaveObserver;
  18. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  19. class AfterPaymentSaveObserverTest extends \PHPUnit\Framework\TestCase
  20. {
  21. /**
  22. * @var \Magento\Framework\Event\Observer|MockObject
  23. */
  24. protected $eventObserverArgMock;
  25. /**
  26. * @var \Magento\Vault\Observer\AfterPaymentSaveObserver
  27. */
  28. protected $observer;
  29. /**
  30. * @var \Magento\Framework\Encryption\Encryptor
  31. */
  32. protected $encryptorModel;
  33. /**
  34. * @var \Magento\Sales\Api\Data\OrderPaymentExtension|MockObject paymentExtension
  35. */
  36. protected $paymentExtension;
  37. /**
  38. * @var \Magento\Vault\Model\PaymentTokenManagement|MockObject paymentTokenManagementMock
  39. */
  40. protected $paymentTokenManagementMock;
  41. /**
  42. * @var \Magento\Vault\Model\PaymentToken|MockObject paymentTokenMock
  43. */
  44. protected $paymentTokenMock;
  45. /**
  46. * @var \Magento\Sales\Model\Order|MockObject salesOrderMock
  47. */
  48. protected $salesOrderMock;
  49. /**
  50. * @var \Magento\Sales\Model\Order\Payment|MockObject salesOrderPaymentMock
  51. */
  52. protected $salesOrderPaymentMock;
  53. /**
  54. * @return void
  55. */
  56. protected function setUp()
  57. {
  58. /** @var Random|MockObject $encryptorRandomGenerator */
  59. $encryptorRandomGenerator = $this->createMock(Random::class);
  60. /** @var DeploymentConfig|MockObject $deploymentConfigMock */
  61. $deploymentConfigMock = $this->createMock(DeploymentConfig::class);
  62. $this->encryptorModel = new Encryptor($encryptorRandomGenerator, $deploymentConfigMock);
  63. $this->paymentExtension = $this->getMockBuilder(OrderPaymentExtension::class)
  64. ->setMethods(['setVaultPaymentToken', 'getVaultPaymentToken', '__wakeup'])
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $this->paymentTokenManagementMock = $this->getMockBuilder(PaymentTokenManagement::class)
  68. ->setMethods(['saveTokenWithPaymentLink'])
  69. ->disableOriginalConstructor()
  70. ->getMock();
  71. $this->paymentTokenMock = $this->getMockBuilder(PaymentToken::class)
  72. ->setMethods(null)
  73. ->disableOriginalConstructor()
  74. ->getMock();
  75. $this->paymentExtension->setVaultPaymentToken($this->paymentTokenMock);
  76. // Sales Order Model
  77. $this->salesOrderMock = $this->createMock(Order::class);
  78. // Sales Order Payment Model
  79. $this->salesOrderPaymentMock = $this->getMockBuilder(Payment::class)
  80. ->setMethods(null)
  81. ->disableOriginalConstructor()
  82. ->getMock();
  83. $this->salesOrderPaymentMock->setOrder($this->salesOrderMock);
  84. $this->salesOrderPaymentMock->setExtensionAttributes($this->paymentExtension);
  85. // Arguments to observer container
  86. $this->eventObserverArgMock = $this->getMockBuilder(Observer::class)
  87. ->setMethods(['getDataByKey'])
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $this->eventObserverArgMock->expects($this->any())
  91. ->method('getDataByKey')
  92. ->with(AfterPaymentSaveObserver::PAYMENT_OBJECT_DATA_KEY)
  93. ->willReturn($this->salesOrderPaymentMock);
  94. // Observer class
  95. $this->observer = new AfterPaymentSaveObserver(
  96. $this->paymentTokenManagementMock,
  97. $this->encryptorModel
  98. );
  99. }
  100. /**
  101. * @param int $customerId
  102. * @param string $createdAt
  103. * @param string $token
  104. * @param bool $isActive
  105. * @param string $method
  106. * @dataProvider positiveCaseDataProvider
  107. */
  108. public function testPositiveCase($customerId, $createdAt, $token, $isActive, $method)
  109. {
  110. $this->paymentTokenMock->setGatewayToken($token);
  111. $this->paymentTokenMock->setCustomerId($customerId);
  112. $this->paymentTokenMock->setCreatedAt($createdAt);
  113. $this->paymentTokenMock->setPaymentMethodCode($method);
  114. $this->paymentTokenMock->setIsActive($isActive);
  115. $this->paymentExtension->expects($this->exactly(2))
  116. ->method('getVaultPaymentToken')
  117. ->willReturn($this->paymentTokenMock);
  118. if (!empty($token)) {
  119. $this->paymentTokenManagementMock->expects($this->once())
  120. ->method('saveTokenWithPaymentLink')
  121. ->willReturn(true);
  122. $this->paymentExtension->expects($this->once())
  123. ->method('setVaultPaymentToken')
  124. ->with($this->paymentTokenMock);
  125. } else {
  126. $this->paymentTokenManagementMock->expects($this->never())
  127. ->method('saveTokenWithPaymentLink');
  128. $this->paymentExtension->expects($this->never())
  129. ->method('setVaultPaymentToken')
  130. ->with($this->paymentTokenMock);
  131. }
  132. static::assertSame($this->observer, $this->observer->execute($this->eventObserverArgMock));
  133. $paymentToken = $this->salesOrderPaymentMock->getExtensionAttributes()->getVaultPaymentToken();
  134. static::assertSame($paymentToken, $this->paymentTokenMock);
  135. static::assertEquals($token, $paymentToken->getGatewayToken());
  136. static::assertEquals($isActive, $paymentToken->getIsActive());
  137. static::assertEquals($createdAt, $paymentToken->getCreatedAt());
  138. }
  139. /**
  140. * @return array
  141. */
  142. public function positiveCaseDataProvider()
  143. {
  144. return [
  145. [
  146. 1,
  147. '10\20\2015',
  148. 'asdfg',
  149. true,
  150. 'paypal'
  151. ],
  152. [
  153. null,
  154. null,
  155. null,
  156. false,
  157. null
  158. ],
  159. ];
  160. }
  161. }