/*
Unit tests for c surface guard covering its documented public contract and regression-sensitive edge cases.
- Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only.
- RFC-0520: initial unit tests for C-surface regression guard.
*/
import { test, expect } from "vitest";
import { evaluateCSurfaceGate } from "./c-surface-guard.ts";
const baseInput = {
systemId: "test-system",
missionId: "mission-001",
workspaceRoot: "/tmp/test",
};
test("surface passes → verdict: pass", () => {
const result = evaluateCSurfaceGate({
...baseInput,
surfaceValidateResult: { exitCode: 0, summary: "ok" },
rfcId: "RFC-0500",
breaksC: false,
});
expect(result.verdict).toBe("pass");
expect(result.violations).toHaveLength(0);
expect(result.metadata?.surfaceSummary).toBe("ok");
});
test("surface fails, no RFC (rfcId: null) → verdict: fail", () => {
const result = evaluateCSurfaceGate({
...baseInput,
surfaceValidateResult: { exitCode: 1, summary: "regression" },
rfcId: null,
breaksC: false,
});
expect(result.verdict).toBe("fail");
expect(result.violations).toHaveLength(1);
expect(result.violations[0]!.rule).toBe("c-surface-regression-without-breaksC");
expect(result.violations[0]!.message).toContain("(unknown)");
});
test("surface fails, RFC without breaksC → verdict: fail", () => {
const result = evaluateCSurfaceGate({
...baseInput,
surfaceValidateResult: { exitCode: 1, summary: "regression" },
rfcId: "RFC-0500",
breaksC: false,
});
expect(result.verdict).toBe("fail");
expect(result.violations).toHaveLength(1);
expect(result.violations[0]!.message).toContain("RFC-0500");
});
test("surface fails, RFC with breaksC: true → verdict: pass", () => {
const result = evaluateCSurfaceGate({
...baseInput,
surfaceValidateResult: { exitCode: 1, summary: "regression" },
rfcId: "RFC-0500",
breaksC: true,
});
expect(result.verdict).toBe("pass");
expect(result.violations).toHaveLength(0);
expect(result.summary).toContain("breaksC: true");
expect(result.metadata?.breaksC).toBe(true);
});