aboutsummaryrefslogtreecommitdiffstats
path: root/tests/Core/Controller/NavigationControllerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Core/Controller/NavigationControllerTest.php')
-rw-r--r--tests/Core/Controller/NavigationControllerTest.php113
1 files changed, 47 insertions, 66 deletions
diff --git a/tests/Core/Controller/NavigationControllerTest.php b/tests/Core/Controller/NavigationControllerTest.php
index e98d0e8ed40..d00976f18ec 100644
--- a/tests/Core/Controller/NavigationControllerTest.php
+++ b/tests/Core/Controller/NavigationControllerTest.php
@@ -1,30 +1,13 @@
<?php
+
/**
- * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
- *
- * @author Julius Härtl <jus@bitgrid.net>
- *
- * @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/>.
- *
+ * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace Tests\Core\Controller;
use OC\Core\Controller\NavigationController;
-use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\INavigationManager;
use OCP\IRequest;
@@ -32,7 +15,6 @@ use OCP\IURLGenerator;
use Test\TestCase;
class NavigationControllerTest extends TestCase {
-
/** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */
private $request;
@@ -60,13 +42,14 @@ class NavigationControllerTest extends TestCase {
);
}
- public function dataGetNavigation() {
+ public static function dataGetNavigation(): array {
return [
- [false], [true]
+ [false],
+ [true],
];
}
- /** @dataProvider dataGetNavigation */
- public function testGetAppNavigation($absolute) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetNavigation')]
+ public function testGetAppNavigation(bool $absolute): void {
$this->navigationManager->expects($this->once())
->method('getAll')
->with('link')
@@ -75,14 +58,12 @@ class NavigationControllerTest extends TestCase {
$this->urlGenerator->expects($this->any())
->method('getBaseURL')
->willReturn('http://localhost/');
- $this->urlGenerator->expects($this->at(1))
+ $this->urlGenerator->expects($this->exactly(2))
->method('getAbsoluteURL')
- ->with('/index.php/apps/files')
- ->willReturn('http://localhost/index.php/apps/files');
- $this->urlGenerator->expects($this->at(3))
- ->method('getAbsoluteURL')
- ->with('icon')
- ->willReturn('http://localhost/icon');
+ ->willReturnMap([
+ ['/index.php/apps/files', 'http://localhost/index.php/apps/files'],
+ ['icon', 'http://localhost/icon'],
+ ]);
$actual = $this->controller->getAppsNavigation($absolute);
$this->assertInstanceOf(DataResponse::class, $actual);
$this->assertEquals('http://localhost/index.php/apps/files', $actual->getData()[0]['href']);
@@ -95,8 +76,8 @@ class NavigationControllerTest extends TestCase {
}
}
- /** @dataProvider dataGetNavigation */
- public function testGetSettingsNavigation($absolute) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetNavigation')]
+ public function testGetSettingsNavigation(bool $absolute): void {
$this->navigationManager->expects($this->once())
->method('getAll')
->with('settings')
@@ -105,14 +86,12 @@ class NavigationControllerTest extends TestCase {
$this->urlGenerator->expects($this->any())
->method('getBaseURL')
->willReturn('http://localhost/');
- $this->urlGenerator->expects($this->at(1))
- ->method('getAbsoluteURL')
- ->with('/index.php/settings/user')
- ->willReturn('http://localhost/index.php/settings/user');
- $this->urlGenerator->expects($this->at(3))
+ $this->urlGenerator->expects($this->exactly(2))
->method('getAbsoluteURL')
- ->with('/core/img/settings.svg')
- ->willReturn('http://localhost/core/img/settings.svg');
+ ->willReturnMap([
+ ['/index.php/settings/user', 'http://localhost/index.php/settings/user'],
+ ['/core/img/settings.svg', 'http://localhost/core/img/settings.svg']
+ ]);
$actual = $this->controller->getSettingsNavigation($absolute);
$this->assertInstanceOf(DataResponse::class, $actual);
$this->assertEquals('http://localhost/index.php/settings/user', $actual->getData()[0]['href']);
@@ -125,33 +104,35 @@ class NavigationControllerTest extends TestCase {
}
}
- public function testGetAppNavigationEtagMatch() {
- $navigation = [ ['id' => 'files', 'href' => '/index.php/apps/files', 'icon' => 'icon' ] ];
- $this->request->expects($this->once())
- ->method('getHeader')
- ->with('If-None-Match')
- ->willReturn(md5(json_encode($navigation)));
- $this->navigationManager->expects($this->once())
+ public function testEtagIgnoresLogout(): void {
+ $navigation1 = [
+ ['id' => 'files', 'href' => '/index.php/apps/files', 'icon' => 'icon' ],
+ ['id' => 'logout', 'href' => '/index.php/logout?requesttoken=abcd', 'icon' => 'icon' ],
+ ];
+ $navigation2 = [
+ ['id' => 'files', 'href' => '/index.php/apps/files', 'icon' => 'icon' ],
+ ['id' => 'logout', 'href' => '/index.php/logout?requesttoken=1234', 'icon' => 'icon' ],
+ ];
+ $navigation3 = [
+ ['id' => 'files', 'href' => '/index.php/apps/files/test', 'icon' => 'icon' ],
+ ['id' => 'logout', 'href' => '/index.php/logout?requesttoken=1234', 'icon' => 'icon' ],
+ ];
+ $this->navigationManager->expects($this->exactly(3))
->method('getAll')
->with('link')
- ->willReturn($navigation);
- $actual = $this->controller->getAppsNavigation();
- $this->assertInstanceOf(DataResponse::class, $actual);
- $this->assertEquals(Http::STATUS_NOT_MODIFIED, $actual->getStatus());
- }
+ ->willReturnOnConsecutiveCalls(
+ $navigation1,
+ $navigation2,
+ $navigation3,
+ );
- public function testGetSettingsNavigationEtagMatch() {
- $navigation = [ ['id' => 'logout', 'href' => '/index.php/apps/files', 'icon' => 'icon' ] ];
- $this->request->expects($this->once())
- ->method('getHeader')
- ->with('If-None-Match')
- ->willReturn(md5(json_encode([ ['id' => 'logout', 'href' => 'logout', 'icon' => 'icon' ] ])));
- $this->navigationManager->expects($this->once())
- ->method('getAll')
- ->with('settings')
- ->willReturn($navigation);
- $actual = $this->controller->getSettingsNavigation();
- $this->assertInstanceOf(DataResponse::class, $actual);
- $this->assertEquals(Http::STATUS_NOT_MODIFIED, $actual->getStatus());
+ // Changes in the logout url should not change the ETag
+ $request1 = $this->controller->getAppsNavigation();
+ $request2 = $this->controller->getAppsNavigation();
+ $this->assertEquals($request1->getETag(), $request2->getETag());
+
+ // Changes in non-logout urls should result in a different ETag
+ $request3 = $this->controller->getAppsNavigation();
+ $this->assertNotEquals($request2->getETag(), $request3->getETag());
}
}