36 lines · 1.2 KB
import { describe, expect, mock, test } from "bun:test";

mock.module("cloudflare:workers", () => ({
  env: {},
  waitUntil: () => undefined,
}));

const { agentReview, requireHumanForMerge, UNCONFIRMED_APPROVAL } = await import("./review-outcome");

describe("agent reviews", () => {
  test("an approval without human confirmation is stored as a comment that does not count", () => {
    const review = agentReview("approve", false, "LGTM");
    expect(review.state).toBe("commented");
    expect(review.unconfirmed).toBe(true);
    expect(review.text.startsWith(UNCONFIRMED_APPROVAL)).toBe(true);
  });

  test("a human-confirmed approval counts", () => {
    expect(agentReview("approve", true, "LGTM")).toEqual({
      state: "approved",
      text: "LGTM",
      unconfirmed: false,
    });
  });

  test("other events keep their state", () => {
    expect(agentReview("request_changes", false, "no").state).toBe("changes_requested");
    expect(agentReview("comment", false, "hm").state).toBe("commented");
  });

  test("merging refuses when no human can confirm", () => {
    expect(() => requireHumanForMerge(false)).toThrow("human");
    expect(() => requireHumanForMerge(true)).not.toThrow();
  });
});