Completed
Pull Request — master (#148)
by Alejandro
04:22
created

NotFoundHandlerTest::provideResponses()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace ShlinkioTest\Shlink\Core\Response;
5
6
use PHPUnit\Framework\TestCase;
7
use Prophecy\Argument;
8
use Prophecy\Prophecy\MethodProphecy;
9
use Prophecy\Prophecy\ObjectProphecy;
10
use Shlinkio\Shlink\Core\Response\NotFoundHandler;
11
use Zend\Diactoros\Response;
12
use Zend\Diactoros\ServerRequestFactory;
13
use Zend\Expressive\Template\TemplateRendererInterface;
14
15
class NotFoundHandlerTest extends TestCase
16
{
17
    /**
18
     * @var NotFoundHandler
19
     */
20
    private $delegate;
21
    /**
22
     * @var ObjectProphecy
23
     */
24
    private $renderer;
25
26
    public function setUp()
27
    {
28
        $this->renderer = $this->prophesize(TemplateRendererInterface::class);
29
        $this->delegate = new NotFoundHandler($this->renderer->reveal());
30
    }
31
32
    /**
33
     * @param string $expectedResponse
34
     * @param string $accept
35
     * @param int $renderCalls
36
     *
37
     * @test
38
     * @dataProvider provideResponses
39
     */
40
    public function properResponseTypeIsReturned(string $expectedResponse, string $accept, int $renderCalls)
41
    {
42
        $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', $accept);
43
        /** @var MethodProphecy $render */
44
        $render = $this->renderer->render(Argument::cetera())->willReturn('');
45
46
        $resp = $this->delegate->handle($request);
47
48
        $this->assertInstanceOf($expectedResponse, $resp);
49
        $render->shouldHaveBeenCalledTimes($renderCalls);
50
    }
51
52
    public function provideResponses(): array
53
    {
54
        return [
55
            [Response\JsonResponse::class, 'application/json', 0],
56
            [Response\JsonResponse::class, 'text/json', 0],
57
            [Response\JsonResponse::class, 'application/x-json', 0],
58
            [Response\HtmlResponse::class, 'text/html', 1],
59
        ];
60
    }
61
}
62