aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/UrlGeneratorTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/UrlGeneratorTest.php')
-rw-r--r--tests/lib/UrlGeneratorTest.php149
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));
+ }
}