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

CallbackTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Importance

Changes 3
Bugs 1 Features 2
Metric Value
eloc 29
c 3
b 1
f 2
dl 0
loc 87
rs 10
wmc 3

13 Methods

Rating   Name   Duplication   Size   Complexity  
A handlerIsPassedToCallback() 0 8 1
A callbackResultReturned() 0 8 1
createRequest() 0 3 ?
createContainer() 0 10 ?
A hp$1 ➔ createRequestHandler() 0 6 1
A hp$0 ➔ createContainer() 0 10 1
createRequestHandler() 0 6 ?
A hp$0 ➔ has() 0 2 1
A hp$0 ➔ get() 0 3 1
A hp$1 ➔ handle() 0 3 1
A hp$1 ➔ createRequest() 0 3 1
A checkDiContainerCalled() 0 8 1
A requestIsPassedToCallback() 0 13 1
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