AddFieldsToResponseObserverTest.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Authorizenet\Test\Unit\Observer;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  8. /**
  9. * Class AddFieldsToResponseObserverTest
  10. *
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. */
  13. class AddFieldsToResponseObserverTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /**
  16. * Core registry
  17. *
  18. * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $coreRegistryMock;
  21. /**
  22. * @var \Magento\Authorizenet\Model\Directpost|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $paymentMock;
  25. /**
  26. * @var \Magento\Authorizenet\Model\Directpost\Session|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $sessionMock;
  29. /**
  30. * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $storeManagerMock;
  33. /**
  34. * @var \Magento\Checkout\Controller\Onepage\SaveOrder|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. protected $actionMock;
  37. /**
  38. * @var \Magento\Framework\DataObject|\PHPUnit_Framework_MockObject_MockObject
  39. */
  40. protected $resultMock;
  41. /**
  42. * @var \Magento\Authorizenet\Observer\AddFieldsToResponseObserver
  43. */
  44. protected $addFieldsToResponseObserver;
  45. /**
  46. * Set up
  47. *
  48. * @return void
  49. */
  50. protected function setUp()
  51. {
  52. $helper = new ObjectManager($this);
  53. $this->coreRegistryMock = $this->getMockBuilder(\Magento\Framework\Registry::class)
  54. ->disableOriginalConstructor()
  55. ->getMock();
  56. $this->paymentMock = $this->getMockBuilder(\Magento\Authorizenet\Model\Directpost::class)
  57. ->disableOriginalConstructor()
  58. ->getMock();
  59. $this->sessionMock = $this->getMockBuilder(\Magento\Authorizenet\Model\Directpost\Session::class)
  60. ->disableOriginalConstructor()
  61. ->setMethods(['setLastOrderIncrementId', 'addCheckoutOrderIncrementId'])
  62. ->getMock();
  63. $this->storeManagerMock = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
  64. ->disableOriginalConstructor()
  65. ->getMockForAbstractClass();
  66. $this->actionMock = $this->getMockBuilder(\Magento\Checkout\Controller\Onepage\SaveOrder::class)
  67. ->disableOriginalConstructor()
  68. ->getMock();
  69. $this->resultMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  70. ->disableOriginalConstructor()
  71. ->getMock();
  72. $this->addFieldsToResponseObserver = $helper->getObject(
  73. \Magento\Authorizenet\Observer\AddFieldsToResponseObserver::class,
  74. [
  75. 'coreRegistry' => $this->coreRegistryMock,
  76. 'payment' => $this->paymentMock,
  77. 'session' => $this->sessionMock,
  78. 'storeManager' => $this->storeManagerMock,
  79. ]
  80. );
  81. }
  82. /**
  83. * Test for addFieldsToResponse method
  84. *
  85. * @return void
  86. */
  87. public function testAddFieldsToResponseSuccess()
  88. {
  89. $testData = $this->getAddFieldsToResponseSuccessTestData();
  90. $observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
  91. ->disableOriginalConstructor()
  92. ->getMock();
  93. $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
  94. ->disableOriginalConstructor()
  95. ->getMock();
  96. $orderPaymentMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Payment::class)
  97. ->disableOriginalConstructor()
  98. ->getMock();
  99. $instanceMock = $this->getMockBuilder(\Magento\Authorizenet\Model\Directpost::class)
  100. ->disableOriginalConstructor()
  101. ->getMock();
  102. $requestToAuthorizenetMock = $this->getMockBuilder(\Magento\Authorizenet\Model\Directpost\Request::class)
  103. ->disableOriginalConstructor()
  104. ->setMethods(['setControllerActionName', 'setIsSecure', 'getData'])
  105. ->getMock();
  106. $requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
  107. ->disableOriginalConstructor()
  108. ->setMethods(['getControllerName'])
  109. ->getMockForAbstractClass();
  110. $storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class)
  111. ->disableOriginalConstructor()
  112. ->getMock();
  113. $this->coreRegistryMock->expects($this->once())
  114. ->method('registry')
  115. ->with('directpost_order')
  116. ->willReturn($orderMock);
  117. $orderMock->expects($this->once())
  118. ->method('getId')
  119. ->willReturn($testData['order.getId']);
  120. $orderMock->expects($this->once())
  121. ->method('getPayment')
  122. ->willReturn($orderPaymentMock);
  123. $orderPaymentMock->expects($this->once())
  124. ->method('getMethod')
  125. ->willReturn($testData['orderPayment.getMethod']);
  126. $this->paymentMock->expects($this->exactly(2))
  127. ->method('getCode')
  128. ->willReturn($testData['payment.getCode']);
  129. $observerMock->expects($this->atLeastOnce())
  130. ->method('getData')
  131. ->willReturnMap($testData['observer.getData']);
  132. $this->resultMock->expects($this->once())
  133. ->method('getData')
  134. ->willReturn($testData['result.getData']);
  135. $orderMock->expects($this->atLeastOnce())
  136. ->method('getIncrementId')
  137. ->willReturn($testData['order.getIncrementId']);
  138. $this->sessionMock->expects($this->once())
  139. ->method('addCheckoutOrderIncrementId')
  140. ->with($testData['session.addCheckoutOrderIncrementId']);
  141. $this->sessionMock->expects($this->once())
  142. ->method('setLastOrderIncrementId')
  143. ->with($testData['session.setLastOrderIncrementId']);
  144. $orderPaymentMock->expects($this->once())
  145. ->method('getMethodInstance')
  146. ->willReturn($instanceMock);
  147. $instanceMock->expects($this->once())
  148. ->method('generateRequestFromOrder')
  149. ->with($orderMock)
  150. ->willReturn($requestToAuthorizenetMock);
  151. $this->actionMock->expects($this->once())
  152. ->method('getRequest')
  153. ->willReturn($requestMock);
  154. $requestMock->expects($this->once())
  155. ->method('getControllerName')
  156. ->willReturn($testData['request.getControllerName']);
  157. $requestToAuthorizenetMock->expects($this->once())
  158. ->method('setControllerActionName')
  159. ->with($testData['requestToAuthorizenet.setControllerActionName']);
  160. $this->storeManagerMock->expects($this->once())
  161. ->method('getStore')
  162. ->willReturn($storeMock);
  163. $storeMock->expects($this->once())
  164. ->method('isCurrentlySecure')
  165. ->willReturn($testData['store.isCurrentlySecure']);
  166. $requestToAuthorizenetMock->expects($this->once())
  167. ->method('setIsSecure')
  168. ->with($testData['requestToAuthorizenet.setIsSecure']);
  169. $requestToAuthorizenetMock->expects($this->once())
  170. ->method('getData')
  171. ->willReturn($testData['requestToAuthorizenet.getData']);
  172. $this->resultMock->expects($this->once())
  173. ->method('setData')
  174. ->with($testData['result.setData']);
  175. $this->addFieldsToResponseObserver->execute($observerMock);
  176. }
  177. /**
  178. * Get data for test testAddFieldsToResponseSuccess
  179. *
  180. * @return array
  181. */
  182. protected function getAddFieldsToResponseSuccessTestData()
  183. {
  184. $requestFields = [
  185. 'field-1' => 'field-value-1',
  186. 'field-2' => 'field-value-2',
  187. 'field-3' => 'field-value-3',
  188. ];
  189. $secure = 'test-currently-secure';
  190. $controllerName = 'test-controller-name';
  191. $incrementId = '0000000001';
  192. $paymentCode = 'test-payment-code';
  193. return [
  194. 'order.getId' => 77,
  195. 'orderPayment.getMethod' => $paymentCode,
  196. 'payment.getCode' => $paymentCode,
  197. 'observer.getData' => [
  198. ['action', null, $this->actionMock],
  199. ['result', null, $this->resultMock],
  200. ],
  201. 'result.getData' => [
  202. 'error' => false
  203. ],
  204. 'order.getIncrementId' => $incrementId,
  205. 'session.addCheckoutOrderIncrementId' => $incrementId,
  206. 'session.setLastOrderIncrementId' => $incrementId,
  207. 'request.getControllerName' => $controllerName,
  208. 'requestToAuthorizenet.setControllerActionName' => $controllerName,
  209. 'store.isCurrentlySecure' => $secure,
  210. 'requestToAuthorizenet.setIsSecure' => $secure,
  211. 'requestToAuthorizenet.getData' => $requestFields,
  212. 'result.setData' => [
  213. 'error' => false,
  214. 'test-payment-code' => [
  215. 'fields' => $requestFields
  216. ]
  217. ]
  218. ];
  219. }
  220. }