import { describe, expect, it } from "vitest";
import {
  IllegalTransitionError,
  transitionAgentRun,
  transitionAttempt,
  transitionChangeSet,
  transitionFactoryRun,
  transitionProject,
  transitionReview,
  transitionTask,
} from "@awp/domain";
describe("I1 lifecycle transitions", () => {
  it("permits specified forward/recovery transitions", () => {
    expect(transitionProject("onboarding", "active")).toBe("active");
    expect(transitionTask("review", "correction")).toBe("correction");
    expect(transitionFactoryRun("failed", "retryable")).toBe("retryable");
    expect(transitionAgentRun("waiting", "active")).toBe("active");
    expect(transitionAttempt("running", "checkpointing")).toBe("checkpointing");
    expect(transitionChangeSet("changes-requested", "candidate-ready")).toBe("candidate-ready");
    expect(transitionReview("reviewing", "submitted")).toBe("submitted");
  });
  it("keeps terminal states terminal", () => {
    expect(() => transitionTask("completed", "executing")).toThrow(IllegalTransitionError);
    expect(() => transitionChangeSet("merged", "reviewing")).toThrow(IllegalTransitionError);
    expect(() => transitionAttempt("terminal", "running")).toThrow(IllegalTransitionError);
  });
});
