const test = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const vm = require('node:vm'); require('../src/common'); const renderDashboardPage = require('../src/web/routes/signage/dashboard'); test('dashboard onboarding link uses the player base url', () => { const html = renderDashboardPage( { screens: [ { public_base_url: 'http://player.local/' } ], playlists: [], clients: [], slides: [], connectedClientsCount: 0, connectedPlayersCount: 0 }, '', { id: 1, permissions: ['screens.read', 'clients.read'] } ); assert.match(html, /href="http:\/\/player\.local"/); assert.doesNotMatch(html, /http:\/\/player\.local\//); }); test('dashboard screen snapshot omits player links and duplicate connection counts', () => { const html = renderDashboardPage( { screens: [ { id: 7, name: 'Demo Conference', slug: 'demo-conference', playlist_name: 'Main Loop', player_connection_count: 3, public_base_url: 'http://player.local/' } ], playlists: [], clients: [], slides: [], connectedClientsCount: 3, connectedPlayersCount: 3 }, '', { id: 1, permissions: ['screens.read', 'clients.read'] } ); assert.match(html, /Screen group snapshot/); assert.match(html, /players/); assert.doesNotMatch(html, /dashboard-screen-link/); assert.doesNotMatch(html, /Connections<\/dt>/); assert.match(html, /3\s+live/); assert.doesNotMatch(html, />3 connected/); }); test('dashboard kiosk launcher includes connected player choices', () => { const html = renderDashboardPage( { screens: [], playlists: [], kioskPlayers: [ { player_identifier: 'player-alpha', player_url: 'http://player-a.example' }, { player_identifier: 'player-beta', player_url: 'http://player-b.example' } ], slides: [], connectedClientsCount: 1, connectedPlayersCount: 1 }, '', { id: 1, permissions: ['screens.read', 'clients.read', 'dashboard.allow'] } ); assert.match(html, /dashboard-kiosk-launcher-player-select/); assert.match(html, /