NotFoundTemplateHandlerTest::setUp()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Core\ErrorHandler;
6
7
use Closure;
8
use Laminas\Diactoros\Response;
9
use Laminas\Diactoros\ServerRequestFactory;
10
use Mezzio\Router\Route;
11
use Mezzio\Router\RouteResult;
12
use PHPUnit\Framework\TestCase;
13
use Psr\Http\Message\ServerRequestInterface;
14
use Psr\Http\Server\MiddlewareInterface;
15
use Shlinkio\Shlink\Core\ErrorHandler\NotFoundTemplateHandler;
16
17
class NotFoundTemplateHandlerTest extends TestCase
18
{
19
    private NotFoundTemplateHandler $handler;
20
    private Closure $readFile;
21
    private bool $readFileCalled;
22
23
    public function setUp(): void
24
    {
25
        $this->readFileCalled = false;
26
        $this->readFile = function (string $fileName): string {
27
            $this->readFileCalled = true;
28
            return $fileName;
29
        };
30
        $this->handler = new NotFoundTemplateHandler($this->readFile);
31
    }
32
33
    /**
34
     * @test
35
     * @dataProvider provideTemplates
36
     */
37
    public function properErrorTemplateIsRendered(ServerRequestInterface $request, string $expectedTemplate): void
38
    {
39
        $resp = $this->handler->handle($request->withHeader('Accept', 'text/html'));
40
41
        self::assertInstanceOf(Response\HtmlResponse::class, $resp);
42
        self::assertStringContainsString($expectedTemplate, (string) $resp->getBody());
43
        self::assertTrue($this->readFileCalled);
44
    }
45
46
    public function provideTemplates(): iterable
47
    {
48
        $request = ServerRequestFactory::fromGlobals();
49
50
        yield [$request, NotFoundTemplateHandler::NOT_FOUND_TEMPLATE];
51
        yield [
52
            $request->withAttribute(
53
                RouteResult::class,
54
                RouteResult::fromRoute(new Route('', $this->prophesize(MiddlewareInterface::class)->reveal())),
55
            ),
56
            NotFoundTemplateHandler::INVALID_SHORT_CODE_TEMPLATE,
57
        ];
58
    }
59
}
60