import { renderAdminIndex } from './panel_html.mjs'; // Simulated browser/status contract: this does not exercise the Rust server. import assert from 'node:assert/strict'; import fs from 'node:fs'; import path from 'node:path'; import vm from 'node:vm'; import { fileURLToPath } from 'node:url'; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..'); const read = file => fs.readFileSync(path.join(root, file), 'utf8'); const html = renderAdminIndex(root); const controllerSource = read('src/admin/web/app/overview-samples.js'); const store = new Map(); assert.match(html, /id="overview-layout-unlock"/); // History controls share the connected-core eyebrow row (not a separate // dashboard row), and navigation shows them only on Overview. const metaStart = html.indexOf('class="page-intro-meta-row"'); const metaEnd = html.indexOf('class="page-intro-title-row"'); const statusPos = html.indexOf('id="connection-label"'); const selectPos = html.indexOf('id="overview-live-samples"'); assert.ok(metaStart < statusPos && statusPos < selectPos && selectPos < metaEnd); assert.ok(selectPos < html.indexOf('id="panel-overview"')); assert.match(html, /id="overview-samples-toolbar" hidden role="group"/); assert.match(read('src/admin/web/app/core.js'), /\$\("overview-samples-toolbar"\)\.hidden = name !== "overview"/); assert.ok(html.indexOf('id="overview-live-samples"') < html.indexOf('id="overview-layout-unlock"')); assert.ok(html.indexOf('id="overview-live-samples"') < html.indexOf('id="dashboard-overview-grid"')); for (const sample of [60, 120, 300, 600]) assert.match(html, new RegExp(`