3 declare(strict_types
=1);
5 namespace Shaarli\Front
;
7 use PHPUnit\Framework\TestCase
;
8 use Shaarli\Config\ConfigManager
;
9 use Shaarli\Container\ShaarliContainer
;
10 use Shaarli\Front\Exception\LoginBannedException
;
11 use Shaarli\Render\PageBuilder
;
12 use Slim\Http\Request
;
13 use Slim\Http\Response
;
15 class ShaarliMiddlewareTest
extends TestCase
17 /** @var ShaarliContainer */
20 /** @var ShaarliMiddleware */
21 protected $middleware;
23 public function setUp(): void
25 $this->container
= $this->createMock(ShaarliContainer
::class);
26 $this->middleware
= new ShaarliMiddleware($this->container
);
29 public function testMiddlewareExecution(): void
31 $request = $this->createMock(Request
::class);
32 $response = new Response();
33 $controller = function (Request
$request, Response
$response): Response
{
34 return $response->withStatus(418); // I'm a tea pot
37 /** @var Response $result */
38 $result = $this->middleware
->__invoke($request, $response, $controller);
40 static::assertInstanceOf(Response
::class, $result);
41 static::assertSame(418, $result->getStatusCode());
44 public function testMiddlewareExecutionWithException(): void
46 $request = $this->createMock(Request
::class);
47 $response = new Response();
48 $controller = function (): void {
49 $exception = new LoginBannedException();
54 $pageBuilder = $this->createMock(PageBuilder
::class);
55 $pageBuilder->method('render')->willReturnCallback(function (string $message): string {
58 $this->container
->pageBuilder
= $pageBuilder;
60 $conf = $this->createMock(ConfigManager
::class);
61 $this->container
->conf
= $conf;
63 /** @var Response $result */
64 $result = $this->middleware
->__invoke($request, $response, $controller);
66 static::assertInstanceOf(Response
::class, $result);
67 static::assertSame(401, $result->getStatusCode());
68 static::assertContains('error', (string) $result->getBody());