Add route tests

This commit is contained in:
Roeland Jago Douma 2016-07-14 20:45:19 +02:00
parent 1caceea6c0
commit 0bda09236e
No known key found for this signature in database
GPG Key ID: 1E152838F164D13B
2 changed files with 132 additions and 1 deletions

View File

@ -79,7 +79,7 @@ class RouteConfig {
$ocsRoutes = isset($routes['ocs']) ? $routes['ocs'] : []; $ocsRoutes = isset($routes['ocs']) ? $routes['ocs'] : [];
foreach ($ocsRoutes as $ocsRoute) { foreach ($ocsRoutes as $ocsRoute) {
$name = $ocsRoute['name']; $name = $ocsRoute['name'];
$postFix = ''; $postfix = '';
if (isset($ocsRoute['postfix'])) { if (isset($ocsRoute['postfix'])) {
$postfix = $ocsRoute['postfix']; $postfix = $ocsRoute['postfix'];

View File

@ -18,6 +18,15 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); $this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open');
} }
public function testSimpleOCSRoute() {
$routes = ['ocs' => [
['name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'GET']
]
];
$this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open');
}
public function testSimpleRouteWithMissingVerb() public function testSimpleRouteWithMissingVerb()
{ {
$routes = array('routes' => array( $routes = array('routes' => array(
@ -27,6 +36,15 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); $this->assertSimpleRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open');
} }
public function testSimpleOCSRouteWithMissingVerb() {
$routes = ['ocs' => [
['name' => 'folders#open', 'url' => '/folders/{folderId}/open']
]
];
$this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open');
}
public function testSimpleRouteWithLowercaseVerb() public function testSimpleRouteWithLowercaseVerb()
{ {
$routes = array('routes' => array( $routes = array('routes' => array(
@ -36,6 +54,15 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open'); $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open');
} }
public function testSimpleOCSRouteWithLowercaseVerb() {
$routes = ['ocs' => [
['name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete']
]
];
$this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open');
}
public function testSimpleRouteWithRequirements() public function testSimpleRouteWithRequirements()
{ {
$routes = array('routes' => array( $routes = array('routes' => array(
@ -45,6 +72,15 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array('something')); $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array('something'));
} }
public function testSimpleOCSRouteWithRequirements() {
$routes = ['ocs' => [
['name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'requirements' => ['something']]
]
];
$this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', ['something']);
}
public function testSimpleRouteWithDefaults() public function testSimpleRouteWithDefaults()
{ {
$routes = array('routes' => array( $routes = array('routes' => array(
@ -54,6 +90,16 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array('param' => 'foobar')); $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array('param' => 'foobar'));
} }
public function testSimpleOCSRouteWithDefaults() {
$routes = ['ocs' => [
['name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'defaults' => ['param' => 'foobar']]
]
];
$this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', [], ['param' => 'foobar']);
}
public function testSimpleRouteWithPostfix() public function testSimpleRouteWithPostfix()
{ {
$routes = array('routes' => array( $routes = array('routes' => array(
@ -63,6 +109,14 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array(), '_something'); $this->assertSimpleRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', array(), array(), '_something');
} }
public function testSimpleOCSRouteWithPostfix() {
$routes = ['ocs' => [
['name' => 'folders#open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete', 'postfix' => '_something']
]
];
$this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', [], [], '_something');
}
/** /**
* @expectedException \UnexpectedValueException * @expectedException \UnexpectedValueException
@ -86,6 +140,27 @@ class RoutingTest extends \Test\TestCase
$config->register(); $config->register();
} }
/**
* @expectedException \UnexpectedValueException
*/
public function testSimpleOCSRouteWithBrokenName() {
$routes = ['ocs' => [
['name' => 'folders_open', 'url' => '/folders/{folderId}/open', 'verb' => 'delete']
]];
// router mock
$router = $this->getMockBuilder('\OC\Route\Router')
->setMethods(['create'])
->setConstructorArgs([$this->getMockBuilder('\OCP\ILogger')->getMock()])
->getMock();
// load route configuration
$container = new DIContainer('app1');
$config = new RouteConfig($container, $router, $routes);
$config->register();
}
public function testSimpleRouteWithUnderScoreNames() public function testSimpleRouteWithUnderScoreNames()
{ {
$routes = array('routes' => array( $routes = array('routes' => array(
@ -95,6 +170,14 @@ class RoutingTest extends \Test\TestCase
$this->assertSimpleRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent'); $this->assertSimpleRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent');
} }
public function testSimpleOCSRouteWithUnderScoreNames() {
$routes = ['ocs' => [
['name' => 'admin_folders#open_current', 'url' => '/folders/{folderId}/open', 'verb' => 'delete']
]];
$this->assertSimpleOCSRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent');
}
public function testResource() public function testResource()
{ {
$routes = array('resources' => array('account' => array('url' => '/accounts'))); $routes = array('resources' => array('account' => array('url' => '/accounts')));
@ -145,6 +228,54 @@ class RoutingTest extends \Test\TestCase
$config->register(); $config->register();
} }
/**
* @param $routes
* @param string $name
* @param string $verb
* @param string $url
* @param string $controllerName
* @param string $actionName
* @param array $requirements
* @param array $defaults
* @param string $postfix
*/
private function assertSimpleOCSRoute($routes,
$name,
$verb,
$url,
$controllerName,
$actionName,
array $requirements=array(),
array $defaults=array(),
$postfix='')
{
if ($postfix) {
$name .= $postfix;
}
// route mocks
$container = new DIContainer('app1');
$route = $this->mockRoute($container, $verb, $controllerName, $actionName, $requirements, $defaults);
// router mock
$router = $this->getMockBuilder('\OC\Route\Router')
->setMethods(['create'])
->setConstructorArgs([$this->getMockBuilder('\OCP\ILogger')->getMock()])
->getMock();
// we expect create to be called once:
$router
->expects($this->once())
->method('create')
->with($this->equalTo('ocs.app1.' . $name), $this->equalTo($url))
->will($this->returnValue($route));
// load route configuration
$config = new RouteConfig($container, $router, $routes);
$config->register();
}
/** /**
* @param string $resourceName * @param string $resourceName
* @param string $url * @param string $url