3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
7 use PHPUnit\Framework\TestCase
;
8 use Shaarli\Front\Exception\UnauthorizedException
;
9 use Shaarli\Front\Exception\WrongTokenException
;
10 use Shaarli\Security\LoginManager
;
11 use Shaarli\Security\SessionManager
;
12 use Slim\Http\Request
;
15 * Class ShaarliControllerTest
17 * This class is used to test default behavior of ShaarliAdminController abstract class.
18 * It uses a dummy non abstract controller.
20 class ShaarliAdminControllerTest
extends TestCase
22 use FrontAdminControllerMockHelper
;
24 /** @var ShaarliAdminController */
25 protected $controller;
27 public function setUp(): void
29 $this->createContainer();
31 $this->controller
= new class($this->container
) extends ShaarliAdminController
33 public function checkToken(Request
$request): bool
35 return parent
::checkToken($request);
38 public function saveSuccessMessage(string $message): void
40 parent
::saveSuccessMessage($message);
43 public function saveWarningMessage(string $message): void
45 parent
::saveWarningMessage($message);
48 public function saveErrorMessage(string $message): void
50 parent
::saveErrorMessage($message);
56 * Creating an instance of an admin controller while logged out should raise an exception.
58 public function testInstantiateWhileLoggedOut(): void
60 $this->expectException(UnauthorizedException
::class);
62 $this->container
->loginManager
= $this->createMock(LoginManager
::class);
63 $this->container
->loginManager
->method('isLoggedIn')->willReturn(false);
65 $this->controller
= new class($this->container
) extends ShaarliAdminController
{};
69 * Trigger controller's checkToken with a valid token.
71 public function testCheckTokenWithValidToken(): void
73 $request = $this->createMock(Request
::class);
74 $request->method('getParam')->with('token')->willReturn($token = '12345');
76 $this->container
->sessionManager
= $this->createMock(SessionManager
::class);
77 $this->container
->sessionManager
->method('checkToken')->with($token)->willReturn(true);
79 static::assertTrue($this->controller
->checkToken($request));
83 * Trigger controller's checkToken with na valid token should raise an exception.
85 public function testCheckTokenWithNotValidToken(): void
87 $request = $this->createMock(Request
::class);
88 $request->method('getParam')->with('token')->willReturn($token = '12345');
90 $this->container
->sessionManager
= $this->createMock(SessionManager
::class);
91 $this->container
->sessionManager
->method('checkToken')->with($token)->willReturn(false);
93 $this->expectException(WrongTokenException
::class);
95 $this->controller
->checkToken($request);
99 * Test saveSuccessMessage() with a first message.
101 public function testSaveSuccessMessage(): void
103 $this->container
->sessionManager
104 ->expects(static::once())
105 ->method('setSessionParameter')
106 ->with(SessionManager
::KEY_SUCCESS_MESSAGES
, [$message = 'bravo!'])
109 $this->controller
->saveSuccessMessage($message);
113 * Test saveSuccessMessage() with existing messages.
115 public function testSaveSuccessMessageWithExistingMessages(): void
117 $this->container
->sessionManager
118 ->expects(static::once())
119 ->method('getSessionParameter')
120 ->with(SessionManager
::KEY_SUCCESS_MESSAGES
)
121 ->willReturn(['success1', 'success2'])
123 $this->container
->sessionManager
124 ->expects(static::once())
125 ->method('setSessionParameter')
126 ->with(SessionManager
::KEY_SUCCESS_MESSAGES
, ['success1', 'success2', $message = 'bravo!'])
129 $this->controller
->saveSuccessMessage($message);
133 * Test saveWarningMessage() with a first message.
135 public function testSaveWarningMessage(): void
137 $this->container
->sessionManager
138 ->expects(static::once())
139 ->method('setSessionParameter')
140 ->with(SessionManager
::KEY_WARNING_MESSAGES
, [$message = 'warning!'])
143 $this->controller
->saveWarningMessage($message);
147 * Test saveWarningMessage() with existing messages.
149 public function testSaveWarningMessageWithExistingMessages(): void
151 $this->container
->sessionManager
152 ->expects(static::once())
153 ->method('getSessionParameter')
154 ->with(SessionManager
::KEY_WARNING_MESSAGES
)
155 ->willReturn(['warning1', 'warning2'])
157 $this->container
->sessionManager
158 ->expects(static::once())
159 ->method('setSessionParameter')
160 ->with(SessionManager
::KEY_WARNING_MESSAGES
, ['warning1', 'warning2', $message = 'warning!'])
163 $this->controller
->saveWarningMessage($message);
167 * Test saveErrorMessage() with a first message.
169 public function testSaveErrorMessage(): void
171 $this->container
->sessionManager
172 ->expects(static::once())
173 ->method('setSessionParameter')
174 ->with(SessionManager
::KEY_ERROR_MESSAGES
, [$message = 'error!'])
177 $this->controller
->saveErrorMessage($message);
181 * Test saveErrorMessage() with existing messages.
183 public function testSaveErrorMessageWithExistingMessages(): void
185 $this->container
->sessionManager
186 ->expects(static::once())
187 ->method('getSessionParameter')
188 ->with(SessionManager
::KEY_ERROR_MESSAGES
)
189 ->willReturn(['error1', 'error2'])
191 $this->container
->sessionManager
192 ->expects(static::once())
193 ->method('setSessionParameter')
194 ->with(SessionManager
::KEY_ERROR_MESSAGES
, ['error1', 'error2', $message = 'error!'])
197 $this->controller
->saveErrorMessage($message);