From: Roeland Jago Douma Date: Thu, 14 Jul 2016 18:45:19 +0000 (+0200) Subject: Add route tests X-Git-Tag: v10.0RC1~116^2~1 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=0bda09236e52f028b3d1a2f92a3b60541ebc22cd;p=nextcloud-server.git Add route tests --- diff --git a/lib/private/AppFramework/Routing/RouteConfig.php b/lib/private/AppFramework/Routing/RouteConfig.php index d4b4ec038ad..eca0051691f 100644 --- a/lib/private/AppFramework/Routing/RouteConfig.php +++ b/lib/private/AppFramework/Routing/RouteConfig.php @@ -79,7 +79,7 @@ class RouteConfig { $ocsRoutes = isset($routes['ocs']) ? $routes['ocs'] : []; foreach ($ocsRoutes as $ocsRoute) { $name = $ocsRoute['name']; - $postFix = ''; + $postfix = ''; if (isset($ocsRoute['postfix'])) { $postfix = $ocsRoute['postfix']; diff --git a/tests/lib/AppFramework/Routing/RoutingTest.php b/tests/lib/AppFramework/Routing/RoutingTest.php index 52a5eb33ba9..6c8b0f40133 100644 --- a/tests/lib/AppFramework/Routing/RoutingTest.php +++ b/tests/lib/AppFramework/Routing/RoutingTest.php @@ -18,6 +18,15 @@ class RoutingTest extends \Test\TestCase $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() { $routes = array('routes' => array( @@ -27,6 +36,15 @@ class RoutingTest extends \Test\TestCase $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() { $routes = array('routes' => array( @@ -36,6 +54,15 @@ class RoutingTest extends \Test\TestCase $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() { $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')); } + 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() { $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')); } + + 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() { $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'); } + 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 @@ -86,6 +140,27 @@ class RoutingTest extends \Test\TestCase $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() { $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'); } + 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() { $routes = array('resources' => array('account' => array('url' => '/accounts'))); @@ -145,6 +228,54 @@ class RoutingTest extends \Test\TestCase $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 $url