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();
});
});