Completed
Push — master ( 038254...115ca0 )
by Alejandro
06:27
created

JsonErrorResponseGeneratorTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 18
dl 0
loc 46
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 3 1
A errorStatusReturnsThatStatus() 0 13 1
A noErrorStatusReturnsInternalServerError() 0 9 1
A provideStatus() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Rest\ErrorHandler;
6
7
use PHPUnit\Framework\TestCase;
8
use Shlinkio\Shlink\Rest\ErrorHandler\JsonErrorResponseGenerator;
9
use Zend\Diactoros\Response;
10
use Zend\Diactoros\ServerRequest;
11
12
use function array_map;
13
use function range;
14
15
class JsonErrorResponseGeneratorTest extends TestCase
16
{
17
    /** @var JsonErrorResponseGenerator */
18
    private $errorHandler;
19
20
    public function setUp(): void
21
    {
22
        $this->errorHandler = new JsonErrorResponseGenerator();
23
    }
24
25
    /** @test */
26
    public function noErrorStatusReturnsInternalServerError(): void
27
    {
28
        /** @var Response\JsonResponse $response */
29
        $response = $this->errorHandler->__invoke(null, new ServerRequest(), new Response());
30
        $payload = $response->getPayload();
31
32
        $this->assertInstanceOf(Response\JsonResponse::class, $response);
33
        $this->assertEquals(500, $response->getStatusCode());
34
        $this->assertEquals('Internal Server Error', $payload['message']);
35
    }
36
37
    /**
38
     * @test
39
     * @dataProvider provideStatus
40
     */
41
    public function errorStatusReturnsThatStatus(int $status, string $message): void
42
    {
43
        /** @var Response\JsonResponse $response */
44
        $response = $this->errorHandler->__invoke(
45
            null,
46
            new ServerRequest(),
47
            (new Response())->withStatus($status, $message)
48
        );
49
        $payload = $response->getPayload();
50
51
        $this->assertInstanceOf(Response\JsonResponse::class, $response);
52
        $this->assertEquals($status, $response->getStatusCode());
53
        $this->assertEquals($message, $payload['message']);
54
    }
55
56
    public function provideStatus(): iterable
57
    {
58
        return array_map(function (int $status) {
59
            return [$status, 'Some message'];
60
        }, range(400, 500, 20));
61
    }
62
}
63