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.
109 lines
3.6 KiB
109 lines
3.6 KiB
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildAlertPresentation,
|
|
formatCustomerAddressForAdmin,
|
|
formatSelectedAddressForAdmin,
|
|
resolveAlertRootCause,
|
|
} from "@/modules/alert/alert-presentation";
|
|
|
|
describe("alert-presentation", () => {
|
|
it("区分客户填写地址与联想确认地址", () => {
|
|
const addr = {
|
|
street: "123 Main St",
|
|
city: "Denver",
|
|
state: "CO",
|
|
zip: "80202",
|
|
formatted_address: "123 Main St, Denver, CO",
|
|
mothership_display_label: "123 Main St, Denver, CO 80202, USA",
|
|
};
|
|
expect(formatCustomerAddressForAdmin(addr)).toBe(
|
|
"123 Main St, Denver, CO, 80202",
|
|
);
|
|
expect(formatSelectedAddressForAdmin(addr)).toBe(
|
|
"123 Main St, Denver, CO 80202, USA",
|
|
);
|
|
});
|
|
|
|
it("将 browserType.launch 转为可读根因", () => {
|
|
const cause = resolveAlertRootCause("RPA_FAILED", {
|
|
reason: "browserType.launch: Executable doesn't exist",
|
|
});
|
|
expect(cause).toContain("无法启动浏览器");
|
|
expect(cause).not.toContain("{");
|
|
});
|
|
|
|
it("优先展示 detail.message 而非 STRUCT_CHANGE 默认文案", () => {
|
|
const cause = resolveAlertRootCause("STRUCT_CHANGE", {
|
|
message: "ADDRESS_NOT_CONFIRMED: 派送地址未在 MotherShip 确认",
|
|
});
|
|
expect(cause).toContain("已选地址");
|
|
expect(cause).not.toContain("页面结构变更");
|
|
});
|
|
|
|
it("QUOTE_ENTRY_UNAVAILABLE 展示入口不可用根因", () => {
|
|
const cause = resolveAlertRootCause("RPA_FAILED", {
|
|
message: "QUOTE_ENTRY_UNAVAILABLE: 无法打开 MotherShip 报价页",
|
|
entry_error: "QUOTE_ENTRY_UNAVAILABLE",
|
|
});
|
|
expect(cause).toContain("报价页面无法打开");
|
|
});
|
|
|
|
it("locator.waitFor 超时译为中文并指出控件", () => {
|
|
const cause = resolveAlertRootCause("RPA_FAILED", {
|
|
message:
|
|
"locator.waitFor: Timeout 8000ms exceeded. Call log: - waiting for getByTestId('address-book-accessorials-option-appointment').first() to be visible",
|
|
});
|
|
expect(cause).toContain("自动化操作超时");
|
|
expect(cause).toContain("预约送货");
|
|
expect(cause).not.toMatch(/locator\.waitFor|getByTestId|Call log/i);
|
|
});
|
|
|
|
it("报价单 errorMessage 中的英文 Playwright 日志同样中文化", () => {
|
|
const cause = resolveAlertRootCause(
|
|
"RPA_FAILED",
|
|
{ message: "ignored" },
|
|
{
|
|
errorMessage:
|
|
"locator.waitFor: Timeout 8000ms exceeded. waiting for getByTestId('quote-create-pickup-input-search')",
|
|
errorCode: "RPA_DATA_INVALID",
|
|
} as never,
|
|
);
|
|
expect(cause).toContain("提货地址搜索框");
|
|
expect(cause).not.toMatch(/locator\.waitFor/i);
|
|
});
|
|
|
|
it("buildAlertPresentation 包含客户与货物字段", () => {
|
|
const presentation = buildAlertPresentation(
|
|
"RPA_FAILED",
|
|
{ reason: "test", customer_id: "CUST_001" },
|
|
{
|
|
customerId: "CUST_001",
|
|
pickupJson: {
|
|
street: "A",
|
|
city: "B",
|
|
state: "CO",
|
|
zip: "80000",
|
|
mothership_display_label: "A, B, CO",
|
|
},
|
|
deliveryJson: {
|
|
street: "C",
|
|
city: "D",
|
|
state: "MA",
|
|
zip: "02101",
|
|
mothership_display_label: "C, D, MA",
|
|
},
|
|
weightLb: 500,
|
|
palletCount: 2,
|
|
cargoType: "general_freight",
|
|
dimLIn: 48,
|
|
dimWIn: 40,
|
|
dimHIn: 48,
|
|
} as never,
|
|
);
|
|
expect(presentation.customer_id).toBe("CUST_001");
|
|
expect(presentation.pickup_customer).toContain("A");
|
|
expect(presentation.pickup_selected).toBe("A, B, CO");
|
|
expect(presentation.cargo_summary).toContain("2 托");
|
|
});
|
|
});
|