Passed
Push — master ( 21057b...383a4e )
by Alexander
01:22
created

GroupTest::testAddMiddleware()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
c 0
b 0
f 0
dl 0
loc 14
rs 9.9666
cc 1
nc 1
nop 0
1
<?php
2
3
4
namespace Yiisoft\Router\Tests;
5
6
use PHPUnit\Framework\TestCase;
7
use Psr\Http\Server\MiddlewareInterface;
8
use Yiisoft\Router\Group;
9
use Yiisoft\Router\Route;
10
11
class GroupTest extends TestCase
12
{
13
    public function testAddRoute(): void
14
    {
15
        $listRoute = Route::get('/');
16
        $viewRoute = Route::get('/{id}');
17
18
        $group = new Group();
19
        $group->addRoute($listRoute);
20
        $group->addRoute($viewRoute);
21
22
        $this->assertCount(2, $group->getItems());
23
        $this->assertSame($listRoute, $group->getItems()[0]);
24
        $this->assertSame($viewRoute, $group->getItems()[1]);
25
    }
26
27
    public function testAddMiddleware(): void
28
    {
29
        $group = new Group();
30
31
        $middleware1 = $this->getMockBuilder(MiddlewareInterface::class)->getMock();
32
        $middleware2 = $this->getMockBuilder(MiddlewareInterface::class)->getMock();
33
34
        $group
35
            ->addMiddleware($middleware1)
36
            ->addMiddleware($middleware2);
37
38
        $this->assertCount(2, $group->getMiddlewares());
39
        $this->assertSame($middleware1, $group->getMiddlewares()[0]);
40
        $this->assertSame($middleware2, $group->getMiddlewares()[1]);
41
    }
42
43
    public function testAddGroup(): void
44
    {
45
        $logoutRoute = Route::post('/logout');
46
        $listRoute = Route::get('/');
47
        $viewRoute = Route::get('/{id}');
48
49
        $middleware1 = $this->getMockBuilder(MiddlewareInterface::class)->getMock();
50
        $middleware2 = $this->getMockBuilder(MiddlewareInterface::class)->getMock();
51
52
        $root = new Group();
53
        $root->addGroup('/api', static function (Group $group) use ($logoutRoute, $listRoute, $viewRoute, $middleware1, $middleware2) {
54
            $group->addRoute($logoutRoute);
55
            $group->addGroup('/post', static function (Group $group) use ($listRoute, $viewRoute) {
56
                $group->addRoute($listRoute);
57
                $group->addRoute($viewRoute);
58
            });
59
60
            $group->addMiddleware($middleware1);
61
            $group->addMiddleware($middleware2);
62
        });
63
64
        $this->assertCount(1, $root->getItems());
65
        $api = $root->getItems()[0];
66
67
        $this->assertSame('/api', $api->getPrefix());
68
        $this->assertCount(2, $api->getItems());
69
        $this->assertSame($logoutRoute, $api->getItems()[0]);
70
71
        /** @var Group $postGroup */
72
        $postGroup = $api->getItems()[1];
73
        $this->assertInstanceOf(Group::class, $postGroup);
74
        $this->assertCount(2, $api->getMiddlewares());
75
        $this->assertSame($middleware1, $api->getMiddlewares()[0]);
76
        $this->assertSame($middleware2, $api->getMiddlewares()[1]);
77
78
        $this->assertSame('/post', $postGroup->getPrefix());
79
        $this->assertCount(2, $postGroup->getItems());
80
        $this->assertSame($listRoute, $postGroup->getItems()[0]);
81
        $this->assertSame($viewRoute, $postGroup->getItems()[1]);
82
        $this->assertEmpty($postGroup->getMiddlewares());
83
    }
84
}
85