'GET', 'REQUEST_URI' => $uri, 'PATH_INFO' => $uri, 'HTTP_HOST' => $host, 'SERVER_NAME' => $host ]); $router_factory = new RouterFactory(); $web_factory = new WebFactory([ '_GET' => [], '_POST' => [], '_COOKIE' => [], '_SERVER' => $_SERVER, '_FILES' => [] ]); // Add the appropriate objects to the container $this->container = new Container([ 'config' => new Config($config), 'request' => $web_factory->newRequest(), 'response' => $web_factory->newResponse(), 'aura-router' => $router_factory->newInstance(), 'error-handler' => new MockErrorHandler() ]); $this->router = new Router($this->container); $this->config = $this->container->get('config'); } public function testRouterSanity() { $this->_set_up([], '/', 'localhost'); $this->assertTrue(is_object($this->router)); } public function dataRoute() { $default_config = array( 'routing' => [ 'anime_path' => 'anime', 'manga_path' => 'manga', 'default_list' => 'anime' ] ); $data = [ 'manga_path_routing' => array( 'config' => $default_config, 'type' => 'manga', 'host' => "localhost", 'uri' => "/manga/plan_to_read", ), 'anime_path_routing' => array( 'config' => $default_config, 'type' => 'anime', 'host' => "localhost", 'uri' => "/anime/watching", ) ]; $data['anime_path_routing']['config']['routing']['default_list'] = 'manga'; return $data; } /** * @dataProvider dataRoute */ public function testRoute($config, $type, $host, $uri) { $check_var = "{$type}_path"; $config['base_config']['routes'] = [ 'common' => [ 'login_form' => [ 'path' => '/login', 'action' => ['login'], 'verb' => 'get' ], ], 'anime' => [ 'watching' => [ 'path' => '/anime/watching{/view}', 'action' => ['anime_list'], 'params' => [ 'type' => 'currently-watching', 'title' => WHOSE . " Anime List · Watching" ], 'tokens' => [ 'view' => '[a-z_]+' ] ], ], 'manga' => [ 'plan_to_read' => [ 'path' => '/manga/plan_to_read{/view}', 'action' => ['manga_list'], 'params' => [ 'type' => 'Plan to Read', 'title' => WHOSE . " Manga List · Plan to Read" ], 'tokens' => [ 'view' => '[a-z_]+' ] ], ] ]; $this->_set_up($config, $uri, $host); $request = $this->container->get('request'); $aura_router = $this->container->get('aura-router'); // Check route setup $this->assertEquals($config['base_config']['routes'], $this->config->routes, "Incorrect route path"); $this->assertTrue(is_array($this->router->get_output_routes())); // Check environment variables $this->assertEquals($uri, $request->server->get('REQUEST_URI')); $this->assertEquals($host, $request->server->get('HTTP_HOST')); // Make sure the route is an anime type $this->assertTrue($aura_router->count() > 0, "0 routes"); $this->assertTrue($this->config->$check_var !== '', "Check variable is empty"); $this->assertEquals($type, $this->router->get_controller(), "Incorrect Route type"); // Make sure the route matches, by checking that it is actually an object $route = $this->router->get_route(); $this->assertInstanceOf('Aura\\Router\\Route', $route, "Route is invalid, not matched"); } public function testDefaultRoute() { $config = [ 'routing' => [ 'anime_path' => 'anime', 'manga_path' => 'manga', 'default_list' => 'manga' ], 'routes' => [ 'common' => [ 'login_form' => [ 'path' => '/login', 'action' => ['login'], 'verb' => 'get' ], ], 'anime' => [ 'index' => [ 'path' => '/', 'action' => ['redirect'], 'params' => [ 'url' => '', // Determined by config 'code' => '301' ] ], ], 'manga' => [ 'index' => [ 'path' => '/', 'action' => ['redirect'], 'params' => [ 'url' => '', // Determined by config 'code' => '301', 'type' => 'manga' ] ], ] ] ]; $this->_set_up($config, "/", "localhost"); //$this->assertEquals($this->config->full_url('', 'manga'), $this->response->headers->get('location')); $this->assertEquals('//localhost/manga/', $this->config->full_url('', 'manga'), "Incorrect default url"); } }