From fdedbfd4a7fb547da0e0ce65c6180f74aad90691 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Wed, 27 May 2020 14:13:49 +0200 Subject: [PATCH] Test ShaarliAdminController --- .../admin/ShaarliAdminController.php | 4 +- .../admin/ShaarliAdminControllerTest.php | 199 ++++++++++++++++++ .../visitor/ShaarliPublicControllerTest.php | 2 +- 3 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 tests/front/controller/admin/ShaarliAdminControllerTest.php diff --git a/application/front/controller/admin/ShaarliAdminController.php b/application/front/controller/admin/ShaarliAdminController.php index 3385006c..3bc5bb6b 100644 --- a/application/front/controller/admin/ShaarliAdminController.php +++ b/application/front/controller/admin/ShaarliAdminController.php @@ -34,11 +34,13 @@ abstract class ShaarliAdminController extends ShaarliVisitorController /** * Any persistent action to the config or data store must check the XSRF token validity. */ - protected function checkToken(Request $request): void + protected function checkToken(Request $request): bool { if (!$this->container->sessionManager->checkToken($request->getParam('token'))) { throw new WrongTokenException(); } + + return true; } /** diff --git a/tests/front/controller/admin/ShaarliAdminControllerTest.php b/tests/front/controller/admin/ShaarliAdminControllerTest.php new file mode 100644 index 00000000..7c5f50a6 --- /dev/null +++ b/tests/front/controller/admin/ShaarliAdminControllerTest.php @@ -0,0 +1,199 @@ +createContainer(); + + $this->controller = new class($this->container) extends ShaarliAdminController + { + public function checkToken(Request $request): bool + { + return parent::checkToken($request); + } + + public function saveSuccessMessage(string $message): void + { + parent::saveSuccessMessage($message); + } + + public function saveWarningMessage(string $message): void + { + parent::saveWarningMessage($message); + } + + public function saveErrorMessage(string $message): void + { + parent::saveErrorMessage($message); + } + }; + } + + /** + * Creating an instance of an admin controller while logged out should raise an exception. + */ + public function testInstantiateWhileLoggedOut(): void + { + $this->expectException(UnauthorizedException::class); + + $this->container->loginManager = $this->createMock(LoginManager::class); + $this->container->loginManager->method('isLoggedIn')->willReturn(false); + + $this->controller = new class($this->container) extends ShaarliAdminController {}; + } + + /** + * Trigger controller's checkToken with a valid token. + */ + public function testCheckTokenWithValidToken(): void + { + $request = $this->createMock(Request::class); + $request->method('getParam')->with('token')->willReturn($token = '12345'); + + $this->container->sessionManager = $this->createMock(SessionManager::class); + $this->container->sessionManager->method('checkToken')->with($token)->willReturn(true); + + static::assertTrue($this->controller->checkToken($request)); + } + + /** + * Trigger controller's checkToken with na valid token should raise an exception. + */ + public function testCheckTokenWithNotValidToken(): void + { + $request = $this->createMock(Request::class); + $request->method('getParam')->with('token')->willReturn($token = '12345'); + + $this->container->sessionManager = $this->createMock(SessionManager::class); + $this->container->sessionManager->method('checkToken')->with($token)->willReturn(false); + + $this->expectException(WrongTokenException::class); + + $this->controller->checkToken($request); + } + + /** + * Test saveSuccessMessage() with a first message. + */ + public function testSaveSuccessMessage(): void + { + $this->container->sessionManager + ->expects(static::once()) + ->method('setSessionParameter') + ->with(SessionManager::KEY_SUCCESS_MESSAGES, [$message = 'bravo!']) + ; + + $this->controller->saveSuccessMessage($message); + } + + /** + * Test saveSuccessMessage() with existing messages. + */ + public function testSaveSuccessMessageWithExistingMessages(): void + { + $this->container->sessionManager + ->expects(static::once()) + ->method('getSessionParameter') + ->with(SessionManager::KEY_SUCCESS_MESSAGES) + ->willReturn(['success1', 'success2']) + ; + $this->container->sessionManager + ->expects(static::once()) + ->method('setSessionParameter') + ->with(SessionManager::KEY_SUCCESS_MESSAGES, ['success1', 'success2', $message = 'bravo!']) + ; + + $this->controller->saveSuccessMessage($message); + } + + /** + * Test saveWarningMessage() with a first message. + */ + public function testSaveWarningMessage(): void + { + $this->container->sessionManager + ->expects(static::once()) + ->method('setSessionParameter') + ->with(SessionManager::KEY_WARNING_MESSAGES, [$message = 'warning!']) + ; + + $this->controller->saveWarningMessage($message); + } + + /** + * Test saveWarningMessage() with existing messages. + */ + public function testSaveWarningMessageWithExistingMessages(): void + { + $this->container->sessionManager + ->expects(static::once()) + ->method('getSessionParameter') + ->with(SessionManager::KEY_WARNING_MESSAGES) + ->willReturn(['warning1', 'warning2']) + ; + $this->container->sessionManager + ->expects(static::once()) + ->method('setSessionParameter') + ->with(SessionManager::KEY_WARNING_MESSAGES, ['warning1', 'warning2', $message = 'warning!']) + ; + + $this->controller->saveWarningMessage($message); + } + + /** + * Test saveErrorMessage() with a first message. + */ + public function testSaveErrorMessage(): void + { + $this->container->sessionManager + ->expects(static::once()) + ->method('setSessionParameter') + ->with(SessionManager::KEY_ERROR_MESSAGES, [$message = 'error!']) + ; + + $this->controller->saveErrorMessage($message); + } + + /** + * Test saveErrorMessage() with existing messages. + */ + public function testSaveErrorMessageWithExistingMessages(): void + { + $this->container->sessionManager + ->expects(static::once()) + ->method('getSessionParameter') + ->with(SessionManager::KEY_ERROR_MESSAGES) + ->willReturn(['error1', 'error2']) + ; + $this->container->sessionManager + ->expects(static::once()) + ->method('setSessionParameter') + ->with(SessionManager::KEY_ERROR_MESSAGES, ['error1', 'error2', $message = 'error!']) + ; + + $this->controller->saveErrorMessage($message); + } +} diff --git a/tests/front/controller/visitor/ShaarliPublicControllerTest.php b/tests/front/controller/visitor/ShaarliPublicControllerTest.php index 1f7d57ad..899b280b 100644 --- a/tests/front/controller/visitor/ShaarliPublicControllerTest.php +++ b/tests/front/controller/visitor/ShaarliPublicControllerTest.php @@ -16,7 +16,7 @@ use Slim\Http\Uri; * This class is used to test default behavior of ShaarliController abstract class. * It uses a dummy non abstract controller. */ -class ShaarliControllerTest extends TestCase +class ShaarliPublicControllerTest extends TestCase { use FrontControllerMockHelper; -- 2.41.0