Files
openclaw/extensions/qa-lab/src/coverage-report.test.ts
Vincent Koc 7f05be041e fix(diagnostics): harden observability exports and smokes (#85371)
* test(diagnostics): widen observability smokes

* fix(diagnostics): sanitize observability exports

* docs(diagnostics): format otel export docs
2026-05-23 15:27:43 +08:00

71 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildQaCoverageInventory, renderQaCoverageMarkdownReport } from "./coverage-report.js";
import { readQaScenarioPack } from "./scenario-catalog.js";
describe("qa coverage report", () => {
it("groups scenario coverage metadata by theme and surface", () => {
const inventory = buildQaCoverageInventory(readQaScenarioPack().scenarios);
expect(inventory.scenarioCount).toBeGreaterThan(0);
expect(inventory.coverageIdCount).toBeGreaterThan(0);
expect(inventory.primaryCoverageIdCount).toBeGreaterThan(0);
expect(inventory.secondaryCoverageIdCount).toBeGreaterThan(0);
expect(inventory.overlappingCoverage.length).toBeGreaterThan(0);
expect(inventory.missingCoverage).toStrictEqual([]);
expect(inventory.liveTransportLanes.map((lane) => lane.transportId)).toEqual([
"discord",
"slack",
"telegram",
"whatsapp",
]);
expect(inventory.scenarioPacks.map((pack) => pack.id)).toEqual([
"observability",
"personal-agent",
]);
const personalPack = inventory.scenarioPacks.find((pack) => pack.id === "personal-agent");
const observabilityPack = inventory.scenarioPacks.find((pack) => pack.id === "observability");
expect(personalPack?.missingScenarioIds).toStrictEqual([]);
expect(personalPack?.scenarioIds).toContain(
"personal-share-safe-diagnostics-artifact",
);
expect(personalPack?.coverageIds).toContain("personal.redaction");
expect(personalPack?.coverageIds).toContain("qa.artifact-safety");
expect(observabilityPack?.missingScenarioIds).toStrictEqual([]);
expect(observabilityPack?.scenarioIds).toEqual([
"otel-trace-smoke",
"docker-prometheus-smoke",
]);
expect(observabilityPack?.coverageIds).toContain("telemetry.otel");
expect(observabilityPack?.coverageIds).toContain("telemetry.prometheus");
expect(inventory.byTheme.memory.map((feature) => feature.id)).toContain("memory.recall");
expect(inventory.bySurface.memory.map((feature) => feature.id)).toContain("memory.recall");
});
it("renders a compact markdown inventory", () => {
const report = renderQaCoverageMarkdownReport(
buildQaCoverageInventory(readQaScenarioPack().scenarios),
);
expect(report).toContain("# QA Coverage Inventory");
expect(report).toContain("- Missing coverage metadata: 0");
expect(report).toContain("- Overlapping coverage IDs:");
expect(report).toContain("memory.recall");
expect(report).toContain("primary: memory-recall (qa/scenarios/memory/memory-recall.md)");
expect(report).toContain("secondary: active-memory-preprompt-recall");
expect(report).toContain("## Scenario Packs");
expect(report).toContain(
"- personal-agent (Personal Agent Benchmark Pack): 10 scenarios; coverage:",
);
expect(report).toContain(
"- observability (Observability Smoke Pack): 2 scenarios; coverage:",
);
expect(report).toContain("otel-trace-smoke, docker-prometheus-smoke");
expect(report).toContain("personal-share-safe-diagnostics-artifact");
expect(report).toContain("## Live Transport Lanes");
expect(report).toContain(
"- telegram (telegram): canary: always-on, help-command: telegram-help-command, mention-gating: telegram-mention-gating; missing baseline: allowlist-block, top-level-reply-shape, restart-resume",
);
expect(report).toContain("thread-follow-up: slack-thread-follow-up");
});
});