import { beforeEach, describe, expect, it } from "vitest"; import { validateProbeItems } from "@/lib/rpa/probe-validation"; import { executeProbeQuote } from "@/lib/rpa/run-probe"; import type { QuoteItem } from "@/modules/providers/quote-provider"; function fourTiers(): QuoteItem[] { return [ { serviceLevel: "standard", rateOption: "lowest", carrier: "M", transitDays: "5", transitDescription: "最低", rawFreight: 320, surcharges: 0, rawTotal: 320, }, { serviceLevel: "standard", rateOption: "fastest", carrier: "M", transitDays: "3", transitDescription: "最快", rawFreight: 365, surcharges: 0, rawTotal: 365, }, { serviceLevel: "guaranteed", rateOption: "lowest", carrier: "M", transitDays: "4", transitDescription: "保价最低", rawFreight: 380, surcharges: 0, rawTotal: 380, }, { serviceLevel: "guaranteed", rateOption: "fastest", carrier: "M", transitDays: "2", transitDescription: "保价最快", rawFreight: 410, surcharges: 0, rawTotal: 410, }, ]; } describe("TC-601 probe 校验(task-133)", () => { it("validateProbeItems:4 档通过", () => { expect(validateProbeItems(fourTiers())).toEqual({ ok: true }); }); it("validateProbeItems:仅 2 档 lowest → 通过(fastest 复用)", () => { const twoLowest = [ fourTiers()[0], fourTiers()[2], ]; expect(validateProbeItems(twoLowest)).toEqual({ ok: true }); }); it("validateProbeItems:仅 1 档 → 失败", () => { const result = validateProbeItems([fourTiers()[0]]); expect(result.ok).toBe(false); }); it("mock 模式 executeProbeQuote → items.length===4", async () => { process.env.RPA_MOCK_MODE = "true"; const result = await executeProbeQuote(); expect(result.items).toHaveLength(4); expect(validateProbeItems(result.items)).toEqual({ ok: true }); result.items.forEach((item) => { expect(item.rawFreight).toBeGreaterThan(0); expect(item.transitDescription).toBeTruthy(); }); }); }); describe("probe 3/3 模拟(task-133)", () => { beforeEach(() => { process.env.RPA_MOCK_MODE = "true"; }); it("连续 3 次 mock probe 均四档齐全", async () => { for (let i = 0; i < 3; i++) { const result = await executeProbeQuote(); expect(result.items.length).toBe(4); expect(validateProbeItems(result.items).ok).toBe(true); } }); });