homelab_automation/tests/frontend/debug_mode_ui.test.js
Bruno Charest 70c15c9b6f
Some checks failed
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled
Add debug mode feature flag with environment variable parsing, UI badge indicator, secret redaction utility, and enhanced terminal session management with status checks and session limit error handling
2025-12-21 17:22:36 -05:00

88 lines
2.5 KiB
JavaScript

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 = `
<div class="desktop-nav-links">
<div class="relative group"></div>
</div>
<div id="hosts-list"></div>
`;
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();
});
});