|
|
import { describe, expect, it } from "vitest";
|
|
|
import {
|
|
|
buildLoggedInAddressSearchQuery,
|
|
|
formatLoggedInReadyGridCell,
|
|
|
MOTHERSHIP_CREATE_SHIPMENT_URL,
|
|
|
parseLoggedInRateCardText,
|
|
|
} from "@/workers/rpa/mothership-logged-in-quote";
|
|
|
import { filterQuotesForMotherShipUiDisplay } from "@/lib/constants/mothership-ui-tiers";
|
|
|
import { validateQuoteSchema } from "@/workers/rpa/quote-capture/quote-schema-validator";
|
|
|
|
|
|
describe("MOTHERSHIP_CREATE_SHIPMENT_URL", () => {
|
|
|
it("登录态一级表单直达 /ship(避免菜单文案超时)", () => {
|
|
|
expect(MOTHERSHIP_CREATE_SHIPMENT_URL).toBe(
|
|
|
"https://dashboard.mothership.com/ship",
|
|
|
);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe("parseLoggedInRateCardText", () => {
|
|
|
it("解析 ABF Direct 卡片文本", () => {
|
|
|
const item = parseLoggedInRateCardText(
|
|
|
"Selected ABF Direct $835.61 Estimated 5 business days",
|
|
|
);
|
|
|
expect(item?.carrier).toBe("ABF Direct");
|
|
|
expect(item?.rawTotal).toBe(835.61);
|
|
|
expect(item?.transitDays).toBe("5");
|
|
|
expect(item?.serviceLevel).toBe("standard");
|
|
|
});
|
|
|
|
|
|
it("解析 XPO Direct", () => {
|
|
|
const item = parseLoggedInRateCardText(
|
|
|
"XPO Direct $1,015.28 Estimated 4 business days",
|
|
|
);
|
|
|
expect(item?.carrier).toBe("XPO Direct");
|
|
|
expect(item?.rawTotal).toBe(1015.28);
|
|
|
});
|
|
|
|
|
|
it("解析区间时效 5-7 business days", () => {
|
|
|
const item = parseLoggedInRateCardText(
|
|
|
"SAIA Direct $900.00 5-7 business days",
|
|
|
);
|
|
|
expect(item?.transitDays).toBe("5-7");
|
|
|
});
|
|
|
|
|
|
it("无时效文案时用待确认,且通过 schema 校验(避免 standard/bestValue 时效为空)", () => {
|
|
|
const item = parseLoggedInRateCardText("Daylight Direct $733.98");
|
|
|
expect(item?.transitDays).toBe("待确认");
|
|
|
expect(item?.rateOption).toBe("bestValue");
|
|
|
expect(validateQuoteSchema([item!])).toHaveLength(1);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe("formatLoggedInReadyGridCell", () => {
|
|
|
it("ISO 日期转为 gridcell 名", () => {
|
|
|
expect(formatLoggedInReadyGridCell("2026-07-16")).toBe("Thu Jul 16");
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe("buildLoggedInAddressSearchQuery", () => {
|
|
|
it("优先用 street/city/state/zip,避开 Places description 的 floor/suite", () => {
|
|
|
const q = buildLoggedInAddressSearchQuery({
|
|
|
street: "2020 West Washington Boulevard",
|
|
|
city: "Los Angeles",
|
|
|
state: "CA",
|
|
|
zip: "",
|
|
|
placeId: "ChIJ-test",
|
|
|
formattedAddress:
|
|
|
"2020 West Washington Boulevard floor 5 rm 508, Los Angeles, CA, USA",
|
|
|
selectedFromSuggestions: true,
|
|
|
mothershipOptionId: "ChIJ-test",
|
|
|
mothershipDisplayLabel:
|
|
|
"2020 West Washington Boulevard floor 5 rm 508, Los Angeles, CA, USA",
|
|
|
selectedFromMothership: true,
|
|
|
});
|
|
|
expect(q).toBe("2020 West Washington Boulevard, Los Angeles, CA");
|
|
|
expect(q).not.toMatch(/floor|rm 508/i);
|
|
|
});
|
|
|
|
|
|
it("ste/suite 也会从 street 剥离", () => {
|
|
|
const q = buildLoggedInAddressSearchQuery({
|
|
|
street: "555 Market St ste 1001",
|
|
|
city: "San Francisco",
|
|
|
state: "CA",
|
|
|
zip: "94105",
|
|
|
placeId: "ChIJ-sf",
|
|
|
formattedAddress: "555 Market St ste 1001, San Francisco, CA, USA",
|
|
|
selectedFromSuggestions: true,
|
|
|
mothershipOptionId: "ChIJ-sf",
|
|
|
mothershipDisplayLabel: "555 Market St ste 1001, San Francisco, CA, USA",
|
|
|
selectedFromMothership: true,
|
|
|
});
|
|
|
expect(q).toBe("555 Market St, San Francisco, CA, 94105");
|
|
|
expect(q).not.toMatch(/ste|1001/i);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe("filterQuotesForMotherShipUiDisplay 多承运商", () => {
|
|
|
it("同档不同承运商均保留", () => {
|
|
|
const ui = filterQuotesForMotherShipUiDisplay([
|
|
|
{
|
|
|
service_level: "standard",
|
|
|
rate_option: "bestValue",
|
|
|
carrier: "ABF Direct",
|
|
|
raw: 835,
|
|
|
},
|
|
|
{
|
|
|
service_level: "standard",
|
|
|
rate_option: "bestValue",
|
|
|
carrier: "XPO Direct",
|
|
|
raw: 1015,
|
|
|
},
|
|
|
]);
|
|
|
expect(ui).toHaveLength(2);
|
|
|
});
|
|
|
});
|