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.php88
1 files changed, 43 insertions, 45 deletions
diff --git a/tests/Core/Controller/NavigationControllerTest.php b/tests/Core/Controller/NavigationControllerTest.php
index 4995bd2fed0..d00976f18ec 100644
--- a/tests/Core/Controller/NavigationControllerTest.php
+++ b/tests/Core/Controller/NavigationControllerTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -7,7 +8,6 @@
namespace Tests\Core\Controller;
use OC\Core\Controller\NavigationController;
-use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\INavigationManager;
use OCP\IRequest;
@@ -42,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): void {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetNavigation')]
+ public function testGetAppNavigation(bool $absolute): void {
$this->navigationManager->expects($this->once())
->method('getAll')
->with('link')
@@ -59,11 +60,10 @@ class NavigationControllerTest extends TestCase {
->willReturn('http://localhost/');
$this->urlGenerator->expects($this->exactly(2))
->method('getAbsoluteURL')
- ->withConsecutive(['/index.php/apps/files'], ['icon'])
- ->willReturnOnConsecutiveCalls(
- 'http://localhost/index.php/apps/files',
- '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']);
@@ -76,8 +76,8 @@ class NavigationControllerTest extends TestCase {
}
}
- /** @dataProvider dataGetNavigation */
- public function testGetSettingsNavigation($absolute): void {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetNavigation')]
+ public function testGetSettingsNavigation(bool $absolute): void {
$this->navigationManager->expects($this->once())
->method('getAll')
->with('settings')
@@ -88,14 +88,10 @@ class NavigationControllerTest extends TestCase {
->willReturn('http://localhost/');
$this->urlGenerator->expects($this->exactly(2))
->method('getAbsoluteURL')
- ->withConsecutive(
- ['/index.php/settings/user'],
- ['/core/img/settings.svg']
- )
- ->willReturnOnConsecutiveCalls(
- 'http://localhost/index.php/settings/user',
- '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']);
@@ -108,33 +104,35 @@ class NavigationControllerTest extends TestCase {
}
}
- public function testGetAppNavigationEtagMatch(): void {
- $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(): void {
- $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());
}
}