import { describe, it, expect, vi, beforeAll, afterAll } from 'vitest'; import { JSDOM } from 'jsdom'; vi.mock('../../public/api.js', () => ({ api: { get: vi.fn(async (p) => p.endsWith('/version') ? { running: 'v3.2.5', latest: 'v3.2.6', updateAvailable: true, url: 'https://x' } : { data: [] }), post: vi.fn(async () => ({ link: 'https://link.hynesy.com/abc' })) } })); let render; beforeAll(async () => { const dom = new JSDOM('
', { url: 'http://localhost/' }); global.window = dom.window; global.document = dom.window.document; global.Node = dom.window.Node; ({ render } = await import('../../public/views/links.js')); }); afterAll(() => { delete global.window; delete global.document; delete global.Node; }); describe('links view', () => { it('renders the update badge + quick-add + the Kutt iframe', async () => { const main = document.getElementById('main'); await render(main); await new Promise(r => setTimeout(r, 0)); expect(main.querySelector('iframe.term-frame').getAttribute('src')).toBe('https://link.hynesy.com/'); expect(main.textContent).toMatch(/update available/i); expect(main.querySelector('.lk-quickadd')).not.toBeNull(); }); });