RouterTest::testRunMatchesLast()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
cc 1
eloc 16
nc 1
nop 0
1
<?php
2
3
namespace OpCacheGUITest\Unit\Network;
4
5
use OpCacheGUI\Network\RequestData;
6
use OpCacheGUI\Network\Route;
7
use OpCacheGUI\Network\RouteBuilder;
8
use OpCacheGUI\Network\Router;
9
use PHPUnit\Framework\TestCase;
10
11
class RouterTest extends TestCase
12
{
13
    /**
14
     * @covers OpCacheGUI\Network\Router::__construct
15
     * @covers OpCacheGUI\Network\Router::post
16
     * @covers OpCacheGUI\Network\Router::run
17
     * @covers OpCacheGUI\Network\Router::getIdentifier
18
     */
19
    public function testPost()
20
    {
21
        $requestMock = $this->createMock(RequestData::class);
22
        $requestMock->method('getVerb')->willReturn('POST');
23
        $requestMock->method('path')->willReturn('somepath');
24
25
        $routeMock = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
26
        $routeMock->method('matchesRequest')->willReturn(true);
27
        $routeMock->method('run')->willReturn('foo');
28
29
        $factoryMock = $this->createMock(RouteBuilder::class);
30
        $factoryMock->method('build')->willReturn($routeMock);
31
32
        $router = new Router($requestMock, $factoryMock);
33
        $router->post('id', function () {});
34
35
        $this->assertSame('foo', $router->run());
36
    }
37
38
    /**
39
     * @covers OpCacheGUI\Network\Router::__construct
40
     * @covers OpCacheGUI\Network\Router::get
41
     * @covers OpCacheGUI\Network\Router::run
42
     * @covers OpCacheGUI\Network\Router::getIdentifier
43
     */
44
    public function testGet()
45
    {
46
        $requestMock = $this->createMock(RequestData::class);
47
        $requestMock->method('getVerb')->willReturn('GET');
48
        $requestMock->method('path')->willReturn('somepath');
49
50
        $routeMock = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
51
        $routeMock->method('matchesRequest')->willReturn(true);
52
        $routeMock->method('run')->willReturn('foo');
53
54
        $factoryMock = $this->createMock(RouteBuilder::class);
55
        $factoryMock->method('build')->willReturn($routeMock);
56
57
        $router = new Router($requestMock, $factoryMock);
58
        $router->get('id', function () {});
59
60
        $this->assertSame('foo', $router->run());
61
    }
62
63
    /**
64
     * @covers OpCacheGUI\Network\Router::__construct
65
     * @covers OpCacheGUI\Network\Router::run
66
     * @covers OpCacheGUI\Network\Router::getMainPage
67
     */
68
    public function testRunNoRoutes()
69
    {
70
        $requestMock = $this->createMock(RequestData::class);
71
        $requestMock->method('getVerb')->willReturn('GET');
72
        $requestMock->method('path')->willReturn('somepath');
73
74
        //$routeMock = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
75
        //$routeMock->method('matchesRequest')->will($this->onConsecutiveCalls(false, true));
76
        //$routeMock->method('run')->willReturn('main route');
77
78
        $factoryMock = $this->createMock(RouteBuilder::class);
79
        //$factoryMock->method('build')->willReturn($routeMock);
80
81
        $router = new Router($requestMock, $factoryMock);
82
        //$router->get('id', function () {});
83
84
        $this->assertNull($router->run());
85
    }
86
87
    /**
88
     * @covers OpCacheGUI\Network\Router::__construct
89
     * @covers OpCacheGUI\Network\Router::run
90
     * @covers OpCacheGUI\Network\Router::getMainPage
91
     */
92
    public function testRunNoMatchFirstMatchMain()
93
    {
94
        $requestMock = $this->createMock(RequestData::class);
95
        $requestMock->method('getVerb')->willReturn('GET');
96
        $requestMock->method('path')->willReturn('somepath');
97
98
        $routeMock = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
99
        $routeMock->method('matchesRequest')->will($this->onConsecutiveCalls(false, true));
100
        $routeMock->method('run')->willReturn('main route');
101
102
        $factoryMock = $this->createMock(RouteBuilder::class);
103
        $factoryMock->method('build')->willReturn($routeMock);
104
105
        $router = new Router($requestMock, $factoryMock);
106
        $router->get('id', function () {});
107
108
        $this->assertSame('main route', $router->run());
109
    }
110
111
    /**
112
     * @covers OpCacheGUI\Network\Router::__construct
113
     * @covers OpCacheGUI\Network\Router::run
114
     * @covers OpCacheGUI\Network\Router::getMainPage
115
     */
116
    public function testRunNoMatchSecondMatchMain()
117
    {
118
        $requestMock = $this->createMock(RequestData::class);
119
        $requestMock->method('getVerb')->willReturn('GET');
120
        $requestMock->method('path')->willReturn('somepath');
121
122
        $routeMock = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
123
        $routeMock->method('matchesRequest')->will($this->onConsecutiveCalls(false, false, false, true));
124
        $routeMock->method('run')->willReturn('main route');
125
126
        $factoryMock = $this->createMock(RouteBuilder::class);
127
        $factoryMock->method('build')->willReturn($routeMock);
128
129
        $router = new Router($requestMock, $factoryMock);
130
        $router->get('id', function () {});
131
        $router->post('id', function () {});
132
133
        $this->assertSame('main route', $router->run());
134
    }
135
136
    /**
137
     * @covers OpCacheGUI\Network\Router::__construct
138
     * @covers OpCacheGUI\Network\Router::post
139
     * @covers OpCacheGUI\Network\Router::run
140
     * @covers OpCacheGUI\Network\Router::getIdentifier
141
     */
142
    public function testRunMatchesFirst()
143
    {
144
        $requestMock = $this->createMock(RequestData::class);
145
        $requestMock->method('getVerb')->willReturn('POST');
146
        $requestMock->method('path')->willReturn('somepath');
147
148
        $routeMockMatch = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
149
        $routeMockMatch->method('matchesRequest')->willReturn(true);
150
        $routeMockMatch->method('run')->willReturn('match');
151
152
        $routeMockNoMatch = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
153
        $routeMockNoMatch->method('matchesRequest')->willReturn(false);
154
        $routeMockNoMatch->method('run')->willReturn('nomatch');
155
156
        $factoryMock = $this->createMock(RouteBuilder::class);
157
        $factoryMock->method('build')->will($this->onConsecutiveCalls($routeMockMatch, $routeMockNoMatch));
158
159
        $router = new Router($requestMock, $factoryMock);
160
        $router->post('id', function () {});
161
162
        $this->assertSame('match', $router->run());
163
    }
164
165
    /**
166
     * @covers OpCacheGUI\Network\Router::__construct
167
     * @covers OpCacheGUI\Network\Router::post
168
     * @covers OpCacheGUI\Network\Router::run
169
     * @covers OpCacheGUI\Network\Router::getIdentifier
170
     */
171
    public function testRunMatchesLast()
172
    {
173
        $requestMock = $this->createMock(RequestData::class);
174
        $requestMock->method('getVerb')->willReturn('POST');
175
        $requestMock->method('path')->willReturn('somepath');
176
177
        $routeMockMatch = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
178
        $routeMockMatch->method('matchesRequest')->willReturn(true);
179
        $routeMockMatch->method('run')->willReturn('match');
180
181
        $routeMockNoMatch = $this->getMockBuilder(Route::class)->disableOriginalConstructor()->getMock();
182
        $routeMockNoMatch->method('matchesRequest')->willReturn(false);
183
        $routeMockNoMatch->method('run')->willReturn('nomatch');
184
185
        $factoryMock = $this->createMock(RouteBuilder::class);
186
        $factoryMock->method('build')->will($this->onConsecutiveCalls($routeMockNoMatch, $routeMockMatch));
187
188
        $router = new Router($requestMock, $factoryMock);
189
        $router->post('id', function () {});
190
        $router->post('id', function () {});
191
192
        $this->assertSame('match', $router->run());
193
    }
194
195
    /**
196
     * @covers OpCacheGUI\Network\Router::__construct
197
     * @covers OpCacheGUI\Network\Router::getIdentifier
198
     */
199
    public function testIdentifierWithImplicitUrlRewrite()
200
    {
201
        $requestMock = $this->createMock(RequestData::class);
202
        $requestMock->method('path')->willReturn('somepath');
203
204
        $factoryMock = $this->createMock(RouteBuilder::class);
205
206
        $router = new Router($requestMock, $factoryMock);
207
208
        $this->assertSame('somepath', $router->getIdentifier());
209
    }
210
211
    /**
212
     * @covers OpCacheGUI\Network\Router::__construct
213
     * @covers OpCacheGUI\Network\Router::getIdentifier
214
     */
215
    public function testIdentifierWithExplicitUrlRewrite()
216
    {
217
        $requestMock = $this->createMock(RequestData::class);
218
        $requestMock->method('path')->willReturn('somepath');
219
220
        $factoryMock = $this->createMock(RouteBuilder::class);
221
222
        $router = new Router($requestMock, $factoryMock, Router::URL_REWRITE);
223
224
        $this->assertSame('somepath', $router->getIdentifier());
225
    }
226
227
    /**
228
     * @covers OpCacheGUI\Network\Router::__construct
229
     * @covers OpCacheGUI\Network\Router::getIdentifier
230
     */
231
    public function testIdentifierWithQueryString()
232
    {
233
        $requestMock = $this->createMock(RequestData::class);
234
        $requestMock->method('get')->willReturn('somepath');
235
236
        $factoryMock = $this->createMock(RouteBuilder::class);
237
238
        $router = new Router($requestMock, $factoryMock, Router::QUERY_STRING);
239
240
        $this->assertSame('somepath', $router->getIdentifier());
241
    }
242
}
243