192 lines
4.8 KiB
PHP
192 lines
4.8 KiB
PHP
<?php
|
|
|
|
use AnimeClient\Router;
|
|
use AnimeClient\Config;
|
|
use Aura\Web\WebFactory;
|
|
use Aura\Router\RouterFactory;
|
|
|
|
class RouterTest extends AnimeClient_TestCase {
|
|
|
|
protected $aura_router;
|
|
protected $request;
|
|
protected $response;
|
|
protected $router;
|
|
|
|
public function testRouterSanity()
|
|
{
|
|
parent::setUp();
|
|
|
|
$router_factory = new RouterFactory();
|
|
$this->aura_router = $router_factory->newInstance();
|
|
|
|
// Create Request/Response Objects
|
|
$web_factory = new WebFactory([
|
|
'_GET' => [],
|
|
'_POST' => [],
|
|
'_COOKIE' => [],
|
|
'_SERVER' => $_SERVER,
|
|
'_FILES' => []
|
|
]);
|
|
$this->request = $web_factory->newRequest();
|
|
$this->response = $web_factory->newResponse();
|
|
$this->router = new Router($this->config, $this->aura_router, $this->request, $this->response);
|
|
|
|
$this->assertTrue(is_object($this->router));
|
|
}
|
|
|
|
public function RouteTestProvider()
|
|
{
|
|
return [
|
|
'manga_path_routing' => array(
|
|
'config' => array(
|
|
'config' => [
|
|
'anime_host' => '',
|
|
'manga_host' => '',
|
|
'anime_path' => 'anime',
|
|
'manga_path' => 'manga',
|
|
'route_by' => 'path',
|
|
],
|
|
'base_config' => []
|
|
),
|
|
'type' => 'manga',
|
|
'host' => "localhost",
|
|
'uri' => "/manga/plan_to_read",
|
|
'check_var' => 'manga_path'
|
|
),
|
|
'manga_host_routing' => array(
|
|
'config' => array(
|
|
'config' => [
|
|
'anime_host' => 'anime.host.me',
|
|
'manga_host' => 'manga.host.me',
|
|
'anime_path' => '',
|
|
'manga_path' => '',
|
|
'route_by' => 'host',
|
|
],
|
|
'base_config' => []
|
|
),
|
|
'type' => 'manga',
|
|
'host' => 'manga.host.me',
|
|
'uri' => '/plan_to_read',
|
|
'check_var' => 'manga_host'
|
|
),
|
|
'anime_path_routing' => array(
|
|
'config' => array(
|
|
'config' => [
|
|
'anime_host' => '',
|
|
'manga_host' => '',
|
|
'anime_path' => 'anime',
|
|
'manga_path' => 'manga',
|
|
'route_by' => 'path',
|
|
],
|
|
'base_config' => [
|
|
'routes' => []
|
|
]
|
|
),
|
|
'type' => 'anime',
|
|
'host' => "localhost",
|
|
'uri' => "/anime/watching",
|
|
'check_var' => 'anime_path'
|
|
),
|
|
'anime_host_routing' => array(
|
|
'config' => array(
|
|
'config' => [
|
|
'anime_host' => 'anime.host.me',
|
|
'manga_host' => 'manga.host.me',
|
|
'anime_path' => '',
|
|
'manga_path' => '',
|
|
'route_by' => 'host',
|
|
],
|
|
'base_config' => []
|
|
),
|
|
'type' => 'anime',
|
|
'host' => 'anime.host.me',
|
|
'uri' => '/watching',
|
|
'check_var' => 'anime_host'
|
|
)
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider RouteTestProvider
|
|
*/
|
|
public function testRoute($config, $type, $host, $uri, $check_var)
|
|
{
|
|
$config['base_config']['routes'] = [
|
|
'common' => [
|
|
'login_form' => [
|
|
'path' => '/login',
|
|
'action' => ['login'],
|
|
'verb' => 'get'
|
|
],
|
|
],
|
|
'anime' => [
|
|
'watching' => [
|
|
'path' => '/watching{/view}',
|
|
'action' => ['anime_list'],
|
|
'params' => [
|
|
'type' => 'currently-watching',
|
|
'title' => WHOSE . " Anime List · Watching"
|
|
],
|
|
'tokens' => [
|
|
'view' => '[a-z_]+'
|
|
]
|
|
],
|
|
],
|
|
'manga' => [
|
|
'plan_to_read' => [
|
|
'path' => '/plan_to_read{/view}',
|
|
'action' => ['manga_list'],
|
|
'params' => [
|
|
'type' => 'Plan to Read',
|
|
'title' => WHOSE . " Manga List · Plan to Read"
|
|
],
|
|
'tokens' => [
|
|
'view' => '[a-z_]+'
|
|
]
|
|
],
|
|
]
|
|
];
|
|
|
|
$this->config = new Config($config);
|
|
|
|
// Set up the environment
|
|
$_SERVER = array_merge($_SERVER, [
|
|
'REQUEST_METHOD' => 'GET',
|
|
'REQUEST_URI' => $uri,
|
|
'HTTP_HOST' => $host,
|
|
'SERVER_NAME' => $host
|
|
]);
|
|
|
|
$router_factory = new RouterFactory();
|
|
$this->aura_router = $router_factory->newInstance();
|
|
|
|
// Create Request/Response Objects
|
|
$web_factory = new WebFactory([
|
|
'_GET' => [],
|
|
'_POST' => [],
|
|
'_COOKIE' => [],
|
|
'_SERVER' => $_SERVER,
|
|
'_FILES' => []
|
|
]);
|
|
$this->request = $web_factory->newRequest();
|
|
$this->response = $web_factory->newResponse();
|
|
$this->router = new Router($this->config, $this->aura_router, $this->request, $this->response);
|
|
|
|
// Check route setup
|
|
$this->assertEquals($config['base_config']['routes'], $this->config->routes);
|
|
$this->assertTrue(is_array($this->router->get_output_routes()));
|
|
|
|
// Check environment variables
|
|
$this->assertEquals($uri, $this->request->server->get('REQUEST_URI'));
|
|
$this->assertEquals($host, $this->request->server->get('HTTP_HOST'));
|
|
|
|
// Make sure the route is an anime type
|
|
$this->assertTrue($this->aura_router->count() > 0, "More than 0 routes");
|
|
$this->assertTrue($this->config->$check_var !== '', "Check variable is not empty");
|
|
$this->assertEquals($type, $this->router->get_route_type(), "Correct 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 valid, and matched");
|
|
}
|
|
} |