* Add fallback to load all routes if needed * Move partial loaded routes test to proper place Signed-off-by: Morris Jobke <hey@morrisjobke.de>tags/v20.0.0beta1
@@ -346,13 +346,27 @@ class Router implements IRouter { | |||
public function generate($name, | |||
$parameters = [], | |||
$absolute = false) { | |||
$referenceType = UrlGenerator::ABSOLUTE_URL; | |||
if ($absolute === false) { | |||
$referenceType = UrlGenerator::ABSOLUTE_PATH; | |||
} | |||
$name = $this->fixLegacyRootName($name); | |||
if (strpos($name, '.') !== false) { | |||
list($appName, $other) = explode('.', $name, 3); | |||
// OCS routes are prefixed with "ocs." | |||
if ($appName === 'ocs') { | |||
$appName = $other; | |||
} | |||
$this->loadRoutes($appName); | |||
try { | |||
return $this->getGenerator()->generate($name, $parameters, $referenceType); | |||
} catch (RouteNotFoundException $e) { | |||
} | |||
} | |||
// Fallback load all routes | |||
$this->loadRoutes(); | |||
try { | |||
$referenceType = UrlGenerator::ABSOLUTE_URL; | |||
if ($absolute === false) { | |||
$referenceType = UrlGenerator::ABSOLUTE_PATH; | |||
} | |||
$name = $this->fixLegacyRootName($name); | |||
return $this->getGenerator()->generate($name, $parameters, $referenceType); | |||
} catch (RouteNotFoundException $e) { | |||
$this->logger->logException($e, ['level' => ILogger::INFO]); |
@@ -0,0 +1,52 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019 Morris Jobke <hey@morrisjobke.de> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace Test\Route; | |||
use OC\Route\Router; | |||
use OCP\ILogger; | |||
use Test\TestCase; | |||
/** | |||
* Class RouterTest | |||
* | |||
* @package Test\Route | |||
*/ | |||
class RouterTest extends TestCase { | |||
public function testGenerateConsecutively(): void { | |||
/** @var ILogger $logger */ | |||
$logger = $this->createMock(ILogger::class); | |||
$router = new Router($logger); | |||
$this->assertEquals('/index.php/apps/files/', $router->generate('files.view.index')); | |||
// the OCS route is the prefixed one for the AppFramework - see /ocs/v1.php for routing details | |||
$this->assertEquals('/index.php/ocsapp/apps/dav/api/v1/direct', $router->generate('ocs.dav.direct.getUrl')); | |||
// special route name - should load all apps and then find the route | |||
$this->assertEquals('/index.php/apps/files/ajax/list.php', $router->generate('files_ajax_list')); | |||
// test caching | |||
$this->assertEquals('/index.php/apps/files/', $router->generate('files.view.index')); | |||
} | |||
} |
@@ -15,6 +15,8 @@ use OCP\IURLGenerator; | |||
/** | |||
* Class UrlGeneratorTest | |||
* | |||
* @package Test | |||
*/ | |||
class UrlGeneratorTest extends \Test\TestCase { | |||
@@ -90,8 +92,8 @@ class UrlGeneratorTest extends \Test\TestCase { | |||
public function provideRoutes() { | |||
return [ | |||
['files_ajax_list', 'http://localhost/nextcloud/index.php/apps/files/ajax/list.php'], | |||
['core.Preview.getPreview', 'http://localhost/nextcloud/index.php/core/preview.png'], | |||
['cloud_federation_api.requesthandlercontroller.addShare', 'http://localhost/nextcloud/index.php/ocm/shares'], | |||
]; | |||
} | |||