From 84a3cd8f9c7aa58fccf8f71e527e26295529268a Mon Sep 17 00:00:00 2001 From: eduard13 Date: Mon, 12 Nov 2018 18:55:56 +0200 Subject: [PATCH 1/4] Covering the CheckUserLoginBackendObserver by Unit Test --- .../CheckUserLoginBackendObserverTest.php | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php diff --git a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php new file mode 100644 index 0000000000000..b7b11a56fd5ce --- /dev/null +++ b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php @@ -0,0 +1,174 @@ +helperMock = $this->createMock(Data::class); + $this->messageManagerMock = $this->createMock(ManagerInterface::class); + $this->captchaStringResolverMock = $this->createMock(CaptchaStringResolver::class); + $this->requestMock = $this->createMock(RequestInterface::class); + + $this->observer = new CheckUserLoginBackendObserver( + $this->helperMock, + $this->captchaStringResolverMock, + $this->requestMock + ); + } + + /** + * Test check user login in backend with correct captcha + * + * @dataProvider captchaCorrectnessCheckDataProvider + * @param bool $isRequired + * @param bool $isCorrect + * @param int $invokedTimes + * @return void + * @throws AuthenticationException + */ + public function testCheckOnBackendLoginWithCorrectCaptcha($isRequired, $isCorrect, $invokedTimes) + { + $formId = 'backend_login'; + $login = 'admin'; + $captchaValue = 'captcha-value'; + + $observerMock = $this->createPartialMock(Observer::class, ['getEvent']); + $eventMock = $this->createPartialMock(Event::class, ['getUsername']); + $captcha = $this->createMock(DefaultModel::class); + + $eventMock->expects($this->any()) + ->method('getUsername') + ->willReturn('admin'); + $observerMock->expects($this->any()) + ->method('getEvent') + ->willReturn($eventMock); + $captcha->expects($this->once())->method('isRequired') + ->with($login) + ->willReturn($isRequired); + $captcha->expects($this->exactly($invokedTimes)) + ->method('isCorrect') + ->with($captchaValue) + ->willReturn($isCorrect); + $this->helperMock->expects($this->once()) + ->method('getCaptcha') + ->with($formId) + ->willReturn($captcha); + + $this->captchaStringResolverMock->expects($this->exactly($invokedTimes)) + ->method('resolve') + ->with($this->requestMock, $formId) + ->willReturn($captchaValue); + + $this->messageManagerMock->expects($this->exactly(0)) + ->method('addError') + ->with(__('Incorrect CAPTCHA')); + + $this->observer->execute($observerMock); + } + + /** + * @return array + */ + public function captchaCorrectnessCheckDataProvider() + { + return [ + [true, true, 1], + [false, true, 0] + ]; + } + + + /** + * Test check user login in backend with wrong captcha + * + * @return void + * @throws AuthenticationException + */ + public function testCheckOnBackendLoginWithWrongCaptcha() + { + $formId = 'backend_login'; + $login = 'admin'; + $captchaValue = 'captcha-value'; + + $observerMock = $this->createPartialMock(Observer::class, ['getEvent']); + $eventMock = $this->createPartialMock(Event::class, ['getUsername']); + $captcha = $this->createMock(DefaultModel::class); + + $eventMock->expects($this->any()) + ->method('getUsername') + ->willReturn('admin'); + $observerMock->expects($this->any()) + ->method('getEvent') + ->willReturn($eventMock); + $captcha->expects($this->once())->method('isRequired') + ->with($login) + ->willReturn(true); + $captcha->expects($this->exactly(1)) + ->method('isCorrect') + ->with($captchaValue) + ->willReturn(false); + $this->helperMock->expects($this->once()) + ->method('getCaptcha') + ->with($formId) + ->willReturn($captcha); + + $this->captchaStringResolverMock->expects($this->exactly(1)) + ->method('resolve') + ->with($this->requestMock, $formId) + ->willReturn($captchaValue); + + $this->expectException(AuthenticationException::class, 'Incorrect CAPTCHA.'); + + $this->observer->execute($observerMock); + } +} From 246eb673397e7358bc1ee295bec59ef66b6cfba2 Mon Sep 17 00:00:00 2001 From: eduard13 Date: Mon, 12 Nov 2018 19:02:12 +0200 Subject: [PATCH 2/4] Adding strict types --- .../Observer/CheckUserLoginBackendObserverTest.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php index b7b11a56fd5ce..02f6bed520acd 100644 --- a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php +++ b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Captcha\Test\Unit\Observer; use Magento\Captcha\Helper\Data; @@ -76,12 +78,13 @@ protected function setUp() * @return void * @throws AuthenticationException */ - public function testCheckOnBackendLoginWithCorrectCaptcha($isRequired, $isCorrect, $invokedTimes) + public function testCheckOnBackendLoginWithCorrectCaptcha(bool $isRequired, bool $isCorrect, int $invokedTimes): void { $formId = 'backend_login'; $login = 'admin'; $captchaValue = 'captcha-value'; + /** @var Observer|MockObject $observerMock */ $observerMock = $this->createPartialMock(Observer::class, ['getEvent']); $eventMock = $this->createPartialMock(Event::class, ['getUsername']); $captcha = $this->createMock(DefaultModel::class); @@ -119,7 +122,7 @@ public function testCheckOnBackendLoginWithCorrectCaptcha($isRequired, $isCorrec /** * @return array */ - public function captchaCorrectnessCheckDataProvider() + public function captchaCorrectnessCheckDataProvider(): array { return [ [true, true, 1], @@ -134,12 +137,13 @@ public function captchaCorrectnessCheckDataProvider() * @return void * @throws AuthenticationException */ - public function testCheckOnBackendLoginWithWrongCaptcha() + public function testCheckOnBackendLoginWithWrongCaptcha(): void { $formId = 'backend_login'; $login = 'admin'; $captchaValue = 'captcha-value'; + /** @var Observer|MockObject $observerMock */ $observerMock = $this->createPartialMock(Observer::class, ['getEvent']); $eventMock = $this->createPartialMock(Event::class, ['getUsername']); $captcha = $this->createMock(DefaultModel::class); @@ -167,7 +171,7 @@ public function testCheckOnBackendLoginWithWrongCaptcha() ->with($this->requestMock, $formId) ->willReturn($captchaValue); - $this->expectException(AuthenticationException::class, 'Incorrect CAPTCHA.'); + $this->expectException(AuthenticationException::class); $this->observer->execute($observerMock); } From 993ba971580958cdcdb779c80c193bd86183776c Mon Sep 17 00:00:00 2001 From: eduard13 Date: Tue, 13 Nov 2018 09:47:20 +0200 Subject: [PATCH 3/4] Adjusting the Unit Test strictness --- .../CheckUserLoginBackendObserverTest.php | 76 +++++-------------- 1 file changed, 18 insertions(+), 58 deletions(-) diff --git a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php index 02f6bed520acd..2d0a2a7e1c99a 100644 --- a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php +++ b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php @@ -14,7 +14,6 @@ use Magento\Framework\App\RequestInterface; use Magento\Framework\Event; use Magento\Framework\Event\Observer; -use Magento\Framework\Exception\Plugin\AuthenticationException; use Magento\Framework\Message\ManagerInterface; use PHPUnit\Framework\TestCase; use PHPUnit_Framework_MockObject_MockObject as MockObject; @@ -71,14 +70,11 @@ protected function setUp() /** * Test check user login in backend with correct captcha * - * @dataProvider captchaCorrectnessCheckDataProvider + * @dataProvider requiredCaptchaDataProvider * @param bool $isRequired - * @param bool $isCorrect - * @param int $invokedTimes * @return void - * @throws AuthenticationException */ - public function testCheckOnBackendLoginWithCorrectCaptcha(bool $isRequired, bool $isCorrect, int $invokedTimes): void + public function testCheckOnBackendLoginWithCorrectCaptcha(bool $isRequired): void { $formId = 'backend_login'; $login = 'admin'; @@ -89,44 +85,25 @@ public function testCheckOnBackendLoginWithCorrectCaptcha(bool $isRequired, bool $eventMock = $this->createPartialMock(Event::class, ['getUsername']); $captcha = $this->createMock(DefaultModel::class); - $eventMock->expects($this->any()) - ->method('getUsername') - ->willReturn('admin'); - $observerMock->expects($this->any()) - ->method('getEvent') - ->willReturn($eventMock); - $captcha->expects($this->once())->method('isRequired') - ->with($login) - ->willReturn($isRequired); - $captcha->expects($this->exactly($invokedTimes)) - ->method('isCorrect') - ->with($captchaValue) - ->willReturn($isCorrect); - $this->helperMock->expects($this->once()) - ->method('getCaptcha') - ->with($formId) - ->willReturn($captcha); - - $this->captchaStringResolverMock->expects($this->exactly($invokedTimes)) - ->method('resolve') - ->with($this->requestMock, $formId) + $eventMock->method('getUsername')->willReturn('admin'); + $observerMock->method('getEvent')->willReturn($eventMock); + $captcha->method('isRequired')->with($login)->willReturn($isRequired); + $captcha->method('isCorrect')->with($captchaValue)->willReturn(true); + $this->helperMock->method('getCaptcha')->with($formId)->willReturn($captcha); + $this->captchaStringResolverMock->method('resolve')->with($this->requestMock, $formId) ->willReturn($captchaValue); - $this->messageManagerMock->expects($this->exactly(0)) - ->method('addError') - ->with(__('Incorrect CAPTCHA')); - $this->observer->execute($observerMock); } /** * @return array */ - public function captchaCorrectnessCheckDataProvider(): array + public function requiredCaptchaDataProvider(): array { return [ - [true, true, 1], - [false, true, 0] + [true], + [false] ]; } @@ -135,7 +112,7 @@ public function captchaCorrectnessCheckDataProvider(): array * Test check user login in backend with wrong captcha * * @return void - * @throws AuthenticationException + * @expectedException \Magento\Framework\Exception\Plugin\AuthenticationException */ public function testCheckOnBackendLoginWithWrongCaptcha(): void { @@ -148,31 +125,14 @@ public function testCheckOnBackendLoginWithWrongCaptcha(): void $eventMock = $this->createPartialMock(Event::class, ['getUsername']); $captcha = $this->createMock(DefaultModel::class); - $eventMock->expects($this->any()) - ->method('getUsername') - ->willReturn('admin'); - $observerMock->expects($this->any()) - ->method('getEvent') - ->willReturn($eventMock); - $captcha->expects($this->once())->method('isRequired') - ->with($login) - ->willReturn(true); - $captcha->expects($this->exactly(1)) - ->method('isCorrect') - ->with($captchaValue) - ->willReturn(false); - $this->helperMock->expects($this->once()) - ->method('getCaptcha') - ->with($formId) - ->willReturn($captcha); - - $this->captchaStringResolverMock->expects($this->exactly(1)) - ->method('resolve') - ->with($this->requestMock, $formId) + $eventMock->method('getUsername')->willReturn($login); + $observerMock->method('getEvent')->willReturn($eventMock); + $captcha->method('isRequired')->with($login)->willReturn(true); + $captcha->method('isCorrect')->with($captchaValue)->willReturn(false); + $this->helperMock->method('getCaptcha')->with($formId)->willReturn($captcha); + $this->captchaStringResolverMock->method('resolve')->with($this->requestMock, $formId) ->willReturn($captchaValue); - $this->expectException(AuthenticationException::class); - $this->observer->execute($observerMock); } } From d84929a4241776521322ba3fc9521544639bd59c Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Tue, 13 Nov 2018 17:10:23 +0200 Subject: [PATCH 4/4] Fixed code style issue --- .../Test/Unit/Observer/CheckUserLoginBackendObserverTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php index 2d0a2a7e1c99a..415f022a7364d 100644 --- a/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php +++ b/app/code/Magento/Captcha/Test/Unit/Observer/CheckUserLoginBackendObserverTest.php @@ -107,7 +107,6 @@ public function requiredCaptchaDataProvider(): array ]; } - /** * Test check user login in backend with wrong captcha *