Completed
Pull Request — master (#113)
by
unknown
02:32 queued 36s
created

CallbackTest.php$0 ➔ has()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 2
cc 1
rs 10
1
<?php
2
3
namespace Yiisoft\Yii\Web\Tests\Middleware;
4
5
use Nyholm\Psr7\Response;
6
use Nyholm\Psr7\ServerRequest;
7
use PHPUnit\Framework\TestCase;
8
use Psr\Container\ContainerInterface;
9
use Psr\Http\Message\ResponseInterface;
10
use Psr\Http\Message\ServerRequestInterface;
11
use Psr\Http\Server\RequestHandlerInterface;
12
use Yiisoft\Router\Method;
13
use Yiisoft\Yii\Web\Middleware\Callback;
14
15
final class CallbackTest extends TestCase
16
{
17
    /**
18
     * @test
19
     */
20
    public function handlerIsPassedToCallback()
21
    {
22
        $middleware = new Callback(function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
23
            return $handler->handle($request);
24
        }, $this->createContainer());
25
26
        $response = $middleware->process($this->createRequest(), $this->createRequestHandler());
27
        $this->assertEquals(200, $response->getStatusCode());
28
    }
29
30
    /**
31
     * @test
32
     */
33
    public function callbackResultReturned()
34
    {
35
        $middleware = new Callback(function () {
36
            return new Response(400);
37
        }, $this->createContainer());
38
39
        $response = $middleware->process($this->createRequest(), $this->createRequestHandler());
40
        $this->assertEquals(400, $response->getStatusCode());
41
    }
42
43
    /**
44
     * @test
45
     */
46
    public function requestIsPassedToCallback()
47
    {
48
        $requestMethod = Method::PUT;
49
        $requestUri = '/test/request/uri';
50
        $middleware = new Callback(function (ServerRequestInterface $request, RequestHandlerInterface $handler) use ($requestMethod, $requestUri) {
51
52
            $this->assertEquals($request->getMethod(), $requestMethod);
53
            $this->assertEquals($request->getUri(), $requestUri);
54
55
            return $handler->handle($request);
56
        }, $this->createContainer());
57
58
        $middleware->process($this->createRequest($requestMethod, $requestUri), $this->createRequestHandler());
59
    }
60
61
    /**
62
     * @test
63
     */
64
    public function checkDiContainerCalled()
65
    {
66
        $middleware = new Callback(function (Response $response) {
67
            return $response;
68
        }, $this->createContainer());
69
70
        $response = $middleware->process($this->createRequest(), $this->createRequestHandler());
71
        $this->assertEquals(404, $response->getStatusCode());
72
    }
73
74
    private function createContainer(): ContainerInterface
75
    {
76
        return new class implements ContainerInterface {
77
            public function get($id)
78
            {
79
                return new Response(404);
80
            }
81
82
            public function has($id)
83
            {
84
                // do nothing
85
            }
86
        };
87
    }
88
89
    private function createRequestHandler(): RequestHandlerInterface
90
    {
91
        return new class implements RequestHandlerInterface {
92
            public function handle(ServerRequestInterface $request): ResponseInterface
93
            {
94
                return new Response(200);
95
            }
96
        };
97
    }
98
99
    private function createRequest(string $method = Method::GET, string $uri = '/'): ServerRequestInterface
100
    {
101
        return new ServerRequest($method, $uri);
102
    }
103
}
104