Completed
Pull Request — master (#113)
by
unknown
02:34
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
51
        $middleware = new Callback(function (ServerRequestInterface $request, RequestHandlerInterface $handler) use ($requestMethod, $requestUri) {
52
53
            $this->assertEquals($request->getMethod(), $requestMethod);
54
            $this->assertEquals($request->getUri(), $requestUri);
55
56
            return $handler->handle($request);
57
        }, $this->createContainer());
58
59
        $middleware->process($this->createRequest($requestMethod, $requestUri), $this->createRequestHandler());
60
    }
61
62
    /**
63
     * @test
64
     */
65
    public function checkDiContainerCalled()
66
    {
67
        $middleware = new Callback(function (Response $response) {
68
            return $response;
69
        }, $this->createContainer());
70
71
        $response = $middleware->process($this->createRequest(), $this->createRequestHandler());
72
        $this->assertEquals(404, $response->getStatusCode());
73
    }
74
75
    private function createContainer(): ContainerInterface
76
    {
77
        return new class implements ContainerInterface {
78
79
            public function get($id)
80
            {
81
                return new Response(404);
82
            }
83
84
            public function has($id)
85
            {
86
                // do nothing
87
            }
88
        };
89
    }
90
91
    private function createRequestHandler(): RequestHandlerInterface
92
    {
93
        return new class implements RequestHandlerInterface {
94
            public function handle(ServerRequestInterface $request): ResponseInterface
95
            {
96
                return new Response(200);
97
            }
98
        };
99
    }
100
101
    private function createRequest(string $method = Method::GET, string $uri = '/'): ServerRequestInterface
102
    {
103
        return new ServerRequest($method, $uri);
104
    }
105
}
106