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.
chajia/__tests__/workers/rpa/widget-truck-tab-quotes.tes...

56 lines
1.8 KiB

import { describe, expect, it } from "vitest";
import {
formatWidgetQuoteTierLabel,
mergeWidgetTabQuotePrice,
} from "@/workers/rpa/quote-capture/widget-truck-tab-quotes";
import { validateQuoteSchema } from "@/workers/rpa/quote-capture/quote-schema-validator";
import type { QuoteItem } from "@/modules/providers/quote-provider";
function item(serviceLevel: string, rateOption: string, rawTotal: number): QuoteItem {
return {
serviceLevel,
rateOption,
carrier: "Mothership",
transitDays: "—",
transitDescription: "—",
rawFreight: rawTotal,
surcharges: 0,
rawTotal,
};
}
describe("formatWidgetQuoteTierLabel", () => {
it("Shared truck · Best value 文案", () => {
expect(formatWidgetQuoteTierLabel(item("standard", "bestValue", 81.71))).toBe(
"standard/bestValue (Shared truck · Best value)",
);
});
it("Dedicated truck 文案", () => {
expect(formatWidgetQuoteTierLabel(item("dedicated", "bestValue", 246.11))).toBe(
"dedicated/bestValue (Dedicated truck)",
);
});
});
describe("mergeWidgetTabQuotePrice", () => {
it("Tab 价覆盖金额但保留 axel 时效", () => {
const axel: QuoteItem = {
...item("standard", "bestValue", 80),
transitDays: "3 business days",
transitDescription: "3 个工作日",
carrier: "Mothership Carrier",
};
const tab = item("standard", "bestValue", 81.71);
const merged = mergeWidgetTabQuotePrice(axel, tab);
const dedicated = mergeWidgetTabQuotePrice(
undefined,
item("dedicated", "bestValue", 246.11),
);
expect(merged.rawTotal).toBe(81.71);
expect(merged.transitDays).toBe("3 business days");
expect(dedicated.transitDays).toBe("待确认");
expect(validateQuoteSchema([merged, dedicated])).toHaveLength(2);
});
});