import { ThemeLoaderService, BUILTIN_THEMES } from '../../backend/src/common/utils/theme-loader.service'; describe('ThemeLoaderService builtins', () => { it('includes all 10 canonical theme ids', () => { const ids = BUILTIN_THEMES.map((t) => t.id).sort(); expect(ids).toEqual([ 'classic', 'crimson', 'cyber', 'forest', 'midnight', 'monochrome', 'neon', 'ocean', 'paper', 'sunset', ]); }); it('every builtin theme has full tokens', () => { for (const t of BUILTIN_THEMES) { expect(t.tokens.primary).toMatch(/^#/); expect(t.tokens.radii.sm).toBeTruthy(); expect(t.tokens.spacingScale.length).toBeGreaterThan(0); } }); it('falls back to default for unknown id', () => { const config = { get: jest.fn((k: string, d: any) => d) } as any; const settings = { get: jest.fn().mockResolvedValue('classic') } as any; const svc = new ThemeLoaderService(config, settings); return svc.onModuleInit().then(() => { const t = svc.getTheme('totally-unknown'); expect(t.id).toBe('classic'); }); }); });