Passed
Push — master ( b75818...b2c04e )
by Alexander
11:23
created

MatchingResultTest::testProcessFailure()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
c 0
b 0
f 0
dl 0
loc 8
rs 10
cc 1
nc 1
nop 0
1
<?php
2
namespace Yiisoft\Router\Tests;
3
4
use Nyholm\Psr7\Response;
5
use Nyholm\Psr7\ServerRequest;
6
use PHPUnit\Framework\TestCase;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Server\MiddlewareInterface;
10
use Psr\Http\Server\RequestHandlerInterface;
11
use Yiisoft\Router\MatchingResult;
12
use Yiisoft\Router\Method;
13
use Yiisoft\Router\Route;
14
15
final class MatchingResultTest extends TestCase
16
{
17
    public function testFromSucess(): void
18
    {
19
        $route = Route::get('/{name}');
20
21
        $result = MatchingResult::fromSuccess($route, ['name' => 'Mehdi']);
22
        $this->assertTrue($result->isSuccess());
23
        $this->assertSame(['name' => 'Mehdi'], $result->parameters());
24
    }
25
26
    public function testFromFailureOnMethodFailure(): void
27
    {
28
        $result = MatchingResult::fromFailure([Method::GET, Method::HEAD]);
29
30
        $this->assertFalse($result->isSuccess());
31
        $this->assertTrue($result->isMethodFailure());
32
        $this->assertSame([Method::GET, Method::HEAD], $result->methods());
33
    }
34
35
    public function testFromFailureOnNotFoundFailure(): void
36
    {
37
        $result = MatchingResult::fromFailure(Method::ANY);
38
39
        $this->assertFalse($result->isSuccess());
40
        $this->assertFalse($result->isMethodFailure());
41
    }
42
43
    public function testProcessSuccess(): void
44
    {
45
        $route = Route::post('/')->to($this->getMiddleware());
46
        $result = MatchingResult::fromSuccess($route, []);
47
        $request = new ServerRequest('POST', '/');
48
49
        $response = $result->process($request, $this->getRequestHandler());
50
        $this->assertSame(201, $response->getStatusCode());
51
    }
52
53
    public function testProcessFailure(): void
54
    {
55
        $request = new ServerRequest('POST', '/');
56
57
        $response = MatchingResult::fromFailure([Method::GET, Method::HEAD])
58
            ->process($request, $this->getRequestHandler());
59
60
        $this->assertSame(404, $response->getStatusCode());
61
    }
62
63
    private function getMiddleware(): MiddlewareInterface
64
    {
65
        return new class implements MiddlewareInterface {
66
            public function process(
67
              ServerRequestInterface $request,
68
              RequestHandlerInterface $handler
69
            ): ResponseInterface
70
            {
71
                return (new Response())->withStatus(201);
72
            }
73
        };
74
    }
75
76
    private function getRequestHandler(): RequestHandlerInterface
77
    {
78
        return new class implements RequestHandlerInterface {
79
            public function handle(ServerRequestInterface $request): ResponseInterface
80
            {
81
                return new Response(404);
82
            }
83
        };
84
    }
85
}
86