import { describe, expect, it } from "vitest";
import {
  evaluateBusinessReadyGates,
  isBusinessReady,
} from "@/workers/rpa/quote-capture/quote-business-ready";

describe("quote business ready gates", () => {
  const allOk = {
    buttonEnabled: true,
    cookieClear: true,
    cargoLocked: true,
    hydrationReady: true,
    addressesLocked: true,
    submitHitTestOk: true,
    domStable: true,
  };

  it("全部闸门通过时 ready", () => {
    const probe = evaluateBusinessReadyGates(allOk);
    expect(isBusinessReady(probe)).toBe(true);
    expect(probe.reasons).toHaveLength(0);
  });

  it("cookie 遮挡时 fail", () => {
    const probe = evaluateBusinessReadyGates({
      ...allOk,
      cookieClear: false,
      submitHitTestOk: false,
    });
    expect(isBusinessReady(probe)).toBe(false);
    expect(probe.reasons.some((r) => r.includes("Cookie"))).toBe(true);
  });

  it("cargo 未锁定时 fail", () => {
    const probe = evaluateBusinessReadyGates({
      ...allOk,
      cargoLocked: false,
    });
    expect(isBusinessReady(probe)).toBe(false);
    expect(probe.reasons.some((r) => r.includes("货物"))).toBe(true);
  });

  it("按钮 disabled 时 fail", () => {
    const probe = evaluateBusinessReadyGates({
      ...allOk,
      buttonEnabled: false,
    });
    expect(isBusinessReady(probe)).toBe(false);
    expect(probe.reasons.some((r) => r.includes("disabled"))).toBe(true);
  });

  it("地址未锁定时 fail", () => {
    const probe = evaluateBusinessReadyGates({
      ...allOk,
      addressesLocked: false,
    });
    expect(isBusinessReady(probe)).toBe(false);
    expect(probe.reasons.some((r) => r.includes("地址"))).toBe(true);
  });
});
