import { describe, expect, it } from "vitest";
import { resolveBootstrapMode } from "./bootstrap-mode.js";

describe("resolveBootstrapMode", () => {
  it("returns none when bootstrap is not pending", () => {
    expect(
      resolveBootstrapMode({
        bootstrapPending: false,
        runKind: "default",
        isInteractiveUserFacing: true,
        isPrimaryRun: true,
        isCanonicalWorkspace: true,
        hasBootstrapFileAccess: true,
      }),
    ).toBe("none");
  });

  it("returns full for primary interactive canonical runs with file access", () => {
    expect(
      resolveBootstrapMode({
        bootstrapPending: true,
        runKind: "default",
        isInteractiveUserFacing: true,
        isPrimaryRun: true,
        isCanonicalWorkspace: true,
        hasBootstrapFileAccess: true,
      }),
    ).toBe("full");
  });

  it("returns limited for primary interactive copied-sandbox runs with file access", () => {
    expect(
      resolveBootstrapMode({
        bootstrapPending: true,
        runKind: "default",
        isInteractiveUserFacing: true,
        isPrimaryRun: true,
        isCanonicalWorkspace: false,
        hasBootstrapFileAccess: true,
      }),
    ).toBe("limited");
  });

  it("returns none for cron, heartbeat, and non-primary runs", () => {
    expect(
      resolveBootstrapMode({
        bootstrapPending: true,
        runKind: "cron",
        isInteractiveUserFacing: true,
        isPrimaryRun: true,
        isCanonicalWorkspace: true,
        hasBootstrapFileAccess: true,
      }),
    ).toBe("none");
    expect(
      resolveBootstrapMode({
        bootstrapPending: true,
        runKind: "heartbeat",
        isInteractiveUserFacing: true,
        isPrimaryRun: true,
        isCanonicalWorkspace: true,
        hasBootstrapFileAccess: true,
      }),
    ).toBe("none");
    expect(
      resolveBootstrapMode({
        bootstrapPending: true,
        runKind: "default",
        isInteractiveUserFacing: true,
        isPrimaryRun: false,
        isCanonicalWorkspace: true,
        hasBootstrapFileAccess: true,
      }),
    ).toBe("none");
  });

  it("returns none when the run cannot access bootstrap files normally", () => {
    expect(
      resolveBootstrapMode({
        bootstrapPending: true,
        runKind: "default",
        isInteractiveUserFacing: true,
        isPrimaryRun: true,
        isCanonicalWorkspace: true,
        hasBootstrapFileAccess: false,
      }),
    ).toBe("none");
  });
});
