Completed
Pull Request — master (#554)
by Alejandro
11:37 queued 08:50
created

NotFoundTemplateHandlerTest::provideTemplates()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 11
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Core\ErrorHandler;
6
7
use PHPUnit\Framework\TestCase;
8
use Prophecy\Prophecy\ObjectProphecy;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Psr\Http\Server\MiddlewareInterface;
11
use Shlinkio\Shlink\Core\ErrorHandler\NotFoundTemplateHandler;
12
use Zend\Diactoros\Response;
13
use Zend\Diactoros\ServerRequestFactory;
14
use Zend\Expressive\Router\Route;
15
use Zend\Expressive\Router\RouteResult;
16
use Zend\Expressive\Template\TemplateRendererInterface;
17
18
class NotFoundTemplateHandlerTest extends TestCase
19
{
20
    /** @var NotFoundTemplateHandler */
21
    private $handler;
22
    /** @var ObjectProphecy */
23
    private $renderer;
24
25
    public function setUp(): void
26
    {
27
        $this->renderer = $this->prophesize(TemplateRendererInterface::class);
28
        $this->handler = new NotFoundTemplateHandler($this->renderer->reveal());
29
    }
30
31
    /**
32
     * @test
33
     * @dataProvider provideTemplates
34
     */
35
    public function properErrorTemplateIsRendered(ServerRequestInterface $request, string $expectedTemplate): void
36
    {
37
        $request = $request->withHeader('Accept', 'text/html');
38
        $render = $this->renderer->render($expectedTemplate)->willReturn('');
39
40
        $resp = $this->handler->handle($request);
41
42
        $this->assertInstanceOf(Response\HtmlResponse::class, $resp);
43
        $render->shouldHaveBeenCalledOnce();
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