You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.3 KiB

import { describe, expect, it } from "vitest";
import {
buildPriority1CanonicalTestCases,
generateRandomExpeditedCases,
generateRandomFtlCases,
generateRandomPriority1Cases,
parsePriority1DemoFromEnv,
PRIORITY1_CANONICAL_PATHS,
} from "@/workers/rpa/priority1/demo-input";
describe("priority1 demo-input", () => {
it("canonical 全矩阵 24 条", () => {
expect(PRIORITY1_CANONICAL_PATHS).toHaveLength(24);
const ltl = PRIORITY1_CANONICAL_PATHS.filter((p) => p.id.startsWith("P"));
const ftl = PRIORITY1_CANONICAL_PATHS.filter((p) => p.id.startsWith("F"));
const exp = PRIORITY1_CANONICAL_PATHS.filter((p) => p.id.startsWith("E"));
expect(ltl).toHaveLength(9);
expect(ftl).toHaveLength(11);
expect(exp).toHaveLength(4);
});
it("导出系统联调用例含 API 载荷", () => {
const cases = buildPriority1CanonicalTestCases({
customerId: "CUST_X",
requestIdPrefix: "req",
});
expect(cases).toHaveLength(24);
expect(cases[0]?.apiPayload.request_id).toBe("req-P01-ltl-residential");
expect(cases[0]?.apiPayload.customer_id).toBe("CUST_X");
expect(cases.find((c) => c.id === "E03-expedited-large")?.apiPayload.priority1_input.weightLb).toBe(
"10000",
);
});
it("相同 seed 生成相同用例", () => {
const a = generateRandomPriority1Cases(10, 42);
const b = generateRandomPriority1Cases(10, 42);
expect(a).toEqual(b);
expect(a).toHaveLength(10);
expect(a[0]?.id).toBe("P01");
});
it("起运与目的 ZIP 不相同", () => {
const cases = generateRandomPriority1Cases(10, 99);
for (const c of cases) {
expect(c.input.originZip).not.toBe(c.input.destinationZip);
expect(c.input.originZip).toMatch(/^\d{5}$/);
}
});
it("生成 FTL / Expedited 用例", () => {
const ftl = generateRandomFtlCases(3, 42);
const exp = generateRandomExpeditedCases(3, 42);
expect(ftl[0]?.input.shipmentType).toBe("ftl");
expect(exp[0]?.input.shipmentType).toBe("expedited");
expect(ftl[0]?.id).toBe("F01");
expect(exp[0]?.id).toBe("E01");
});
it("解析环境 JSON 覆盖默认字段", () => {
const demo = parsePriority1DemoFromEnv(
JSON.stringify({ originZip: "30303", weightLb: "999" }),
);
expect(demo.originZip).toBe("30303");
expect(demo.weightLb).toBe("999");
expect(demo.destinationZip).toBe("90017");
});
});