diff options
Diffstat (limited to 'tests/lib/UrlGeneratorTest.php')
-rw-r--r-- | tests/lib/UrlGeneratorTest.php | 149 |
1 files changed, 111 insertions, 38 deletions
diff --git a/tests/lib/UrlGeneratorTest.php b/tests/lib/UrlGeneratorTest.php index dd2eb2ddc63..4320efc4190 100644 --- a/tests/lib/UrlGeneratorTest.php +++ b/tests/lib/UrlGeneratorTest.php @@ -1,18 +1,20 @@ <?php + /** - * Copyright (c) 2014 Bjoern Schiessle <schiessle@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace Test; use OC\Route\Router; +use OC\URLGenerator; use OCP\ICacheFactory; use OCP\IConfig; use OCP\IRequest; use OCP\IURLGenerator; +use OCP\IUserSession; /** * Class UrlGeneratorTest @@ -20,9 +22,10 @@ use OCP\IURLGenerator; * @package Test */ class UrlGeneratorTest extends \Test\TestCase { - /** @var \PHPUnit\Framework\MockObject\MockObject|IConfig */ private $config; + /** @var \PHPUnit\Framework\MockObject\MockObject|IUserSession */ + private $userSession; /** @var \PHPUnit\Framework\MockObject\MockObject|ICacheFactory */ private $cacheFactory; /** @var \PHPUnit\Framework\MockObject\MockObject|IRequest */ @@ -37,11 +40,13 @@ class UrlGeneratorTest extends \Test\TestCase { protected function setUp(): void { parent::setUp(); $this->config = $this->createMock(IConfig::class); + $this->userSession = $this->createMock(IUserSession::class); $this->cacheFactory = $this->createMock(ICacheFactory::class); $this->request = $this->createMock(IRequest::class); $this->router = $this->createMock(Router::class); - $this->urlGenerator = new \OC\URLGenerator( + $this->urlGenerator = new URLGenerator( $this->config, + $this->userSession, $this->cacheFactory, $this->request, $this->router @@ -66,9 +71,9 @@ class UrlGeneratorTest extends \Test\TestCase { /** * @small * test linkTo URL construction - * @dataProvider provideDocRootAppUrlParts */ - public function testLinkToDocRoot($app, $file, $args, $expectedResult) { + #[\PHPUnit\Framework\Attributes\DataProvider('provideDocRootAppUrlParts')] + public function testLinkToDocRoot($app, $file, $args, $expectedResult): void { \OC::$WEBROOT = ''; $result = $this->urlGenerator->linkTo($app, $file, $args); $this->assertEquals($expectedResult, $result); @@ -77,18 +82,16 @@ class UrlGeneratorTest extends \Test\TestCase { /** * @small * test linkTo URL construction in sub directory - * @dataProvider provideSubDirAppUrlParts */ - public function testLinkToSubDir($app, $file, $args, $expectedResult) { + #[\PHPUnit\Framework\Attributes\DataProvider('provideSubDirAppUrlParts')] + public function testLinkToSubDir($app, $file, $args, $expectedResult): void { \OC::$WEBROOT = '/nextcloud'; $result = $this->urlGenerator->linkTo($app, $file, $args); $this->assertEquals($expectedResult, $result); } - /** - * @dataProvider provideRoutes - */ - public function testLinkToRouteAbsolute($route, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('provideRoutes')] + public function testLinkToRouteAbsolute($route, $expected): void { $this->mockBaseUrl(); \OC::$WEBROOT = '/nextcloud'; $this->router->expects($this->once()) @@ -104,25 +107,25 @@ class UrlGeneratorTest extends \Test\TestCase { $this->assertEquals($expected, $result); } - public function provideRoutes() { + public static function provideRoutes(): array { return [ ['core.Preview.getPreview', 'http://localhost/nextcloud/index.php/core/preview.png'], ['cloud_federation_api.requesthandlercontroller.addShare', 'http://localhost/nextcloud/index.php/ocm/shares'], ]; } - public function provideDocRootAppUrlParts() { + public static function provideDocRootAppUrlParts(): array { return [ - ['files', 'ajax/list.php', [], '/index.php/apps/files/ajax/list.php'], - ['files', 'ajax/list.php', ['trut' => 'trat', 'dut' => 'dat'], '/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'], + ['files_external', 'ajax/oauth2.php', [], '/index.php/apps/files_external/ajax/oauth2.php'], + ['files_external', 'ajax/oauth2.php', ['trut' => 'trat', 'dut' => 'dat'], '/index.php/apps/files_external/ajax/oauth2.php?trut=trat&dut=dat'], ['', 'index.php', ['trut' => 'trat', 'dut' => 'dat'], '/index.php?trut=trat&dut=dat'], ]; } - public function provideSubDirAppUrlParts() { + public static function provideSubDirAppUrlParts(): array { return [ - ['files', 'ajax/list.php', [], '/nextcloud/index.php/apps/files/ajax/list.php'], - ['files', 'ajax/list.php', ['trut' => 'trat', 'dut' => 'dat'], '/nextcloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'], + ['files_external', 'ajax/oauth2.php', [], '/nextcloud/index.php/apps/files_external/ajax/oauth2.php'], + ['files_external', 'ajax/oauth2.php', ['trut' => 'trat', 'dut' => 'dat'], '/nextcloud/index.php/apps/files_external/ajax/oauth2.php?trut=trat&dut=dat'], ['', 'index.php', ['trut' => 'trat', 'dut' => 'dat'], '/nextcloud/index.php?trut=trat&dut=dat'], ]; } @@ -130,9 +133,9 @@ class UrlGeneratorTest extends \Test\TestCase { /** * @small * test absolute URL construction - * @dataProvider provideDocRootURLs */ - public function testGetAbsoluteURLDocRoot($url, $expectedResult) { + #[\PHPUnit\Framework\Attributes\DataProvider('provideDocRootURLs')] + public function testGetAbsoluteURLDocRoot($url, $expectedResult): void { $this->mockBaseUrl(); \OC::$WEBROOT = ''; $result = $this->urlGenerator->getAbsoluteURL($url); @@ -142,16 +145,16 @@ class UrlGeneratorTest extends \Test\TestCase { /** * @small * test absolute URL construction - * @dataProvider provideSubDirURLs */ - public function testGetAbsoluteURLSubDir($url, $expectedResult) { + #[\PHPUnit\Framework\Attributes\DataProvider('provideSubDirURLs')] + public function testGetAbsoluteURLSubDir($url, $expectedResult): void { $this->mockBaseUrl(); \OC::$WEBROOT = '/nextcloud'; $result = $this->urlGenerator->getAbsoluteURL($url); $this->assertEquals($expectedResult, $result); } - public function provideDocRootURLs() { + public static function provideDocRootURLs(): array { return [ ['index.php', 'http://localhost/index.php'], ['/index.php', 'http://localhost/index.php'], @@ -160,7 +163,7 @@ class UrlGeneratorTest extends \Test\TestCase { ]; } - public function provideSubDirURLs() { + public static function provideSubDirURLs(): array { return [ ['', 'http://localhost/nextcloud/'], ['/', 'http://localhost/nextcloud/'], @@ -171,7 +174,7 @@ class UrlGeneratorTest extends \Test\TestCase { ]; } - public function testGetBaseUrl() { + public function testGetBaseUrl(): void { $this->mockBaseUrl(); \OC::$WEBROOT = '/nextcloud'; $actual = $this->urlGenerator->getBaseUrl(); @@ -179,29 +182,99 @@ class UrlGeneratorTest extends \Test\TestCase { $this->assertEquals($expected, $actual); } - /** - * @dataProvider provideOCSRoutes - */ - public function testLinkToOCSRouteAbsolute(string $route, string $expected) { + public function testGetWebroot(): void { + \OC::$WEBROOT = '/nextcloud'; + $actual = $this->urlGenerator->getWebroot(); + $this->assertEquals(\OC::$WEBROOT, $actual); + } + + #[\PHPUnit\Framework\Attributes\DataProvider('provideOCSRoutes')] + public function testLinkToOCSRouteAbsolute(string $route, bool $ignoreFrontController, string $expected): void { $this->mockBaseUrl(); \OC::$WEBROOT = '/nextcloud'; $this->router->expects($this->once()) ->method('generate') - ->willReturnCallback(function ($routeName, $parameters) { + ->willReturnCallback(function (string $routeName, array $parameters) use ($ignoreFrontController) { if ($routeName === 'ocs.core.OCS.getCapabilities') { - return '/index.php/ocsapp/cloud/capabilities'; + if (!$ignoreFrontController) { + return '/nextcloud/index.php/ocsapp/cloud/capabilities'; + } + return '/nextcloud/ocsapp/cloud/capabilities'; } elseif ($routeName === 'ocs.core.WhatsNew.dismiss') { - return '/index.php/ocsapp/core/whatsnew'; + if (!$ignoreFrontController) { + return '/nextcloud/index.php/ocsapp/core/whatsnew'; + } + return '/nextcloud/ocsapp/core/whatsnew'; } }); $result = $this->urlGenerator->linkToOCSRouteAbsolute($route); $this->assertEquals($expected, $result); } - public function provideOCSRoutes() { + public static function provideOCSRoutes(): array { return [ - ['core.OCS.getCapabilities', 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'], - ['core.WhatsNew.dismiss', 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'], + ['core.OCS.getCapabilities', false, 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'], + ['core.OCS.getCapabilities', true, 'http://localhost/nextcloud/ocs/v2.php/cloud/capabilities'], + ['core.WhatsNew.dismiss', false, 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'], + ['core.WhatsNew.dismiss', true, 'http://localhost/nextcloud/ocs/v2.php/core/whatsnew'], ]; } + + private function mockLinkToDefaultPageUrl(bool $ignoreFrontControllerConfig = false) { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('core', 'defaultpage') + ->willReturn(''); + + $this->config->expects($this->once()) + ->method('getSystemValueBool') + ->with('htaccess.IgnoreFrontController', $this->anything()) + ->willReturn($ignoreFrontControllerConfig); + } + + public function testLinkToDefaultPageUrlWithRedirectUrlWithoutFrontController(): void { + $this->mockBaseUrl(); + + $_REQUEST['redirect_url'] = 'myRedirectUrl.com'; + $this->assertSame('http://localhost' . \OC::$WEBROOT . '/myRedirectUrl.com', $this->urlGenerator->linkToDefaultPageUrl()); + } + + public function testLinkToDefaultPageUrlWithRedirectUrlRedirectBypassWithoutFrontController(): void { + $this->mockBaseUrl(); + $this->mockLinkToDefaultPageUrl(); + putenv('front_controller_active=false'); + + $_REQUEST['redirect_url'] = 'myRedirectUrl.com@foo.com:a'; + $this->assertSame('http://localhost' . \OC::$WEBROOT . '/index.php/apps/dashboard/', $this->urlGenerator->linkToDefaultPageUrl()); + } + + public function testLinkToDefaultPageUrlWithRedirectUrlRedirectBypassWithFrontController(): void { + $this->mockBaseUrl(); + $this->mockLinkToDefaultPageUrl(); + putenv('front_controller_active=true'); + + $_REQUEST['redirect_url'] = 'myRedirectUrl.com@foo.com:a'; + $this->assertSame('http://localhost' . \OC::$WEBROOT . '/apps/dashboard/', $this->urlGenerator->linkToDefaultPageUrl()); + } + + public function testLinkToDefaultPageUrlWithRedirectUrlWithIgnoreFrontController(): void { + $this->mockBaseUrl(); + $this->mockLinkToDefaultPageUrl(true); + putenv('front_controller_active=false'); + + $_REQUEST['redirect_url'] = 'myRedirectUrl.com@foo.com:a'; + $this->assertSame('http://localhost' . \OC::$WEBROOT . '/apps/dashboard/', $this->urlGenerator->linkToDefaultPageUrl()); + } + + public static function imagePathProvider(): array { + return [ + ['core', 'favicon-mask.svg', \OC::$WEBROOT . '/core/img/favicon-mask.svg'], + ['files', 'folder.svg', \OC::$WEBROOT . '/apps/files/img/folder.svg'], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('imagePathProvider')] + public function testImagePath(string $appName, string $file, string $result): void { + $this->assertSame($result, $this->urlGenerator->imagePath($appName, $file)); + } } |