// tests/frontend/devices_band.test.js import { describe, it, expect, vi, beforeAll, afterAll } from 'vitest'; import { JSDOM } from 'jsdom'; vi.mock('../../public/api.js', () => ({ api: { get: vi.fn(async (p) => { if (p === '/api/devices') return { groups: [ { name: 'Network', devices: [ { mac: 'bc:a5:11:3e:06:88', ip: '192.168.1.13', name: 'Orbi Satellite', vendor: 'Netgear', randomized: false, present: true } ] } ] }; if (p === '/api/devices/discovered') return [ { mac: '24:4b:fe:8e:09:a4', ip: '192.168.1.15', vendor: 'ASUSTek', randomized: false, present: true } ]; return {}; }), patch: vi.fn(async () => ({})) } })); let renderDevicesBand; beforeAll(async () => { const dom = new JSDOM('
', { url: 'http://localhost/' }); global.window = dom.window; global.document = dom.window.document; global.Node = dom.window.Node; ({ renderDevicesBand } = await import('../../public/views/devices_band.js')); }); afterAll(() => { delete global.window; delete global.document; delete global.Node; }); describe('devices band', () => { it('renders known devices from the API with MAC, and a discovered count', async () => { const host = document.getElementById('h'); await renderDevicesBand(host); await new Promise(r => setTimeout(r, 0)); expect(host.textContent).toContain('Orbi Satellite'); expect(host.querySelector('.dv-mac').textContent).toBe('bc:a5:11:3e:06:88'); expect(host.querySelector('.dv-discovered')).not.toBeNull(); // review affordance present expect(host.textContent).toMatch(/Discovered/i); }); });