CheckContactUsFormObserverTest.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Captcha\Test\Unit\Observer;
  7. /**
  8. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  9. */
  10. class CheckContactUsFormObserverTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\Captcha\Observer\CheckContactUsFormObserver
  14. */
  15. protected $checkContactUsFormObserver;
  16. /**
  17. * @var \Magento\Captcha\Helper\Data|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. protected $helperMock;
  20. /**
  21. * @var \Magento\Framework\App\ActionFlag|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. protected $actionFlagMock;
  24. /*
  25. * @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. protected $messageManagerMock;
  28. /**
  29. * @var \Magento\Framework\App\Response\RedirectInterface|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. protected $redirectMock;
  32. /**
  33. * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
  34. */
  35. protected $objectManagerHelper;
  36. /**
  37. * @var \Magento\Captcha\Observer\CaptchaStringResolver|\PHPUnit_Framework_MockObject_MockObject
  38. */
  39. protected $captchaStringResolverMock;
  40. /**
  41. * @var \Magento\Framework\Session\SessionManager|\PHPUnit_Framework_MockObject_MockObject
  42. */
  43. protected $sessionMock;
  44. /**
  45. * @var \Magento\Captcha\Model\DefaultModel|\PHPUnit_Framework_MockObject_MockObject
  46. */
  47. protected $captchaMock;
  48. /**
  49. * @var \Magento\Framework\App\Request\DataPersistorInterface|\PHPUnit_Framework_MockObject_MockObject
  50. */
  51. protected $dataPersistorMock;
  52. protected function setUp()
  53. {
  54. $this->objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  55. $this->helperMock = $this->createMock(\Magento\Captcha\Helper\Data::class);
  56. $this->actionFlagMock = $this->createMock(\Magento\Framework\App\ActionFlag::class);
  57. $this->messageManagerMock = $this->createMock(\Magento\Framework\Message\ManagerInterface::class);
  58. $this->redirectMock = $this->createMock(\Magento\Framework\App\Response\RedirectInterface::class);
  59. $this->captchaStringResolverMock = $this->createMock(\Magento\Captcha\Observer\CaptchaStringResolver::class);
  60. $this->sessionMock = $this->createPartialMock(\Magento\Framework\Session\SessionManager::class, ['addError']);
  61. $this->dataPersistorMock = $this->getMockBuilder(\Magento\Framework\App\Request\DataPersistorInterface::class)
  62. ->getMockForAbstractClass();
  63. $this->checkContactUsFormObserver = $this->objectManagerHelper->getObject(
  64. \Magento\Captcha\Observer\CheckContactUsFormObserver::class,
  65. [
  66. 'helper' => $this->helperMock,
  67. 'actionFlag' => $this->actionFlagMock,
  68. 'messageManager' => $this->messageManagerMock,
  69. 'redirect' => $this->redirectMock,
  70. 'captchaStringResolver' => $this->captchaStringResolverMock
  71. ]
  72. );
  73. $this->objectManagerHelper->setBackwardCompatibleProperty(
  74. $this->checkContactUsFormObserver,
  75. 'dataPersistor',
  76. $this->dataPersistorMock
  77. );
  78. $this->captchaMock = $this->createMock(\Magento\Captcha\Model\DefaultModel::class);
  79. }
  80. public function testCheckContactUsFormWhenCaptchaIsRequiredAndValid()
  81. {
  82. $formId = 'contact_us';
  83. $captchaValue = 'some-value';
  84. $controller = $this->createMock(\Magento\Framework\App\Action\Action::class);
  85. $request = $this->createMock(\Magento\Framework\App\Request\Http::class);
  86. $request->expects($this->any())
  87. ->method('getPost')
  88. ->with(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE, null)
  89. ->willReturn([$formId => $captchaValue]);
  90. $controller->expects($this->any())->method('getRequest')->willReturn($request);
  91. $this->captchaMock->expects($this->any())->method('isRequired')->willReturn(true);
  92. $this->captchaMock->expects($this->once())
  93. ->method('isCorrect')
  94. ->with($captchaValue)
  95. ->willReturn(true);
  96. $this->captchaStringResolverMock->expects($this->once())
  97. ->method('resolve')
  98. ->with($request, $formId)
  99. ->willReturn($captchaValue);
  100. $this->helperMock->expects($this->any())
  101. ->method('getCaptcha')
  102. ->with($formId)->willReturn($this->captchaMock);
  103. $this->sessionMock->expects($this->never())->method('addError');
  104. $this->checkContactUsFormObserver->execute(
  105. new \Magento\Framework\Event\Observer(['controller_action' => $controller])
  106. );
  107. }
  108. public function testCheckContactUsFormRedirectsCustomerWithWarningMessageWhenCaptchaIsRequiredAndInvalid()
  109. {
  110. $formId = 'contact_us';
  111. $captchaValue = 'some-value';
  112. $warningMessage = 'Incorrect CAPTCHA.';
  113. $redirectRoutePath = 'contact/index/index';
  114. $redirectUrl = 'http://magento.com/contacts/';
  115. $postData = ['name' => 'Some Name'];
  116. $request = $this->createMock(\Magento\Framework\App\Request\Http::class);
  117. $response = $this->createMock(\Magento\Framework\App\Response\Http::class);
  118. $request->expects($this->any())
  119. ->method('getPost')
  120. ->with(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE, null)
  121. ->willReturn([$formId => $captchaValue]);
  122. $request->expects($this->once())
  123. ->method('getPostValue')
  124. ->willReturn($postData);
  125. $this->redirectMock->expects($this->once())
  126. ->method('redirect')
  127. ->with($response, $redirectRoutePath, [])
  128. ->willReturn($redirectUrl);
  129. $controller = $this->createMock(\Magento\Framework\App\Action\Action::class);
  130. $controller->expects($this->any())->method('getRequest')->willReturn($request);
  131. $controller->expects($this->any())->method('getResponse')->willReturn($response);
  132. $this->captchaMock->expects($this->any())->method('isRequired')->willReturn(true);
  133. $this->captchaMock->expects($this->once())
  134. ->method('isCorrect')
  135. ->with($captchaValue)
  136. ->willReturn(false);
  137. $this->captchaStringResolverMock->expects($this->once())
  138. ->method('resolve')
  139. ->with($request, $formId)
  140. ->willReturn($captchaValue);
  141. $this->helperMock->expects($this->any())
  142. ->method('getCaptcha')
  143. ->with($formId)
  144. ->willReturn($this->captchaMock);
  145. $this->messageManagerMock->expects($this->once())->method('addError')->with($warningMessage);
  146. $this->actionFlagMock->expects($this->once())
  147. ->method('set')
  148. ->with('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
  149. $this->dataPersistorMock->expects($this->once())
  150. ->method('set')
  151. ->with($formId, $postData);
  152. $this->checkContactUsFormObserver->execute(
  153. new \Magento\Framework\Event\Observer(['controller_action' => $controller])
  154. );
  155. }
  156. public function testCheckContactUsFormDoesNotCheckCaptchaWhenItIsNotRequired()
  157. {
  158. $this->helperMock->expects($this->any())
  159. ->method('getCaptcha')
  160. ->with('contact_us')
  161. ->willReturn($this->captchaMock);
  162. $this->captchaMock->expects($this->any())->method('isRequired')->willReturn(false);
  163. $this->captchaMock->expects($this->never())->method('isCorrect');
  164. $this->checkContactUsFormObserver->execute(new \Magento\Framework\Event\Observer());
  165. }
  166. }