29 lines
1.3 KiB
JavaScript
29 lines
1.3 KiB
JavaScript
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('<!doctype html><html><body></body></html>', { 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);
|
|
});
|
|
});
|