import { describe, expect, it } from 'vitest'; import { navigationGroups, navigationItemActive, navigationLocation, visibleNavigation } from '../../src/lib/navigation.js'; describe('application navigation', () => { it.each([ ['/servers/t5_zombie_theater_1', 'fleet', '/'], ['/collections/launches/42', 'fleet', '/collections'], ['/hosts/42', 'fleet', '/hosts'], ['/hosts/operations', 'operations', '/hosts/operations'], ['/betas/new', 'operations', '/betas'], ['/campaigns/42', 'operations', '/campaigns'], ['/configs/42', 'library', '/configs'], ['/leaderboard/players/42', 'analytics', '/leaderboard'], ['/settings/users', 'administration', '/settings/users'], ['/server-keys', 'administration', '/server-keys'] ])('gives %s exactly one canonical home', (path, group, href) => { expect(navigationLocation(path, 'admin')?.group.id).toBe(group); expect(navigationGroups.flatMap(group => group.items).filter(item => navigationItemActive(item, path)).map(item => item.href)).toEqual([href]); }); it('keeps administration and its shortcuts out of operator and viewer navigation', () => { for (const role of ['operator', 'viewer'] as const) { expect(visibleNavigation(role).map(group => group.id)).not.toContain('administration'); expect(navigationLocation('/server-keys', role)).toBeNull(); expect(visibleNavigation(role).flatMap(group => group.items).filter(item => ['h', 'k'].includes(item.shortcut ?? ''))).toEqual([]); } }); });