Organize navigation into a responsive grouped sidebar
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
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([]);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user