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.

81 lines
2.1 KiB

import { describe, expect, it } from "vitest";
import {
applyMarkupToFlockCarrierOptions,
applyMarkupToFlockFlexibilityOptions,
applyMarkupToFlockLines,
applyMarkupToFlockRateUsd,
buildFlockStoredQuotes,
parseFlockStoredQuotes,
} from "@/modules/flock/quote-storage";
import type { FlockQuoteLine } from "@/workers/rpa/flock/types";
const lines: FlockQuoteLine[] = [
{
tier: "flock_direct",
serviceLevel: "guaranteed",
rateOption: "fastest",
carrier: "Flock Freight",
label: "FlockDirect®",
totalUsd: 1000,
transitDays: "4",
transitDescription: "4 days",
},
{
tier: "standard",
serviceLevel: "standard",
rateOption: "lowest",
carrier: "Flock Freight",
label: "Standard",
totalUsd: 500,
transitDays: "3-4",
transitDescription: "3-4 days",
},
];
describe("flock quote storage", () => {
it("按百分比加价", () => {
const marked = applyMarkupToFlockLines(lines, {
type: "percent",
percent: 10,
fixedAmount: 0,
});
expect(marked[0]!.final_total_usd).toBe(1100);
expect(marked[1]!.final_total_usd).toBe(550);
});
it("档内承运商/灵活价叠加固定加价", () => {
const rule = { type: "fixed" as const, percent: 0, fixedAmount: 3 };
expect(applyMarkupToFlockRateUsd(5255.63, rule)).toBe(5258.63);
expect(
applyMarkupToFlockCarrierOptions(
[
{
carrierName: "Echo FTL",
transitDays: "3",
rateUsd: 5255.63,
label: "Echo FTL",
},
],
rule,
)[0]!.rateUsd,
).toBe(5258.63);
expect(
applyMarkupToFlockFlexibilityOptions(
[{ key: "2_day", label: "2-day", rateUsd: 1000 }],
rule,
)[0]!.rateUsd,
).toBe(1003);
});
it("序列化与解析", () => {
const stored = buildFlockStoredQuotes(
lines,
{ type: "percent", percent: 0, fixedAmount: 0 },
"FRG-TEST",
);
expect(stored.provider).toBe("flock");
expect(parseFlockStoredQuotes(stored)?.reference).toBe("FRG-TEST");
expect(parseFlockStoredQuotes({ provider: "priority1", lines: [] })).toBeNull();
});
});