Completed
Push — master ( e32a6c...5f3630 )
by Taosikai
15:51 queued 54s
created

RouteTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 2
dl 0
loc 117
c 0
b 0
f 0
rs 10
1
<?php
2
namespace Slince\Routing\Tests;
3
4
use PHPUnit\Framework\TestCase;
5
use Slince\Routing\Route;
6
7
class RouteTest extends TestCase
8
{
9
    public function testConstruct()
10
    {
11
        $route = new Route('/foo', 'Pages::foo');
12
        $this->assertEquals('/foo', $route->getPath());
13
        $this->assertEquals('Pages::foo', $route->getAction());
14
    }
15
16
    public function testName()
17
    {
18
        $route = new Route('/foo', 'Pages::foo');
19
        $route->setName('foo');
20
        $this->assertEquals('foo', $route->getName());
21
    }
22
23
    public function testPath()
24
    {
25
        $route = new Route('/{foo}', 'Pages::foo');
26
        $route->setPath('/{bar}');
27
        $this->assertEquals('/{bar}', $route->getPath());
28
        $route->setPath('');
29
        $this->assertEquals('/', $route->getPath());
30
        $route->setPath('bar');
31
        $this->assertEquals('/bar', $route->getPath());
32
        $route->setPath('//path');
33
        $this->assertEquals('/path', $route->getPath());
34
    }
35
36
    public function testDefaults()
37
    {
38
        $route = new Route('/{foo}', 'Pages::foo');
39
        $route->setDefaults(['foo' => 'bar']);
40
        $this->assertEquals(['foo' => 'bar'], $route->getDefaults());
41
        $this->assertEquals($route, $route->setDefaults([]));
42
        $route->setDefault('foo', 'bar');
43
        $this->assertEquals('bar', $route->getDefault('foo'));
44
        $route->setDefault('foo2', 'bar2');
45
        $this->assertEquals('bar2', $route->getDefault('foo2'));
46
        $this->assertNull($route->getDefault('not_defined'));
47
        $route->setDefaults(['foo' => 'foo']);
48
        $route->addDefaults(['bar' => 'bar']);
49
        $this->assertEquals($route, $route->addDefaults([]));
50
        $this->assertEquals(['foo' => 'foo', 'bar' => 'bar'], $route->getDefaults());
51
    }
52
53
    public function testRequirements()
54
    {
55
        $route = new Route('/{foo}', 'Pages::foo');
56
        $route->setRequirements(['foo' => '\d+']);
57
        $this->assertEquals(['foo' => '\d+'], $route->getRequirements());
58
        $this->assertEquals('\d+', $route->getRequirement('foo'));
59
        $this->assertNull($route->getRequirement('bar'));
60
        $this->assertEquals($route, $route->setRequirements([]));
61
        $route->setRequirements(['foo' => '\d+']);
62
        $route->addRequirements(['bar' => '\d+']);
63
        $this->assertEquals($route, $route->addRequirements([]));
64
        $this->assertEquals(['foo' => '\d+', 'bar' => '\d+'], $route->getRequirements());
65
    }
66
    public function testRequirement()
67
    {
68
        $route = new Route('/{foo}', 'Pages::foo');
69
        $this->assertFalse($route->hasRequirement('foo'));
70
        $route->setRequirement('foo', '\d+');
71
        $this->assertEquals('\d+', $route->getRequirement('foo'));
72
        $this->assertTrue($route->hasRequirement('foo'));
73
    }
74
75
    public function testHost()
76
    {
77
        $route = new Route('/{foo}', 'Pages::foo');
78
        $route->setHost('{locale}.domain.com');
79
        $this->assertEquals('{locale}.domain.com', $route->getHost());
80
    }
81
82
    public function testScheme()
83
    {
84
        $route = new Route('/{foo}', 'Pages::foo');
85
        $this->assertEquals([], $route->getSchemes());
86
        $this->assertFalse($route->hasScheme('http'));
87
        $route->setSchemes(['hTTp']);
88
        $this->assertEquals(['http'], $route->getSchemes());
89
        $this->assertTrue($route->hasScheme('htTp'));
90
        $this->assertFalse($route->hasScheme('httpS'));
91
        $route->setSchemes(['HttpS', 'hTTp']);
92
        $this->assertEquals(['https', 'http'], $route->getSchemes());
93
        $this->assertTrue($route->hasScheme('htTp'));
94
        $this->assertTrue($route->hasScheme('httpS'));
95
    }
96
97
    public function testMethod()
98
    {
99
        $route = new Route('/{foo}', 'Pages::foo');
100
        $this->assertEquals([], $route->getMethods());
101
        $route->setMethods(['gEt']);
102
        $this->assertEquals(['GET'], $route->getMethods());
103
        $route->setMethods(['gEt', 'PosT']);
104
        $this->assertEquals(['GET', 'POST'], $route->getMethods());
105
        $this->assertTrue($route->hasMethod('Get'));
106
    }
107
108
    public function testCompile()
109
    {
110
        $route = new Route('/{foo}', 'Pages::foo');
111
        $route->setRequirement('foo', '\w+');
112
        $route->setHost('{locale}.domain.com');
113
        $this->assertFalse($route->isCompiled());
114
        $this->assertNull($route->getHostRegex());
115
        $this->assertNull($route->getPathRegex());
116
        $route->compile();
117
        $this->assertTrue($route->isCompiled());
118
        $this->assertEquals('#^(?P<locale>[^/\.]+).domain.com$#i',  $route->getHostRegex());
119
        $this->assertEquals('#^/(?P<foo>\w+)$#',  $route->getPathRegex());
120
121
        $this->assertEquals(['locale', 'foo'], $route->getVariables());
122
    }
123
}