Passed
Push — master ( 4cfdc5...37c7d0 )
by Alex
07:00
created

MiddlewareUnitTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 116
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 56
c 0
b 0
f 0
dl 0
loc 116
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testMiddleware() 0 30 1
A setUp() 0 3 1
A testMultipleMiddlewaresInOrderAndOmitMalformed() 0 64 1
1
<?php
2
namespace Mezon\Router\Tests\Standart;
3
4
use PHPUnit\Framework\TestCase;
5
use Mezon\Router\Router;
6
7
/**
8
 *
9
 * @psalm-suppress PropertyNotSetInConstructor
10
 */
11
class MiddlewareUnitTest extends TestCase
12
{
13
14
    /**
15
     * Default setup
16
     *
17
     * {@inheritdoc}
18
     * @see \PHPUnit\Framework\TestCase::setUp()
19
     */
20
    public function setUp(): void
21
    {
22
        $_SERVER['REQUEST_METHOD'] = 'GET';
23
    }
24
25
    /**
26
     * Testing middleware
27
     */
28
    public function testMiddleware(): void
29
    {
30
        // setup
31
        $route = '/route-with-middleware/';
32
        $router = new Router();
33
        $router->registerMiddleware('*', function () {
34
            return [
35
                1,
36
                2
37
            ];
38
        });
39
        $router->addRoute($route, function (int $i, int $j) {
40
            return [
41
                $i,
42
                $j
43
            ];
44
        });
45
        $router->registerMiddleware($route, function (int $i, int $j) {
46
            return [
47
                $i,
48
                $j
49
            ];
50
        });
51
52
        // test body
53
        $result = $router->callRoute($route);
54
55
        // assertions
56
        $this->assertEquals(1, $result[0]);
57
        $this->assertEquals(2, $result[1]);
58
    }
59
60
    /**
61
     * Testing multiple middlewares
62
     */
63
    public function testMultipleMiddlewaresInOrderAndOmitMalformed(): void
64
    {
65
        // setup
66
        $route = '/route/[i:id]';
67
        $router = new Router();
68
69
        $router->addRoute($route, function (string $route, array $parameters): array {
70
            return $parameters;
71
        });
72
73
        $router->registerMiddleware(
74
            $route,
75
            function (string $route, array $parameters) {
76
                $parameters['_second'] = $parameters['id'];
77
                $parameters['id'] += 9;
78
79
                return [
80
                    $route,
81
                    $parameters
82
                ];
83
            });
84
85
        // This middleware is broken, don't parse the result
86
        $router->registerMiddleware(
87
            $route,
88
            function (string $route, array $parameters) {
89
                $parameters['_dont_set_this'] = true;
90
91
                return null;
92
            });
93
94
        $router->registerMiddleware(
95
            $route,
96
            function (string $route, array $parameters) {
97
                $parameters['_third'] = $parameters['id'];
98
                $parameters['id'] *= 2;
99
100
                return [
101
                    $route,
102
                    $parameters
103
                ];
104
            });
105
106
        $router->registerMiddleware(
107
            '*',
108
            function (string $route, array $parameters) {
109
                $parameters['_first'] = $parameters['id'];
110
                $parameters['id'] *= 2;
111
112
                return [
113
                    $route,
114
                    $parameters
115
                ];
116
            });
117
118
        // test body
119
        $result = $router->callRoute('/route/1');
120
121
        // assertions
122
        $this->assertEquals(22, $result['id']);
123
        $this->assertEquals(1, $result['_first']);
124
        $this->assertEquals(2, $result['_second']);
125
        $this->assertEquals(11, $result['_third']);
126
        $this->assertTrue(empty($result['_dont_set_this']));
127
    }
128
}
129