Add Prettier and ESLint tooling (Refs #77)
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { navigationGroups, navigationItemActive, navigationLocation, visibleNavigation } from '../../src/lib/navigation.js';
|
||||
import {
|
||||
navigationGroups,
|
||||
navigationItemActive,
|
||||
navigationLocation,
|
||||
visibleNavigation
|
||||
} from '../../src/lib/navigation.js';
|
||||
|
||||
describe('application navigation', () => {
|
||||
it.each([
|
||||
@@ -19,26 +24,53 @@ describe('application navigation', () => {
|
||||
['/server-keys', 'admin', '/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]);
|
||||
expect(
|
||||
navigationGroups
|
||||
.flatMap((group) => group.items)
|
||||
.filter((item) => navigationItemActive(item, path))
|
||||
.map((item) => item.href)
|
||||
).toEqual([href]);
|
||||
});
|
||||
|
||||
it('keeps Operations reachable from Activity and redirects legacy overview links', async () => {
|
||||
expect(navigationGroups.find(group => group.id === 'activity')?.items.map(item => item.label)).toEqual(['Activity log', 'Provisioning', 'Maintenance']);
|
||||
expect(
|
||||
navigationGroups
|
||||
.find((group) => group.id === 'activity')
|
||||
?.items.map((item) => item.label)
|
||||
).toEqual(['Activity log', 'Provisioning', 'Maintenance']);
|
||||
const { load } = await import('../../src/routes/operations/+page.server.js');
|
||||
expect(load).toThrow(expect.objectContaining({ status: 308, location: '/activity' }));
|
||||
});
|
||||
|
||||
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('admin');
|
||||
expect(visibleNavigation(role).map((group) => group.id)).not.toContain('admin');
|
||||
expect(navigationLocation('/server-keys', role)).toBeNull();
|
||||
expect(visibleNavigation(role).flatMap(group => group.items).filter(item => ['h', 'k'].includes(item.shortcut ?? ''))).toEqual([]);
|
||||
expect(
|
||||
visibleNavigation(role)
|
||||
.flatMap((group) => group.items)
|
||||
.filter((item) => ['h', 'k'].includes(item.shortcut ?? ''))
|
||||
).toEqual([]);
|
||||
}
|
||||
});
|
||||
|
||||
it('groups file releases together and retains Campaigns as its own destination', () => {
|
||||
expect(navigationGroups.map(group => group.label)).toEqual(['Fleet', 'Releases', 'Activity', 'Players', 'Admin']);
|
||||
expect(navigationGroups.find(group => group.id === 'releases')?.items.map(item => item.label)).toEqual(['Scripts', 'Configs', 'Plugins', 'Game files', 'Betas', 'Campaigns']);
|
||||
expect(navigationGroups.flatMap(group => group.items).some(item => /rollout/i.test(item.label))).toBe(false);
|
||||
expect(navigationGroups.map((group) => group.label)).toEqual([
|
||||
'Fleet',
|
||||
'Releases',
|
||||
'Activity',
|
||||
'Players',
|
||||
'Admin'
|
||||
]);
|
||||
expect(
|
||||
navigationGroups
|
||||
.find((group) => group.id === 'releases')
|
||||
?.items.map((item) => item.label)
|
||||
).toEqual(['Scripts', 'Configs', 'Plugins', 'Game files', 'Betas', 'Campaigns']);
|
||||
expect(
|
||||
navigationGroups
|
||||
.flatMap((group) => group.items)
|
||||
.some((item) => /rollout/i.test(item.label))
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user