Files
fusion/packages/engine/src/__tests__/workflow-step-verdict-parsing.test.ts
Fusion 09ad2b4edf feat(FN-4367): finalize structured workflow verdict contract
Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:15:47 -07:00

35 lines
1.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { inferWorkflowStepVerdictFromProse, parseWorkflowStepVerdict } from "../executor.js";
describe("parseWorkflowStepVerdict", () => {
it("parses plain JSON", () => {
expect(parseWorkflowStepVerdict('{"verdict":"APPROVE","notes":"ok"}')).toEqual({ verdict: "APPROVE", notes: "ok" });
});
it("parses fenced JSON", () => {
expect(parseWorkflowStepVerdict('```json\n{"verdict":"REVISE","notes":"fix"}\n```')).toEqual({ verdict: "REVISE", notes: "fix" });
});
it("defaults missing notes to empty string", () => {
expect(parseWorkflowStepVerdict('{"verdict":"APPROVE_WITH_NOTES"}')).toEqual({ verdict: "APPROVE_WITH_NOTES", notes: "" });
});
it("returns null for invalid verdict", () => {
expect(parseWorkflowStepVerdict('{"verdict":"PASS"}')).toBeNull();
});
});
describe("inferWorkflowStepVerdictFromProse", () => {
it("infers revise from REQUEST REVISION", () => {
expect(inferWorkflowStepVerdictFromProse("REQUEST REVISION\nplease change")).toEqual({ verdict: "REVISE", notes: "please change" });
});
it("infers approve from positive prose", () => {
expect(inferWorkflowStepVerdictFromProse("looks good")).toEqual({ verdict: "APPROVE", notes: "" });
});
it("returns null for unrelated prose", () => {
expect(inferWorkflowStepVerdictFromProse("lorem ipsum")).toBeNull();
});
});