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.
56 lines
1.8 KiB
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);
|
|
});
|
|
});
|