Passed
Push — master ( eff708...846edf )
by Felipe
02:06
created

StatusCodeMiddlewareTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
/*
3
 * This file is part of coisa/http.
4
 *
5
 * (c) Felipe Sayão Lobato Abreu <[email protected]>
6
 *
7
 * This source file is subject to the license that is bundled
8
 * with this source code in the file LICENSE.
9
 */
10
11
namespace CoiSA\Http\Test\Handler;
12
13
use CoiSA\Http\Middleware\StatusCodeMiddleware;
14
use Fig\Http\Message\StatusCodeInterface;
15
use PHPUnit\Framework\TestCase;
16
use Prophecy\Prophecy\ObjectProphecy;
17
use Psr\Http\Message\ResponseInterface;
18
use Psr\Http\Message\ServerRequestInterface;
19
use Psr\Http\Server\RequestHandlerInterface;
20
21
/**
22
 * Class StatusCodeMiddlewareTest
23
 *
24
 * @package CoiSA\Http\Test\Handler
25
 */
26
final class StatusCodeMiddlewareTest extends TestCase
27
{
28
    /** @var ObjectProphecy|RequestHandlerInterface */
29
    private $handler;
30
31
    /** @var ObjectProphecy|ServerRequestInterface */
32
    private $serverRequest;
33
34
    /** @var ObjectProphecy|ResponseInterface */
35
    private $response;
36
37
    public function setUp(): void
38
    {
39
        $this->handler       = $this->prophesize(RequestHandlerInterface::class);
40
        $this->serverRequest = $this->prophesize(ServerRequestInterface::class);
41
        $this->response      = $this->prophesize(ResponseInterface::class);
42
43
        $this->handler->handle($this->serverRequest->reveal())->will([$this->response, 'reveal']);
44
    }
45
46
    public function testInvalidStatusThrowsUnexpectedValueException(): void
47
    {
48
        $this->expectException(\UnexpectedValueException::class);
49
50
        $middleware = new StatusCodeMiddleware(\rand(600, 700));
51
        $middleware->process($this->serverRequest->reveal(), $this->handler->reveal());
52
    }
53
54
    /**
55
     * @dataProvider provideStatusCodes
56
     *
57
     * @param int $statusCode
58
     */
59
    public function testResponseHaveSameGivenStatusCode($statusCode): void
60
    {
61
        $this->response->withStatus($statusCode)->will([$this->response, 'reveal']);
62
        $this->response->getStatusCode()->willReturn($statusCode);
63
64
        $middleware  = new StatusCodeMiddleware($statusCode);
65
        $response = $middleware->process($this->serverRequest->reveal(), $this->handler->reveal());
66
67
        $this->assertEquals($statusCode, $response->getStatusCode());
68
    }
69
70
    public function provideStatusCodes()
71
    {
72
        $reflection    = new \ReflectionClass(StatusCodeInterface::class);
73
        $allowedStatus = $reflection->getConstants();
74
75
        return \array_chunk($allowedStatus, 1);
76
    }
77
}
78