123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784 |
- <?php
- /**
- * 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\App\AppManager;
- use OC\Group\Manager;
- use OC\NavigationManager;
- use OC\SubAdmin;
- use OCP\IConfig;
- use OCP\IGroupManager;
- use OCP\IL10N;
- use OCP\IURLGenerator;
- use OCP\IUser;
- use OCP\IUserSession;
- use OCP\L10N\IFactory;
- use Psr\Log\LoggerInterface;
- class NavigationManagerTest extends TestCase {
- /** @var AppManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $appManager;
- /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
- protected $urlGenerator;
- /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10nFac;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- protected $userSession;
- /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $groupManager;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
- /** @var \OC\NavigationManager */
- protected $navigationManager;
- protected LoggerInterface $logger;
- protected function setUp(): void {
- parent::setUp();
- $this->appManager = $this->createMock(AppManager::class);
- $this->urlGenerator = $this->createMock(IURLGenerator::class);
- $this->l10nFac = $this->createMock(IFactory::class);
- $this->userSession = $this->createMock(IUserSession::class);
- $this->groupManager = $this->createMock(Manager::class);
- $this->config = $this->createMock(IConfig::class);
- $this->logger = $this->createMock(LoggerInterface::class);
- $this->navigationManager = new NavigationManager(
- $this->appManager,
- $this->urlGenerator,
- $this->l10nFac,
- $this->userSession,
- $this->groupManager,
- $this->config,
- $this->logger,
- );
- $this->navigationManager->clear(false);
- }
- public function addArrayData() {
- return [
- [
- 'entry id' => [
- 'id' => 'entry id',
- 'name' => 'link text',
- 'order' => 1,
- 'icon' => 'optional',
- 'href' => 'url',
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ],
- 'entry id2' => [
- 'id' => 'entry id',
- 'name' => 'link text',
- 'order' => 1,
- 'icon' => 'optional',
- 'href' => 'url',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ]
- ],
- [
- 'entry id' => [
- 'id' => 'entry id',
- 'name' => 'link text',
- 'order' => 1,
- //'icon' => 'optional',
- 'href' => 'url',
- 'active' => true,
- 'unread' => 0,
- ],
- 'entry id2' => [
- 'id' => 'entry id',
- 'name' => 'link text',
- 'order' => 1,
- 'icon' => '',
- 'href' => 'url',
- 'active' => false,
- 'type' => 'link',
- 'classes' => '',
- 'unread' => 0,
- 'default' => true,
- ]
- ]
- ];
- }
- /**
- * @dataProvider addArrayData
- *
- * @param array $entry
- * @param array $expectedEntry
- */
- public function testAddArray(array $entry, array $expectedEntry): void {
- $this->assertEmpty($this->navigationManager->getAll('all'), 'Expected no navigation entry exists');
- $this->navigationManager->add($entry);
- $navigationEntries = $this->navigationManager->getAll('all');
- $this->assertCount(1, $navigationEntries, 'Expected that 1 navigation entry exists');
- $this->assertEquals($expectedEntry, $navigationEntries['entry id']);
- $this->navigationManager->clear(false);
- $this->assertEmpty($this->navigationManager->getAll('all'), 'Expected no navigation entry exists after clear()');
- }
- /**
- * @dataProvider addArrayData
- *
- * @param array $entry
- * @param array $expectedEntry
- */
- public function testAddClosure(array $entry, array $expectedEntry): void {
- global $testAddClosureNumberOfCalls;
- $testAddClosureNumberOfCalls = 0;
- $this->navigationManager->add(function () use ($entry) {
- global $testAddClosureNumberOfCalls;
- $testAddClosureNumberOfCalls++;
- return $entry;
- });
- $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by add()');
- $navigationEntries = $this->navigationManager->getAll('all');
- $this->assertEquals(1, $testAddClosureNumberOfCalls, 'Expected that the closure is called by getAll()');
- $this->assertCount(1, $navigationEntries, 'Expected that 1 navigation entry exists');
- $this->assertEquals($expectedEntry, $navigationEntries['entry id']);
- $navigationEntries = $this->navigationManager->getAll('all');
- $this->assertEquals(1, $testAddClosureNumberOfCalls, 'Expected that the closure is only called once for getAll()');
- $this->assertCount(1, $navigationEntries, 'Expected that 1 navigation entry exists');
- $this->assertEquals($expectedEntry, $navigationEntries['entry id']);
- $this->navigationManager->clear(false);
- $this->assertEmpty($this->navigationManager->getAll('all'), 'Expected no navigation entry exists after clear()');
- }
- public function testAddArrayClearGetAll(): void {
- $entry = [
- 'id' => 'entry id',
- 'name' => 'link text',
- 'order' => 1,
- 'icon' => 'optional',
- 'href' => 'url'
- ];
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
- $this->navigationManager->add($entry);
- $this->navigationManager->clear(false);
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
- }
- public function testAddClosureClearGetAll(): void {
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
- $entry = [
- 'id' => 'entry id',
- 'name' => 'link text',
- 'order' => 1,
- 'icon' => 'optional',
- 'href' => 'url'
- ];
- global $testAddClosureNumberOfCalls;
- $testAddClosureNumberOfCalls = 0;
- $this->navigationManager->add(function () use ($entry) {
- global $testAddClosureNumberOfCalls;
- $testAddClosureNumberOfCalls++;
- return $entry;
- });
- $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by add()');
- $this->navigationManager->clear(false);
- $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by clear()');
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
- $this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by getAll()');
- }
- /**
- * @dataProvider providesNavigationConfig
- */
- public function testWithAppManager($expected, $navigation, $isAdmin = false): void {
- $l = $this->createMock(IL10N::class);
- $l->expects($this->any())->method('t')->willReturnCallback(function ($text, $parameters = []) {
- return vsprintf($text, $parameters);
- });
- /* Return default value */
- $this->config->method('getUserValue')
- ->willReturnArgument(3);
- $this->appManager->expects($this->any())
- ->method('isEnabledForUser')
- ->with('theming')
- ->willReturn(true);
- $this->appManager->expects($this->once())
- ->method('getAppInfo')
- ->with('test')
- ->willReturn($navigation);
- $this->urlGenerator->expects($this->any())
- ->method('imagePath')
- ->willReturnCallback(function ($appName, $file) {
- return "/apps/$appName/img/$file";
- });
- $this->appManager->expects($this->any())
- ->method('getAppIcon')
- ->willReturnCallback(fn (string $appName) => "/apps/$appName/img/app.svg");
- $this->l10nFac->expects($this->any())->method('get')->willReturn($l);
- $this->urlGenerator->expects($this->any())->method('linkToRoute')->willReturnCallback(function ($route) {
- if ($route === 'core.login.logout') {
- return 'https://example.com/logout';
- }
- return '/apps/test/';
- });
- $user = $this->createMock(IUser::class);
- $user->expects($this->any())->method('getUID')->willReturn('user001');
- $this->userSession->expects($this->any())->method('getUser')->willReturn($user);
- $this->userSession->expects($this->any())->method('isLoggedIn')->willReturn(true);
- $this->appManager->expects($this->any())
- ->method('getEnabledAppsForUser')
- ->with($user)
- ->willReturn(['test']);
- $this->groupManager->expects($this->any())->method('isAdmin')->willReturn($isAdmin);
- $subadmin = $this->createMock(SubAdmin::class);
- $subadmin->expects($this->any())->method('isSubAdmin')->with($user)->willReturn(false);
- $this->groupManager->expects($this->any())->method('getSubAdmin')->willReturn($subadmin);
- $this->navigationManager->clear();
- $entries = $this->navigationManager->getAll('all');
- $this->assertEquals($expected, $entries);
- }
- public function providesNavigationConfig() {
- $apps = [
- 'core_apps' => [
- 'id' => 'core_apps',
- 'order' => 5,
- 'href' => '/apps/test/',
- 'icon' => '/apps/settings/img/apps.svg',
- 'name' => 'Apps',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ]
- ];
- $defaults = [
- 'profile' => [
- 'type' => 'settings',
- 'id' => 'profile',
- 'order' => 1,
- 'href' => '/apps/test/',
- 'name' => 'View profile',
- 'icon' => '',
- 'active' => false,
- 'classes' => '',
- 'unread' => 0,
- ],
- 'accessibility_settings' => [
- 'type' => 'settings',
- 'id' => 'accessibility_settings',
- 'order' => 2,
- 'href' => '/apps/test/',
- 'name' => 'Appearance and accessibility',
- 'icon' => '/apps/theming/img/accessibility-dark.svg',
- 'active' => false,
- 'classes' => '',
- 'unread' => 0,
- ],
- 'settings' => [
- 'id' => 'settings',
- 'order' => 3,
- 'href' => '/apps/test/',
- 'icon' => '/apps/settings/img/admin.svg',
- 'name' => 'Settings',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ],
- 'logout' => [
- 'id' => 'logout',
- 'order' => 99999,
- 'href' => 'https://example.com/logout?requesttoken=' . urlencode(\OCP\Util::callRegister()),
- 'icon' => '/apps/core/img/actions/logout.svg',
- 'name' => 'Log out',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ]
- ];
- $adminSettings = [
- 'accessibility_settings' => $defaults['accessibility_settings'],
- 'settings' => [
- 'id' => 'settings',
- 'order' => 3,
- 'href' => '/apps/test/',
- 'icon' => '/apps/settings/img/personal.svg',
- 'name' => 'Personal settings',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ],
- 'admin_settings' => [
- 'id' => 'admin_settings',
- 'order' => 4,
- 'href' => '/apps/test/',
- 'icon' => '/apps/settings/img/admin.svg',
- 'name' => 'Administration settings',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0
- ]
- ];
- return [
- 'minimalistic' => [
- array_merge(
- ['profile' => $defaults['profile']],
- ['accessibility_settings' => $defaults['accessibility_settings']],
- ['settings' => $defaults['settings']],
- ['test' => [
- 'id' => 'test',
- 'order' => 100,
- 'href' => '/apps/test/',
- 'icon' => '/apps/test/img/app.svg',
- 'name' => 'Test',
- 'active' => false,
- 'type' => 'link',
- 'classes' => '',
- 'unread' => 0,
- 'default' => true,
- 'app' => 'test',
- ]],
- ['logout' => $defaults['logout']]
- ),
- ['navigations' => [
- 'navigation' => [
- ['route' => 'test.page.index', 'name' => 'Test']
- ]
- ]]
- ],
- 'minimalistic-settings' => [
- array_merge(
- ['profile' => $defaults['profile']],
- ['accessibility_settings' => $defaults['accessibility_settings']],
- ['settings' => $defaults['settings']],
- ['test' => [
- 'id' => 'test',
- 'order' => 100,
- 'href' => '/apps/test/',
- 'icon' => '/apps/test/img/app.svg',
- 'name' => 'Test',
- 'active' => false,
- 'type' => 'settings',
- 'classes' => '',
- 'unread' => 0,
- ]],
- ['logout' => $defaults['logout']]
- ),
- ['navigations' => [
- 'navigation' => [
- ['route' => 'test.page.index', 'name' => 'Test', 'type' => 'settings']
- ],
- ]]
- ],
- 'with-multiple' => [
- array_merge(
- ['profile' => $defaults['profile']],
- ['accessibility_settings' => $defaults['accessibility_settings']],
- ['settings' => $defaults['settings']],
- ['test' => [
- 'id' => 'test',
- 'order' => 100,
- 'href' => '/apps/test/',
- 'icon' => '/apps/test/img/app.svg',
- 'name' => 'Test',
- 'active' => false,
- 'type' => 'link',
- 'classes' => '',
- 'unread' => 0,
- 'default' => false,
- 'app' => 'test',
- ],
- 'test1' => [
- 'id' => 'test1',
- 'order' => 50,
- 'href' => '/apps/test/',
- 'icon' => '/apps/test/img/app.svg',
- 'name' => 'Other test',
- 'active' => false,
- 'type' => 'link',
- 'classes' => '',
- 'unread' => 0,
- 'default' => true, // because of order
- 'app' => 'test',
- ]],
- ['logout' => $defaults['logout']]
- ),
- ['navigations' => [
- 'navigation' => [
- ['route' => 'test.page.index', 'name' => 'Test'],
- ['route' => 'test.page.index', 'name' => 'Other test', 'order' => 50],
- ]
- ]]
- ],
- 'admin' => [
- array_merge(
- ['profile' => $defaults['profile']],
- $adminSettings,
- $apps,
- ['test' => [
- 'id' => 'test',
- 'order' => 100,
- 'href' => '/apps/test/',
- 'icon' => '/apps/test/img/app.svg',
- 'name' => 'Test',
- 'active' => false,
- 'type' => 'link',
- 'classes' => '',
- 'unread' => 0,
- 'default' => true,
- 'app' => 'test',
- ]],
- ['logout' => $defaults['logout']]
- ),
- ['navigations' => [
- 'navigation' => [
- ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']
- ],
- ]],
- true
- ],
- 'no name' => [
- array_merge(
- ['profile' => $defaults['profile']],
- $adminSettings,
- $apps,
- ['logout' => $defaults['logout']]
- ),
- ['navigations' => [
- 'navigation' => [
- ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']
- ],
- ]],
- true
- ],
- 'no admin' => [
- $defaults,
- ['navigations' => [
- 'navigation' => [
- ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']
- ],
- ]],
- ]
- ];
- }
- public function testWithAppManagerAndApporder(): void {
- $l = $this->createMock(IL10N::class);
- $l->expects($this->any())->method('t')->willReturnCallback(function ($text, $parameters = []) {
- return vsprintf($text, $parameters);
- });
- $testOrder = 12;
- $expected = [
- 'test' => [
- 'type' => 'link',
- 'id' => 'test',
- 'order' => $testOrder,
- 'href' => '/apps/test/',
- 'name' => 'Test',
- 'icon' => '/apps/test/img/app.svg',
- 'active' => false,
- 'classes' => '',
- 'unread' => 0,
- 'default' => true,
- 'app' => 'test',
- ],
- ];
- $navigation = ['navigations' => [
- 'navigation' => [
- ['route' => 'test.page.index', 'name' => 'Test']
- ],
- ]];
- $this->config->method('getUserValue')
- ->willReturnCallback(
- function (string $userId, string $appName, string $key, mixed $default = '') use ($testOrder) {
- $this->assertEquals('user001', $userId);
- if ($key === 'apporder') {
- return json_encode(['test' => ['app' => 'test', 'order' => $testOrder]]);
- }
- return $default;
- }
- );
- $this->appManager->expects($this->any())
- ->method('isEnabledForUser')
- ->with('theming')
- ->willReturn(true);
- $this->appManager->expects($this->once())->method('getAppInfo')->with('test')->willReturn($navigation);
- $this->appManager->expects($this->once())->method('getAppIcon')->with('test')->willReturn('/apps/test/img/app.svg');
- $this->l10nFac->expects($this->any())->method('get')->willReturn($l);
- $this->urlGenerator->expects($this->any())->method('imagePath')->willReturnCallback(function ($appName, $file) {
- return "/apps/$appName/img/$file";
- });
- $this->urlGenerator->expects($this->any())->method('linkToRoute')->willReturnCallback(function ($route) {
- if ($route === 'core.login.logout') {
- return 'https://example.com/logout';
- }
- return '/apps/test/';
- });
- $user = $this->createMock(IUser::class);
- $user->expects($this->any())->method('getUID')->willReturn('user001');
- $this->userSession->expects($this->any())->method('getUser')->willReturn($user);
- $this->userSession->expects($this->any())->method('isLoggedIn')->willReturn(true);
- $this->appManager->expects($this->any())
- ->method('getEnabledAppsForUser')
- ->with($user)
- ->willReturn(['test']);
- $this->groupManager->expects($this->any())->method('isAdmin')->willReturn(false);
- $subadmin = $this->createMock(SubAdmin::class);
- $subadmin->expects($this->any())->method('isSubAdmin')->with($user)->willReturn(false);
- $this->groupManager->expects($this->any())->method('getSubAdmin')->willReturn($subadmin);
- $this->navigationManager->clear();
- $entries = $this->navigationManager->getAll();
- $this->assertEquals($expected, $entries);
- }
- public static function provideDefaultEntries(): array {
- return [
- // none specified, default to files
- [
- '',
- '',
- '{}',
- true,
- 'files',
- ],
- // none specified, without fallback
- [
- '',
- '',
- '{}',
- false,
- '',
- ],
- // unexisting or inaccessible app specified, default to files
- [
- 'unexist',
- '',
- '{}',
- true,
- 'files',
- ],
- // unexisting or inaccessible app specified, without fallbacks
- [
- 'unexist',
- '',
- '{}',
- false,
- '',
- ],
- // non-standard app
- [
- 'settings',
- '',
- '{}',
- true,
- 'settings',
- ],
- // non-standard app, without fallback
- [
- 'settings',
- '',
- '{}',
- false,
- 'settings',
- ],
- // non-standard app with fallback
- [
- 'unexist,settings',
- '',
- '{}',
- true,
- 'settings',
- ],
- // system default app and user apporder
- [
- // system default is settings
- 'unexist,settings',
- '',
- // apporder says default app is files (order is lower)
- '{"files_id":{"app":"files","order":1},"settings_id":{"app":"settings","order":2}}',
- true,
- // system default should override apporder
- 'settings'
- ],
- // user-customized defaultapp
- [
- '',
- 'files',
- '',
- true,
- 'files',
- ],
- // user-customized defaultapp with systemwide
- [
- 'unexist,settings',
- 'files',
- '',
- true,
- 'files',
- ],
- // user-customized defaultapp with system wide and apporder
- [
- 'unexist,settings',
- 'files',
- '{"settings_id":{"app":"settings","order":1},"files_id":{"app":"files","order":2}}',
- true,
- 'files',
- ],
- // user-customized apporder fallback
- [
- '',
- '',
- '{"settings_id":{"app":"settings","order":1},"files":{"app":"files","order":2}}',
- true,
- 'settings',
- ],
- // user-customized apporder fallback with missing app key (entries added by closures does not always have an app key set (Nextcloud 27 spreed app for example))
- [
- '',
- '',
- '{"spreed":{"order":1},"files":{"app":"files","order":2}}',
- true,
- 'files',
- ],
- // user-customized apporder, but called without fallback
- [
- '',
- '',
- '{"settings":{"app":"settings","order":1},"files":{"app":"files","order":2}}',
- false,
- '',
- ],
- // user-customized apporder with an app that has multiple routes
- [
- '',
- '',
- '{"settings_id":{"app":"settings","order":1},"settings_id_2":{"app":"settings","order":3},"id_files":{"app":"files","order":2}}',
- true,
- 'settings',
- ],
- ];
- }
- /**
- * @dataProvider provideDefaultEntries
- */
- public function testGetDefaultEntryIdForUser($defaultApps, $userDefaultApps, $userApporder, $withFallbacks, $expectedApp): void {
- $this->navigationManager->add([
- 'id' => 'files',
- ]);
- $this->navigationManager->add([
- 'id' => 'settings',
- ]);
- $this->appManager->method('getInstalledApps')->willReturn([]);
- $user = $this->createMock(IUser::class);
- $user->method('getUID')->willReturn('user1');
- $this->userSession->expects($this->once())
- ->method('getUser')
- ->willReturn($user);
- $this->config->expects($this->once())
- ->method('getSystemValueString')
- ->with('defaultapp', $this->anything())
- ->willReturn($defaultApps);
- $this->config->expects($this->atLeastOnce())
- ->method('getUserValue')
- ->willReturnMap([
- ['user1', 'core', 'defaultapp', '', $userDefaultApps],
- ['user1', 'core', 'apporder', '[]', $userApporder],
- ]);
- $this->assertEquals($expectedApp, $this->navigationManager->getDefaultEntryIdForUser(null, $withFallbacks));
- }
- public function testDefaultEntryUpdated(): void {
- $this->appManager->method('getInstalledApps')->willReturn([]);
- $user = $this->createMock(IUser::class);
- $user->method('getUID')->willReturn('user1');
- $this->userSession
- ->method('getUser')
- ->willReturn($user);
- $this->config
- ->method('getSystemValueString')
- ->with('defaultapp', $this->anything())
- ->willReturn('app4,app3,app2,app1');
- $this->config
- ->method('getUserValue')
- ->willReturnMap([
- ['user1', 'core', 'defaultapp', '', ''],
- ['user1', 'core', 'apporder', '[]', ''],
- ]);
- $this->navigationManager->add([
- 'id' => 'app1',
- ]);
- $this->assertEquals('app1', $this->navigationManager->getDefaultEntryIdForUser(null, false));
- $this->assertEquals(true, $this->navigationManager->get('app1')['default']);
- $this->navigationManager->add([
- 'id' => 'app3',
- ]);
- $this->assertEquals('app3', $this->navigationManager->getDefaultEntryIdForUser(null, false));
- $this->assertEquals(false, $this->navigationManager->get('app1')['default']);
- $this->assertEquals(true, $this->navigationManager->get('app3')['default']);
- $this->navigationManager->add([
- 'id' => 'app2',
- ]);
- $this->assertEquals('app3', $this->navigationManager->getDefaultEntryIdForUser(null, false));
- $this->assertEquals(false, $this->navigationManager->get('app1')['default']);
- $this->assertEquals(false, $this->navigationManager->get('app2')['default']);
- $this->assertEquals(true, $this->navigationManager->get('app3')['default']);
- $this->navigationManager->add([
- 'id' => 'app4',
- ]);
- $this->assertEquals('app4', $this->navigationManager->getDefaultEntryIdForUser(null, false));
- $this->assertEquals(false, $this->navigationManager->get('app1')['default']);
- $this->assertEquals(false, $this->navigationManager->get('app2')['default']);
- $this->assertEquals(false, $this->navigationManager->get('app3')['default']);
- $this->assertEquals(true, $this->navigationManager->get('app4')['default']);
- }
- }
|