import { describe, it, expect, vi, beforeAll, afterAll } from 'vitest'; import { JSDOM } from 'jsdom'; vi.mock('../../public/api.js', () => ({ api: { get: vi.fn().mockResolvedValue({ ok: true, claude: { today: { input: 1, output: 2, cache: 3, turns: 4 }, week: { input: 5, output: 6 }, top_model: 'claude-opus-4-8' }, local: { top: { model: 'llama', p50_ms: 100, p95_ms: 200, error_rate: 0 }, runs: 3 } }) } })); let card; beforeAll(async () => { const dom = new JSDOM('', { url: 'http://localhost/' }); global.window = dom.window; global.document = dom.window.document; global.Node = dom.window.Node; global.location = dom.window.location; card = (await import('../../public/views/cards/ai_usage.js')).default; }); afterAll(() => { delete global.window; delete global.document; delete global.Node; delete global.location; }); describe('AI Usage SV card link', () => { it('points the Full dashboard link at the in-Void #/ai-usage route', async () => { const e = document.createElement('div'); card.mount(e); await new Promise(r => setTimeout(r, 0)); // let load() resolve const link = e.querySelector('a.aiu-link'); expect(link.getAttribute('href')).toBe('#/ai-usage'); expect(link.hasAttribute('target')).toBe(false); }); });