import { describe, expect, it } from "vitest"; import type { FailureKind, Variant } from "../types.js"; import { decide } from "./failure-handler.js"; const FAILURES: FailureKind[] = [ "agent-error", "tests-failed", "build-failed", "sandbox-timeout", "unknown", ]; const VARIANTS: Variant[] = ["per-ticket", "single-pr"]; describe("decide", () => { describe("first failure", () => { for (const variant of VARIANTS) { for (const failure of FAILURES) { it(`retries on first failure (variant=${variant}, kind=${failure})`, () => { const action = decide(failure, { variant, retryCount: 0 }); expect(action.kind).toBe("retry"); }); } } }); describe("after retry", () => { for (const failure of FAILURES) { it(`per-ticket variant skips after second failure (kind=${failure})`, () => { const action = decide(failure, { variant: "per-ticket", retryCount: 1, }); expect(action.kind).toBe("skip"); if (action.kind === "skip") { expect(action.reason).toContain(failure); } }); it(`single-pr variant halts after second failure (kind=${failure})`, () => { const action = decide(failure, { variant: "single-pr", retryCount: 1, }); expect(action.kind).toBe("halt"); if (action.kind === "halt") { expect(action.reason).toContain(failure); } }); } }); it("halts/skips on third+ failure too (defensive)", () => { expect( decide("unknown", { variant: "per-ticket", retryCount: 2 }).kind, ).toBe("skip"); expect(decide("unknown", { variant: "single-pr", retryCount: 5 }).kind).toBe( "halt", ); }); });