Test Failed
Push — master ( 1b7368...050678 )
by Fran
25:16 queued 22:49
created

RouterTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 54
dl 0
loc 75
rs 10
c 0
b 0
f 0
wmc 7
1
<?php
2
namespace PSFS\tests\base;
3
4
use PHPUnit\Framework\TestCase;
5
use PSFS\base\config\Config;
6
use PSFS\base\exception\RouterException;
7
use PSFS\base\Router;
8
use PSFS\base\Security;
9
use PSFS\base\types\helpers\SecurityHelper;
10
use PSFS\controller\base\Admin;
11
use PSFS\controller\ConfigController;
12
use PSFS\Dispatcher;
13
14
/**
15
 * Class RouterTest
16
 * @package PSFS\tests
17
 */
18
class RouterTest extends TestCase {
19
20
    public function testRouterBasics() {
21
        $router = Router::getInstance();
22
        $config = Config::getInstance()->dumpConfig();
23
        $config['debug'] = true;
24
        Config::save($config, []);
25
        $this->assertNotNull($router);
26
        $this->assertInstanceOf(Router::class, $router);
27
        $this->assertTrue(Router::exists(Router::class), "Can't check the namespace");
28
29
        $slugs = $router->getSlugs();
30
        $this->assertNotEmpty($slugs);
31
32
        $routes = $router->getAllRoutes();
33
        $this->assertNotEmpty($routes);
34
    }
35
36
    public function testNotFound() {
37
        $this->expectExceptionCode(404);
38
        $this->expectException(\PSFS\base\exception\RouterException::class);
39
        Router::dropInstance();
40
        $router = Router::getInstance();
41
        $router->execute(uniqid(time(), true));
42
    }
43
44
    public function testCanAccess() {
45
        $this->expectExceptionCode(401);
46
        $this->expectException(\PSFS\base\exception\UserAuthException::class);
47
        // Creates a default user
48
        Security::getInstance()->saveUser([
49
            'username' => uniqid('test', true),
50
            'password' => uniqid('test', true),
51
            'profile' => Security::ADMIN_ID_TOKEN,
52
        ]);
53
        $router = Router::getInstance();
54
        Admin::setTest(true);
55
        $router->execute('/admin/config');
56
    }
57
58
    public function testPreconditions() {
59
        $this->expectExceptionCode(404);
60
        $this->expectException(\PSFS\base\exception\RouterException::class);
61
        Router::dropInstance();
62
        $router = Router::getInstance();
63
        SecurityHelper::setTest(true);
64
        Security::setTest(true);
65
        $config = Config::getInstance()->dumpConfig();
66
        $config['allow.double.slashes'] = false;
67
        Config::save($config);
68
        $router->execute('/admin//config');
69
    }
70
71
    public function testPreconditionsNonStrict() {
72
        $this->expectException(\PSFS\base\exception\UserAuthException::class);
73
        Router::dropInstance();
74
        $router = Router::getInstance();
75
        SecurityHelper::setTest(true);
76
        Security::setTest(false);
77
        ConfigController::setTest(true);
78
        $config = Config::getInstance()->dumpConfig();
79
        $config['allow.double.slashes'] = true;
80
        Config::save($config);
81
        $router->execute('/admin//config');
82
    }
83
84
    public function testGetRoute() {
85
        $router = Router::getInstance();
86
        $this->assertNotNull($router->getRoute(), "Can't gather the homepage route");
87
        $this->assertNotNull($router->getRoute('admin'), "Can't gather the admin route");
88
        $this->assertNotEquals($router->getRoute('admin'), $router->getRoute('admin', true), 'Absolute route is equal than normal');
89
        try {
90
            $router->getRoute(uniqid('test', true));
91
        } catch(\Exception $e) {
92
            $this->assertInstanceOf(RouterException::class, $e, 'Exception is not the expected: ' . get_class($e));
93
        }
94
    }
95
96
}
97