]> git.mxchange.org Git - friendica.git/blob - tests/src/App/RouterTest.php
2ed8574c43dd23a0a342cc1ef3b37b4627702146
[friendica.git] / tests / src / App / RouterTest.php
1 <?php
2
3 namespace Friendica\Test\src\App;
4
5 use Friendica\App\Router;
6 use Friendica\Module;
7 use PHPUnit\Framework\TestCase;
8
9 class RouterTest extends TestCase
10 {
11         public function testGetModuleClass()
12         {
13                 $router = new Router(['GET']);
14
15                 $routeCollector = $router->getRouteCollector();
16                 $routeCollector->addRoute(['GET'], '/', 'IndexModuleClassName');
17                 $routeCollector->addRoute(['GET'], '/test', 'TestModuleClassName');
18                 $routeCollector->addRoute(['GET'], '/test/sub', 'TestSubModuleClassName');
19                 $routeCollector->addRoute(['GET'], '/optional[/option]', 'OptionalModuleClassName');
20                 $routeCollector->addRoute(['GET'], '/variable/{var}', 'VariableModuleClassName');
21                 $routeCollector->addRoute(['GET'], '/optionalvariable[/{option}]', 'OptionalVariableModuleClassName');
22                 $routeCollector->addRoute(['POST', 'PUT', 'PATCH', 'DELETE', 'HEAD'], '/unsupported', 'UnsupportedMethodModuleClassName');
23
24                 $this->assertEquals('IndexModuleClassName', $router->getModuleClass('/'));
25
26                 $this->assertEquals('TestModuleClassName', $router->getModuleClass('/test'));
27                 $this->assertNull($router->getModuleClass('/tes'));
28
29                 $this->assertEquals('TestSubModuleClassName', $router->getModuleClass('/test/sub'));
30
31                 $this->assertEquals('OptionalModuleClassName', $router->getModuleClass('/optional'));
32                 $this->assertEquals('OptionalModuleClassName', $router->getModuleClass('/optional/option'));
33                 $this->assertNull($router->getModuleClass('/optional/opt'));
34
35                 $this->assertEquals('VariableModuleClassName', $router->getModuleClass('/variable/123abc'));
36                 $this->assertNull($router->getModuleClass('/variable'));
37
38                 $this->assertEquals('OptionalVariableModuleClassName', $router->getModuleClass('/optionalvariable'));
39                 $this->assertEquals('OptionalVariableModuleClassName', $router->getModuleClass('/optionalvariable/123abc'));
40
41                 $this->assertNull($router->getModuleClass('/unsupported'));
42         }
43
44         public function dataRoutes()
45         {
46                 return [
47                         'default' => [
48                                 'routes' => [
49                                         '/'       => [Module\Home::class, [Router::GET]],
50                                         '/group'  => [
51                                                 '/route' => [Module\Friendica::class, [Router::GET]],
52                                         ],
53
54
55                                         '/group2' => [
56                                                 '/group3' => [
57                                                         '/route' => [Module\Xrd::class, [Router::GET]],
58                                                 ],
59                                         ],
60                                         '/post' => [
61                                                 '/it' => [Module\NodeInfo::class, [Router::POST]],
62                                         ],
63                                         '/double' => [Module\Profile::class, [Router::GET, Router::POST]]
64                                 ],
65                         ],
66                 ];
67         }
68
69         /**
70          * @dataProvider dataRoutes
71          */
72         public function testGetRoutes(array $routes)
73         {
74                 $router = (new Router([
75                         'REQUEST_METHOD' => Router::GET
76                 ]))->addRoutes($routes);
77
78                 $this->assertEquals(Module\Home::class, $router->getModuleClass('/'));
79                 $this->assertEquals(Module\Friendica::class, $router->getModuleClass('/group/route'));
80                 $this->assertEquals(Module\Xrd::class, $router->getModuleClass('/group2/group3/route'));
81                 $this->assertNull($router->getModuleClass('/post/it'));
82                 $this->assertEquals(Module\Profile::class, $router->getModuleClass('/double'));
83         }
84
85         /**
86          * @dataProvider dataRoutes
87          */
88         public function testPostRouter(array $routes)
89         {
90                 $router = (new Router([
91                         'REQUEST_METHOD' => Router::POST
92                 ]))->addRoutes($routes);
93
94                 // Don't find GET
95                 $this->assertNull($router->getModuleClass('/'));
96                 $this->assertNull($router->getModuleClass('/group/route'));
97                 $this->assertNull($router->getModuleClass('/group2/group3/route'));
98                 $this->assertEquals(Module\NodeInfo::class, $router->getModuleClass('/post/it'));
99                 $this->assertEquals(Module\Profile::class, $router->getModuleClass('/double'));
100         }
101 }