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/mothership-logged-in-quote....

116 lines
3.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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);
});
});