Passed
Push — master ( ed3da1...0fa97a )
by Felipe
03:03 queued 01:12
created

RequestHandlerMiddlewareTest::testProcessReturnResponseFromDependencyHandler()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 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\Middleware;
12
13
use CoiSA\Http\Middleware\RequestHandlerMiddleware;
14
use PHPUnit\Framework\TestCase;
15
use Prophecy\Prophecy\ObjectProphecy;
16
use Psr\Http\Message\ResponseInterface;
17
use Psr\Http\Message\ServerRequestInterface;
18
use Psr\Http\Server\MiddlewareInterface;
19
use Psr\Http\Server\RequestHandlerInterface;
20
21
/**
22
 * Class RequestHandlerMiddlewareTest
23
 *
24
 * @package CoiSA\Http\Test
25
 */
26
final class RequestHandlerMiddlewareTest extends TestCase
27
{
28
    /** @var RequestHandlerMiddleware */
29
    private $middleware;
30
31
    /** @var ObjectProphecy|RequestHandlerInterface */
32
    private $requestHandler;
33
34
    /** @var ObjectProphecy|RequestHandlerInterface */
35
    private $next;
36
37
    /** @var ObjectProphecy|ServerRequestInterface */
38
    private $serverRequest;
39
40
    /** @var ObjectProphecy|ResponseInterface */
41
    private $response;
42
43
    /** @var array */
44
    private $execution = [];
45
46
    public function setUp(): void
47
    {
48
        $this->requestHandler = $this->prophesize(RequestHandlerInterface::class);
49
        $this->next           = $this->prophesize(RequestHandlerInterface::class);
50
        $this->serverRequest  = $this->prophesize(ServerRequestInterface::class);
51
        $this->response       = $this->prophesize(ResponseInterface::class);
52
53
        $this->middleware     = new RequestHandlerMiddleware($this->requestHandler->reveal());
54
55
        $testClass = $this;
56
        $callback  = function () use ($testClass) {
57
            $testClass->execution[] = \spl_object_hash($this);
58
59
            return $testClass->response->reveal();
60
        };
61
62
        $this->requestHandler->handle($this->serverRequest->reveal())->will($callback);
63
        $this->next->handle($this->serverRequest->reveal())->will($callback);
64
    }
65
66
    public function testImplementPsrInterfaces(): void
67
    {
68
        $this->assertInstanceOf(RequestHandlerInterface::class, $this->middleware);
69
        $this->assertInstanceOf(MiddlewareInterface::class, $this->middleware);
70
    }
71
72
    public function testHandleReturnHandlerResponse(): void
73
    {
74
        $serverRequest  = $this->serverRequest->reveal();
75
        $response       = $this->middleware->handle($serverRequest);
76
        $requestHandler = $this->requestHandler->reveal();
77
        $this->assertEquals($requestHandler->handle($serverRequest), $response);
78
    }
79
80
    public function testProcessExecuteBothHandlersInOrder(): void
81
    {
82
        $expected = [
83
            \spl_object_hash($this->requestHandler),
84
            \spl_object_hash($this->next),
85
        ];
86
        $this->middleware->process($this->serverRequest->reveal(), $this->next->reveal());
87
        $this->assertEquals($expected, $this->execution);
88
    }
89
90
    public function testProcessReturnResponseFromDependencyHandler(): void
91
    {
92
        $serverRequest  = $this->serverRequest->reveal();
93
        $response       = $this->middleware->process($serverRequest, $this->next->reveal());
94
        $requestHandler = $this->requestHandler->reveal();
95
        $this->assertEquals($requestHandler->handle($serverRequest), $response);
96
    }
97
}
98