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.

81 lines
2.6 KiB

import { describe, expect, it } from "vitest";
import { buildFlockQuotesApiRequest } from "@/lib/flock/quote-payload";
import { mapFlockFulfillmentOptionsToLines } from "@/lib/flock/map-fulfillment-options";
import type { FlockQuoteInput } from "@/workers/rpa/flock/types";
const sampleInput: FlockQuoteInput = {
pickupDate: "07/15/2026",
pickupZip: "90001",
deliveryZip: "75201",
palletCount: 6,
totalWeightLb: 10_000,
lengthIn: 48,
widthIn: 40,
heightIn: 48,
};
describe("buildFlockQuotesApiRequest", () => {
it("对齐抓包契约字段", () => {
const body = buildFlockQuotesApiRequest(sampleInput);
expect(body.shipment.pickupDate).toBe("2026-07-15");
expect(body.shipment.originPostalCode).toBe("90001");
expect(body.shipment.destinationPostalCode).toBe("75201");
expect(body.shipment.items[0]).toMatchObject({
quantity: 6,
weightLbs: 10000,
lengthIn: 48,
freightClass: "CLASS_60",
packagingType: "PALLET_OTHER",
});
expect(body.isEdiRequote).toBe(false);
});
});
describe("mapFlockFulfillmentOptionsToLines", () => {
it("映射 GUARANTEED_HUBLESS 与 STANDARD 最低价", () => {
const { quotes, reference } = mapFlockFulfillmentOptionsToLines({
referenceNumber: "FFW-TEST",
fulfillmentOptions: [
{
fulfillmentCategory: "STANDARD",
rateUsd: "1512.67",
transitTimeDaysMin: 3,
transitTimeDaysMax: 7,
carrierName: "A",
},
{
fulfillmentCategory: "STANDARD",
rateUsd: "1410.09",
transitTimeDaysMin: 3,
transitTimeDaysMax: 5,
carrierName: "Roadrunner",
},
{
fulfillmentCategory: "GUARANTEED_HUBLESS",
rateUsd: "2091.00",
transitTimeDaysMin: 4,
transitTimeDaysMax: 4,
transitSupportedOnWeekendsAndHolidays: true,
carrierName: "Flock Freight Estimate",
},
{
fulfillmentCategory: "GUARANTEED_HUBLESS",
rateUsd: "1970.00",
transitTimeDaysMin: 4,
transitTimeDaysMax: 4,
transitSupportedOnWeekendsAndHolidays: true,
carrierName: "Flock Freight Estimate",
},
],
});
expect(reference).toBe("FFW-TEST");
expect(quotes).toHaveLength(2);
const direct = quotes.find((q) => q.tier === "flock_direct");
const standard = quotes.find((q) => q.tier === "standard");
expect(direct?.totalUsd).toBe(1970);
expect(direct?.label).toBe("FlockDirect®");
expect(standard?.totalUsd).toBe(1410.09);
expect(standard?.transitDays).toBe("3-5");
});
});