diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-02-15 16:55:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-15 16:55:12 +0100 |
commit | 14bc9b171427c1512226d5ea402021d8b44ac690 (patch) | |
tree | 1a4b9c64f711becf429f90da69d3d46279c55435 /tests | |
parent | 8a505e8767fe7af62a4e9e8d95ef2e336b05bf61 (diff) | |
parent | e694b30a4f1e1cce6cbca0fcbbfeceee8a16c8f6 (diff) | |
download | nextcloud-server-14bc9b171427c1512226d5ea402021d8b44ac690.tar.gz nextcloud-server-14bc9b171427c1512226d5ea402021d8b44ac690.zip |
Merge pull request #8095 from nextcloud/webapps-capabilities
Expose navigation entries as API endpoint
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Core/Controller/NavigationControllerTest.php | 129 | ||||
-rw-r--r-- | tests/lib/NavigationManagerTest.php | 14 |
2 files changed, 136 insertions, 7 deletions
diff --git a/tests/Core/Controller/NavigationControllerTest.php b/tests/Core/Controller/NavigationControllerTest.php new file mode 100644 index 00000000000..1143ed003f0 --- /dev/null +++ b/tests/Core/Controller/NavigationControllerTest.php @@ -0,0 +1,129 @@ +<?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/>. + * + */ +namespace Tests\Core\Controller; + +use OC\Core\Controller\NavigationController; +use OCP\AppFramework\Http\DataResponse; +use OCP\INavigationManager; +use OCP\IRequest; +use OCP\IURLGenerator; +use Test\TestCase; + +class NavigationControllerTest extends TestCase { + + /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ + private $request; + + /** @var INavigationManager|\PHPUnit_Framework_MockObject_MockObject */ + private $navigationManager; + + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + private $urlGenerator; + + /** @var NavigationController */ + private $controller; + + public function setUp() { + parent::setUp(); + + $this->request = $this->createMock(IRequest::class); + $this->navigationManager = $this->createMock(INavigationManager::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + + $this->controller = new NavigationController( + 'core', + $this->request, + $this->navigationManager, + $this->urlGenerator + ); + } + + public function dataGetNavigation() { + return [ + [false], [true] + ]; + } + /** @dataProvider dataGetNavigation */ + public function testGetAppNavigation($absolute) { + $this->navigationManager->expects($this->once()) + ->method('getAll') + ->with('link') + ->willReturn([ ['id' => 'files', 'href' => '/index.php/apps/files', 'icon' => 'icon' ] ]); + if ($absolute) { + $this->urlGenerator->expects($this->any()) + ->method('getBaseURL') + ->willReturn('http://localhost/'); + $this->urlGenerator->expects($this->at(1)) + ->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'); + $actual = $this->controller->getAppsNavigation($absolute); + $this->assertInstanceOf(DataResponse::class, $actual); + $this->assertEquals('http://localhost/index.php/apps/files', $actual->getData()[0]['href']); + $this->assertEquals('http://localhost/icon', $actual->getData()[0]['icon']); + + + } else { + $actual = $this->controller->getAppsNavigation($absolute); + $this->assertInstanceOf(DataResponse::class, $actual); + $this->assertEquals('/index.php/apps/files', $actual->getData()[0]['href']); + $this->assertEquals('icon', $actual->getData()[0]['icon']); + + } + } + + /** @dataProvider dataGetNavigation */ + public function testGetSettingsNavigation($absolute) { + $this->navigationManager->expects($this->once()) + ->method('getAll') + ->with('settings') + ->willReturn([ ['id' => 'settings', 'href' => '/index.php/settings/user', 'icon' => '/core/img/settings.svg'] ]); + if ($absolute) { + $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)) + ->method('getAbsoluteURL') + ->with('/core/img/settings.svg') + ->willReturn('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']); + $this->assertEquals('http://localhost/core/img/settings.svg', $actual->getData()[0]['icon']); + } else { + $actual = $this->controller->getSettingsNavigation($absolute); + $this->assertInstanceOf(DataResponse::class, $actual); + $this->assertEquals('/index.php/settings/user', $actual->getData()[0]['href']); + $this->assertEquals('/core/img/settings.svg', $actual->getData()[0]['icon']); + } + } + +} diff --git a/tests/lib/NavigationManagerTest.php b/tests/lib/NavigationManagerTest.php index 585161c887b..b34ecca9469 100644 --- a/tests/lib/NavigationManagerTest.php +++ b/tests/lib/NavigationManagerTest.php @@ -284,7 +284,7 @@ class NavigationManagerTest extends TestCase { ], ]; return [ - 'minimalistic' => [array_merge($defaults, [[ + 'minimalistic' => [array_merge([$defaults[0]], [[ 'id' => 'test', 'order' => 100, 'href' => '/apps/test/', @@ -293,8 +293,8 @@ class NavigationManagerTest extends TestCase { 'active' => false, 'type' => 'link', 'classes' => '', - ]]), ['navigations' => [['route' => 'test.page.index', 'name' => 'Test']]]], - 'minimalistic-settings' => [array_merge($defaults, [[ + ]], [$defaults[1]]), ['navigations' => [['route' => 'test.page.index', 'name' => 'Test']]]], + 'minimalistic-settings' => [array_merge([$defaults[0]], [[ 'id' => 'test', 'order' => 100, 'href' => '/apps/test/', @@ -303,8 +303,8 @@ class NavigationManagerTest extends TestCase { 'active' => false, 'type' => 'settings', 'classes' => '', - ]]), ['navigations' => [['route' => 'test.page.index', 'name' => 'Test', 'type' => 'settings']]]], - 'admin' => [array_merge($apps, $defaults, [[ + ]], [$defaults[1]]), ['navigations' => [['route' => 'test.page.index', 'name' => 'Test', 'type' => 'settings']]]], + 'admin' => [array_merge([$defaults[0]], $apps, [[ 'id' => 'test', 'order' => 100, 'href' => '/apps/test/', @@ -313,8 +313,8 @@ class NavigationManagerTest extends TestCase { 'active' => false, 'type' => 'link', 'classes' => '', - ]]), ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]], true], - 'no name' => [array_merge($apps, $defaults), ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']]], true], + ]], [$defaults[1]]), ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]], true], + 'no name' => [array_merge([$defaults[0]], $apps, [$defaults[1]]), ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']]], true], 'no admin' => [$defaults, ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]]] ]; } |