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 {
|
|
extractFlockPendingReference,
|
|
formatFlockRatesPendingMessage,
|
|
isFlockRatesPendingText,
|
|
parseFlockMoney,
|
|
parseFlockTransit,
|
|
} from "@/workers/rpa/flock/quote-extract";
|
|
import { isFlockNonRetryableFailure } from "@/lib/flock/exclusive-lock";
|
|
|
|
describe("parseFlockMoney", () => {
|
|
it("解析 Prices from 文案", () => {
|
|
expect(parseFlockMoney("Prices from$1,925Transit(incl. weekends)4 days")).toBe(
|
|
1925,
|
|
);
|
|
expect(parseFlockMoney("Prices from $1,187")).toBe(1187);
|
|
});
|
|
});
|
|
|
|
describe("parseFlockTransit", () => {
|
|
it("解析含周末时效", () => {
|
|
const r = parseFlockTransit(
|
|
"Prices from$1,925Transit(incl. weekends)4 daysGuaranteed",
|
|
);
|
|
expect(r.transitDays).toBe("4");
|
|
});
|
|
|
|
it("解析工作日预估", () => {
|
|
const r = parseFlockTransit(
|
|
"Prices from$1,187Transit(business days only)Contact Rep",
|
|
);
|
|
expect(r.transitDescription).toMatch(/business days only|工作日/);
|
|
});
|
|
});
|
|
|
|
describe("Flock rates pending 页", () => {
|
|
const sample =
|
|
"#NCC-ZHZ4 pricing options\nExpires Jul 17, 2026\nHold tight, we are still looking for the best rates!\nWe should have a rate for you in about 15 minutes.";
|
|
|
|
it("识别 Hold tight 待价文案", () => {
|
|
expect(isFlockRatesPendingText(sample)).toBe(true);
|
|
expect(isFlockRatesPendingText("Prices from $100")).toBe(false);
|
|
});
|
|
|
|
it("从标题抽取参考编号", () => {
|
|
expect(extractFlockPendingReference(sample)).toBe("NCC-ZHZ4");
|
|
});
|
|
|
|
it("待价结果禁止 BullMQ 重跑", () => {
|
|
const msg = formatFlockRatesPendingMessage("NCC-ZHZ4");
|
|
expect(msg).toMatch(/FLOCK_RATES_PENDING/);
|
|
expect(msg).toContain("NCC-ZHZ4");
|
|
expect(isFlockNonRetryableFailure(msg)).toBe(true);
|
|
});
|
|
});
|