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/priority1-quote-extract-dom...

88 lines
2.6 KiB

import { describe, expect, it } from "vitest";
import {
isPickupDateAfterToday,
minPickupDateDisplay,
pickupDateValidationMessage,
} from "@/lib/priority1/pickup-date";
import { extractPriority1VisibleQuotes } from "@/workers/rpa/priority1/quote-extract";
const SAMPLE_SUMMARY = JSON.stringify({
quote_id: 42830001,
LTL_best_price_quote_carrier: "XPO",
LTL_best_price_quote_cost: "481.32",
LTL_best_price_quote_transit: 8,
LTL_second_rate_quote_carrier: "Estes",
LTL_second_rate_quote_cost: "503.68",
LTL_second_rate_quote_transit: 5,
});
describe("pickup date rules", () => {
it("requires date strictly after today", () => {
const min = minPickupDateDisplay();
expect(min).toMatch(/^\d{2}\/\d{2}\/\d{4}$/);
expect(pickupDateValidationMessage(min)).toBeNull();
expect(isPickupDateAfterToday(min)).toBe(true);
});
it("rejects today or past dates", () => {
const today = new Date();
const mm = String(today.getMonth() + 1).padStart(2, "0");
const dd = String(today.getDate()).padStart(2, "0");
const yyyy = today.getFullYear();
const todayDisplay = `${mm}/${dd}/${yyyy}`;
expect(pickupDateValidationMessage(todayDisplay)).toBe("提货日须晚于今天");
});
});
describe("parseVisibleQuoteCardsDom via extractPriority1VisibleQuotes", () => {
const sampleDom = `
YOUR INSTANT QUOTE OPTIONS
QUOTE 1
STANDARD LTL
Estes
Transit: 1 Business Days
Quote Expiration Date: 07-09-2026
Estimated Delivery Date: 07-15-2026
$426.19
QUOTE 2
STANDARD LTL
TForce Freight
Transit: 2 Business Days
Quote Expiration Date: 07-09-2026
Estimated Delivery Date: 07-16-2026
$1703.90
`;
it("无网络摘要时以可见 DOM 卡片为准", () => {
const lines = extractPriority1VisibleQuotes([], sampleDom);
expect(lines).toHaveLength(2);
expect(lines[0]!.carrier).toBe("Estes");
expect(lines[0]!.totalUsd).toBe(426.19);
expect(lines[0]!.expirationDate).toBe("07/09/2026");
expect(lines[0]!.deliveryDate).toBe("07/15/2026");
expect(lines[1]!.totalUsd).toBe(1703.9);
});
it("DOM 无承运商时从 Feathery 摘要按 QUOTE 序号补全承运商与金额", () => {
const dom = `
QUOTE 1
STANDARD LTL
Transit: 1 Business Days
Quote Expiration Date: 07-09-2026
Estimated Delivery Date: 07-15-2026
$999.99
QUOTE 2
STANDARD LTL
Transit: 2 Business Days
$888.88
`;
const lines = extractPriority1VisibleQuotes([SAMPLE_SUMMARY], dom);
expect(lines).toHaveLength(2);
expect(lines[0]!.carrier).toBe("XPO");
expect(lines[0]!.totalUsd).toBe(481.32);
expect(lines[0]!.expirationDate).toBe("07/09/2026");
expect(lines[1]!.carrier).toBe("Estes");
expect(lines[1]!.totalUsd).toBe(503.68);
});
});