]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Test ShaarliAdminController
authorArthurHoaro <arthur@hoa.ro>
Wed, 27 May 2020 12:13:49 +0000 (14:13 +0200)
committerArthurHoaro <arthur@hoa.ro>
Thu, 23 Jul 2020 19:19:21 +0000 (21:19 +0200)
application/front/controller/admin/ShaarliAdminController.php
tests/front/controller/admin/ShaarliAdminControllerTest.php [new file with mode: 0644]
tests/front/controller/visitor/ShaarliPublicControllerTest.php

index 3385006c0271446c7d7ab460734cc2361b2941ea..3bc5bb6b87d5bf8e695b692670db8a4c0c86c73b 100644 (file)
@@ -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 (file)
index 0000000..7c5f50a
--- /dev/null
@@ -0,0 +1,199 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Shaarli\Front\Controller\Admin;
+
+use PHPUnit\Framework\TestCase;
+use Shaarli\Front\Exception\UnauthorizedException;
+use Shaarli\Front\Exception\WrongTokenException;
+use Shaarli\Security\LoginManager;
+use Shaarli\Security\SessionManager;
+use Slim\Http\Request;
+
+/**
+ * Class ShaarliControllerTest
+ *
+ * This class is used to test default behavior of ShaarliAdminController abstract class.
+ * It uses a dummy non abstract controller.
+ */
+class ShaarliAdminControllerTest extends TestCase
+{
+    use FrontAdminControllerMockHelper;
+
+    /** @var ShaarliAdminController */
+    protected $controller;
+
+    public function setUp(): void
+    {
+        $this->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);
+    }
+}
index 1f7d57ad541bd6a77cd2f257350a297d822f43d7..899b280b15499f118cc705b92f164e6a7ec61e0f 100644 (file)
@@ -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;