import { describe, it, expect, beforeEach, vi } from 'vitest'; import fs from 'node:fs'; import path from 'node:path'; function loadMainJsAsGlobal() { const mainPath = path.resolve(process.cwd(), 'app', 'main.js'); const source = fs.readFileSync(mainPath, 'utf8'); const wrapped = `${source}\n;globalThis.__DashboardManager = DashboardManager;`; eval(wrapped); return globalThis.__DashboardManager; } describe('DEBUG_MODE UI gating', () => { beforeEach(() => { document.body.innerHTML = `
`; delete globalThis.__DashboardManager; delete globalThis.DashboardManager; }); it('shows DEBUG badge only when enabled', () => { const DashboardManager = loadMainJsAsGlobal(); const dashboard = new DashboardManager(); dashboard.setDebugBadgeVisible(false); expect(document.getElementById('debug-mode-badge')).toBeNull(); dashboard.setDebugBadgeVisible(true); expect(document.getElementById('debug-mode-badge')?.textContent).toBe('DEBUG'); dashboard.setDebugBadgeVisible(false); expect(document.getElementById('debug-mode-badge')).toBeNull(); }); it('mounts terminal buttons when debug is disabled', () => { const DashboardManager = loadMainJsAsGlobal(); const dashboard = new DashboardManager(); dashboard.debugModeEnabled = false; dashboard.hosts = [ { id: 'h1', name: 'host1', ip: '127.0.0.1', os: 'linux', status: 'online', bootstrap_ok: true, groups: ['env_prod', 'role_web'], last_seen: new Date().toISOString(), }, ]; dashboard.renderHosts(); expect(document.querySelector('[data-action="terminal"]')).not.toBeNull(); expect(document.querySelector('[data-action="terminal-popout"]')).not.toBeNull(); }); it('mounts terminal buttons when debug is enabled', () => { const DashboardManager = loadMainJsAsGlobal(); const dashboard = new DashboardManager(); dashboard.debugModeEnabled = true; dashboard.hosts = [ { id: 'h1', name: 'host1', ip: '127.0.0.1', os: 'linux', status: 'online', bootstrap_ok: true, groups: ['env_prod', 'role_web'], last_seen: new Date().toISOString(), }, ]; dashboard.renderHosts(); expect(document.querySelector('[data-action="terminal"]')).not.toBeNull(); expect(document.querySelector('[data-action="terminal-popout"]')).not.toBeNull(); }); });