CheckUserLoginBackendObserverTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Captcha\Test\Unit\Observer;
  8. use Magento\Captcha\Helper\Data;
  9. use Magento\Captcha\Model\DefaultModel;
  10. use Magento\Captcha\Observer\CaptchaStringResolver;
  11. use Magento\Captcha\Observer\CheckUserLoginBackendObserver;
  12. use Magento\Framework\App\RequestInterface;
  13. use Magento\Framework\Event;
  14. use Magento\Framework\Event\Observer;
  15. use Magento\Framework\Message\ManagerInterface;
  16. use PHPUnit\Framework\TestCase;
  17. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  18. /**
  19. * Class CheckUserLoginBackendObserverTest
  20. */
  21. class CheckUserLoginBackendObserverTest extends TestCase
  22. {
  23. /**
  24. * @var CheckUserLoginBackendObserver
  25. */
  26. private $observer;
  27. /**
  28. * @var ManagerInterface|MockObject
  29. */
  30. private $messageManagerMock;
  31. /**
  32. * @var CaptchaStringResolver|MockObject
  33. */
  34. private $captchaStringResolverMock;
  35. /**
  36. * @var RequestInterface|MockObject
  37. */
  38. private $requestMock;
  39. /**
  40. * @var Data|MockObject
  41. */
  42. private $helperMock;
  43. /**
  44. * Set Up
  45. *
  46. * @return void
  47. */
  48. protected function setUp()
  49. {
  50. $this->helperMock = $this->createMock(Data::class);
  51. $this->messageManagerMock = $this->createMock(ManagerInterface::class);
  52. $this->captchaStringResolverMock = $this->createMock(CaptchaStringResolver::class);
  53. $this->requestMock = $this->createMock(RequestInterface::class);
  54. $this->observer = new CheckUserLoginBackendObserver(
  55. $this->helperMock,
  56. $this->captchaStringResolverMock,
  57. $this->requestMock
  58. );
  59. }
  60. /**
  61. * Test check user login in backend with correct captcha
  62. *
  63. * @dataProvider requiredCaptchaDataProvider
  64. * @param bool $isRequired
  65. * @return void
  66. */
  67. public function testCheckOnBackendLoginWithCorrectCaptcha(bool $isRequired): void
  68. {
  69. $formId = 'backend_login';
  70. $login = 'admin';
  71. $captchaValue = 'captcha-value';
  72. /** @var Observer|MockObject $observerMock */
  73. $observerMock = $this->createPartialMock(Observer::class, ['getEvent']);
  74. $eventMock = $this->createPartialMock(Event::class, ['getUsername']);
  75. $captcha = $this->createMock(DefaultModel::class);
  76. $eventMock->method('getUsername')->willReturn('admin');
  77. $observerMock->method('getEvent')->willReturn($eventMock);
  78. $captcha->method('isRequired')->with($login)->willReturn($isRequired);
  79. $captcha->method('isCorrect')->with($captchaValue)->willReturn(true);
  80. $this->helperMock->method('getCaptcha')->with($formId)->willReturn($captcha);
  81. $this->captchaStringResolverMock->method('resolve')->with($this->requestMock, $formId)
  82. ->willReturn($captchaValue);
  83. $this->observer->execute($observerMock);
  84. }
  85. /**
  86. * @return array
  87. */
  88. public function requiredCaptchaDataProvider(): array
  89. {
  90. return [
  91. [true],
  92. [false]
  93. ];
  94. }
  95. /**
  96. * Test check user login in backend with wrong captcha
  97. *
  98. * @return void
  99. * @expectedException \Magento\Framework\Exception\Plugin\AuthenticationException
  100. */
  101. public function testCheckOnBackendLoginWithWrongCaptcha(): void
  102. {
  103. $formId = 'backend_login';
  104. $login = 'admin';
  105. $captchaValue = 'captcha-value';
  106. /** @var Observer|MockObject $observerMock */
  107. $observerMock = $this->createPartialMock(Observer::class, ['getEvent']);
  108. $eventMock = $this->createPartialMock(Event::class, ['getUsername']);
  109. $captcha = $this->createMock(DefaultModel::class);
  110. $eventMock->method('getUsername')->willReturn($login);
  111. $observerMock->method('getEvent')->willReturn($eventMock);
  112. $captcha->method('isRequired')->with($login)->willReturn(true);
  113. $captcha->method('isCorrect')->with($captchaValue)->willReturn(false);
  114. $this->helperMock->method('getCaptcha')->with($formId)->willReturn($captcha);
  115. $this->captchaStringResolverMock->method('resolve')->with($this->requestMock, $formId)
  116. ->willReturn($captchaValue);
  117. $this->observer->execute($observerMock);
  118. }
  119. }