soulsync/webui/src/platform/shell/route-manifest.test.ts
Antti Kettunen ce1fb16b76
Split webui tooling into separate configs
- Move Vite, Vitest, Oxfmt, and Oxlint into standalone config files
- Replace vite-plus scripts and test imports with direct tools
- Keep the generated route tree out of formatter and linter checks
2026-05-13 22:26:25 +03:00

55 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
getShellRouteByPageId,
legacyShellRoutes,
normalizeShellPath,
reactShellRoutes,
resolveLegacyShellPageFromPath,
resolveShellPageFromPath,
shellRouteManifest,
} from './route-manifest';
describe('shellRouteManifest', () => {
it('resolves page ids from explicit paths', () => {
expect(resolveShellPageFromPath('/issues')).toBe('issues');
expect(resolveShellPageFromPath('/discover')).toBe('discover');
expect(resolveShellPageFromPath('/watchlist')).toBe('watchlist');
expect(resolveShellPageFromPath('/active-downloads')).toBe('active-downloads');
expect(resolveShellPageFromPath('/artist-detail')).toBe('artist-detail');
expect(resolveShellPageFromPath('/artists')).toBeNull();
});
it('treats the root path as unresolved so the shell can redirect to the profile home', () => {
expect(resolveShellPageFromPath('/')).toBeNull();
});
it('normalizes trailing slashes before resolving', () => {
expect(normalizeShellPath('/issues/')).toBe('/issues');
expect(resolveShellPageFromPath('/issues/')).toBe('issues');
});
it('keeps a route entry for every manifest page id', () => {
expect(shellRouteManifest).not.toHaveLength(0);
expect(getShellRouteByPageId('dashboard')?.path).toBe('/dashboard');
expect(getShellRouteByPageId('hydrabase')?.path).toBe('/hydrabase');
expect(getShellRouteByPageId('watchlist')?.path).toBe('/watchlist');
expect(getShellRouteByPageId('tools')?.path).toBe('/tools');
expect(getShellRouteByPageId('artist-detail')?.path).toBe('/artist-detail');
});
it('tracks whether a route is rendered by React or the legacy shell', () => {
expect(getShellRouteByPageId('issues')?.kind).toBe('react');
expect(getShellRouteByPageId('discover')?.kind).toBe('legacy');
expect(reactShellRoutes.map((route) => route.pageId)).toEqual(['issues']);
expect(legacyShellRoutes.some((route) => route.pageId === 'dashboard')).toBe(true);
});
it('only resolves legacy page ids for legacy-owned paths', () => {
expect(resolveLegacyShellPageFromPath('/search')).toBe('search');
expect(resolveLegacyShellPageFromPath('/active-downloads')).toBe('active-downloads');
expect(resolveLegacyShellPageFromPath('/tools')).toBe('tools');
expect(resolveLegacyShellPageFromPath('/issues')).toBeNull();
expect(resolveLegacyShellPageFromPath('/does-not-exist')).toBeNull();
});
});