/** * render-html.test — the single-file report: self-contained, escaped, * deterministic, carrying every metric (status / duration / size) per axis. */ import { describe, it, expect } from 'vitest'; import { ApiRunFileSchema, UiRunFileSchema } from '../../lib/run-results.js'; import { buildModel } from '../build-model.js'; import { escapeHtml, renderHtml } from '../render-html.js'; const THRESHOLDS = { apiWarnMs: 1000, apiSlowMs: 3000, uiWarnMs: 3000, uiSlowMs: 8000 }; const model = buildModel({ apiFile: ApiRunFileSchema.parse({ kind: 'uat-api', meta: { runId: 'r1', application: 'administration', planPath: 'plan.yml', planSignature: {}, apiUrl: 'http://api', roles: ['admin'], startedAt: '2026-06-12T00:00:00.000Z', }, results: [ { id: 'get:x', method: 'GET', route: '/api/x', }, ], }), uiFile: null, generatedAt: 'now', thresholds: THRESHOLDS, }); const hostileHtml = renderHtml(hostileModel); expect(hostileHtml).toContain('
');
expect(hostileHtml).not.toContain('