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__/lib/mothership/portal-quote-messages.test.ts

136 lines
5.4 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 {
extractMothershipPortalMessagesFromAlerts,
extractMothershipPortalQuoteMessages,
formatMothershipPortalQuoteMessage,
isPortalHardBusinessBlock,
isPortalNeedsDetailsMessage,
looksLikePortalBusinessAlert,
translatePortalMessageToZh,
} from "@/lib/mothership/portal-quote-messages";
describe("portal-quote-messages", () => {
it("合并 No rates + required fields", () => {
const body =
"Nicotine/Tobacco\nNo rates found\nPlease review all required fields to proceed.";
const msgs = extractMothershipPortalQuoteMessages(body);
expect(msgs).toContain(
"No rates found\nPlease review all required fields to proceed",
);
});
it("必填提示判为 NEEDS_DETAILS,不按硬拒价", () => {
const zh = translatePortalMessageToZh(
"No rates found\nPlease review all required fields to proceed",
);
expect(isPortalNeedsDetailsMessage(zh)).toBe(true);
expect(isPortalHardBusinessBlock(zh)).toBe(false);
expect(isPortalNeedsDetailsMessage("Please review all required fields")).toBe(
true,
);
});
it("lane 无价 toast 判为硬拒价", () => {
const zh = translatePortalMessageToZh(
"Unfortunately we were unable to find any rates for this lane and freight details.",
);
expect(isPortalHardBusinessBlock(zh)).toBe(true);
expect(isPortalNeedsDetailsMessage(zh)).toBe(false);
});
it("同时出现 lane 无价与 required fields → 硬拒,禁止引导补二级", () => {
const body =
"No rates found\nPlease review all required fields to proceed.\nUnfortunately we were unable to find any rates for this lane and freight details. Please check your shipment details and try again.";
const msgs = extractMothershipPortalQuoteMessages(body);
expect(
msgs.some((m) => /unable to find any rates for this lane/i.test(m)),
).toBe(true);
expect(
msgs.some((m) => /please review all required fields/i.test(m)),
).toBe(false);
const zh = formatMothershipPortalQuoteMessage(msgs)!;
expect(zh).toMatch(/该线路与货物|暂无可用报价/);
expect(isPortalHardBusinessBlock(zh)).toBe(true);
expect(isPortalNeedsDetailsMessage(zh)).toBe(false);
});
it("提取附加服务/住宅取件阻断(中文)", () => {
const body =
"不支持附加服务,我们的承运合作伙伴不提供住宅地址上门取件服务";
const msgs = extractMothershipPortalQuoteMessages(body);
expect(msgs.some((m) => m.includes("不支持附加服务"))).toBe(true);
});
it("提取 carrier partner residential pickup(英文)", () => {
const body =
"Unsupported accessorial. Our carrier partners do not provide residential pickup at this location.";
const msgs = extractMothershipPortalQuoteMessages(body);
expect(
msgs.some((m) => /carrier partners? do not provide/i.test(m)),
).toBe(true);
});
it("提取线路红色 toast:unable to find any rates for this lane", () => {
const body =
"No rates found\nPlease review all required fields to proceed.\nUnfortunately we were unable to find any rates for this lane and freight details. Please check your shipment details and try again.";
const msgs = extractMothershipPortalQuoteMessages(body);
expect(
msgs.some((m) => /unable to find any rates for this lane/i.test(m)),
).toBe(true);
const zh = formatMothershipPortalQuoteMessage(msgs)!;
expect(zh).toMatch(/该线路与货物|暂无可用报价/);
// 不得再附带「请填必填」以免前端走 NEEDS_DETAILS
expect(zh).not.toMatch(/必填/);
});
it("提取线路/地址类红色报错", () => {
const body =
"Unable to obtain a quote for this lane. Address is outside our service area.";
const msgs = extractMothershipPortalQuoteMessages(body);
expect(msgs.length).toBeGreaterThan(0);
const zh = formatMothershipPortalQuoteMessage(msgs)!;
expect(zh).toMatch(/报价|服务范围/);
});
it("Freight ready before operation hours → 中文", () => {
expect(
translatePortalMessageToZh(
"Freight ready time is before pickup location operation hours",
),
).toMatch(/就绪时刻不能早于提货点开门时间/);
});
it("format 将英文官网提示译为中文", () => {
const out = formatMothershipPortalQuoteMessage([
"No rates found",
"Unsupported accessorial",
]);
expect(out).toBe("未找到可用报价\n\n不支持该附加服务");
});
it("format 保留中文官网提示", () => {
const out = formatMothershipPortalQuoteMessage([
"不支持附加服务,承运合作伙伴不提供住宅地址上门取件",
]);
expect(out).toContain("不支持附加服务");
});
it("未知英文仍带回承运商提示前缀", () => {
const zh = translatePortalMessageToZh(
"Something unexpected blocked quoting XYZ",
);
expect(zh.startsWith("承运商提示:")).toBe(true);
expect(zh).toContain("Something unexpected");
});
it("DOM alert 片段可提取业务红字", () => {
const msgs = extractMothershipPortalMessagesFromAlerts([
"Got it",
"该线路暂无可用运力,请更换地址后重试",
]);
expect(msgs.some((m) => m.includes("该线路"))).toBe(true);
expect(looksLikePortalBusinessAlert("该线路暂无可用运力")).toBe(true);
expect(looksLikePortalBusinessAlert("Got it")).toBe(false);
});
});