|
|
import { describe, expect, it } from "vitest";
|
|
|
import {
|
|
|
applyMarkup,
|
|
|
applyMarkupToQuotes,
|
|
|
type RawQuoteTier,
|
|
|
} from "@/modules/pricing/engine";
|
|
|
|
|
|
const RAW_TIERS: RawQuoteTier[] = [
|
|
|
{
|
|
|
service_level: "standard",
|
|
|
rate_option: "lowest",
|
|
|
carrier: "Mothership",
|
|
|
transit_days: "5-7",
|
|
|
transit_description: "最低价格",
|
|
|
raw_freight: 320,
|
|
|
surcharges: 15,
|
|
|
raw_total: 335,
|
|
|
},
|
|
|
{
|
|
|
service_level: "standard",
|
|
|
rate_option: "fastest",
|
|
|
carrier: "Mothership",
|
|
|
transit_days: "3-4",
|
|
|
transit_description: "最快",
|
|
|
raw_freight: 365,
|
|
|
surcharges: 0,
|
|
|
raw_total: 365,
|
|
|
},
|
|
|
{
|
|
|
service_level: "guaranteed",
|
|
|
rate_option: "lowest",
|
|
|
carrier: "Mothership",
|
|
|
transit_days: "4-5",
|
|
|
transit_description: "保价最低",
|
|
|
raw_freight: 380,
|
|
|
surcharges: 0,
|
|
|
raw_total: 380,
|
|
|
},
|
|
|
{
|
|
|
service_level: "guaranteed",
|
|
|
rate_option: "fastest",
|
|
|
carrier: "Mothership",
|
|
|
transit_days: "2-3",
|
|
|
transit_description: "保价最快",
|
|
|
raw_freight: 410,
|
|
|
surcharges: 0,
|
|
|
raw_total: 410,
|
|
|
},
|
|
|
];
|
|
|
|
|
|
describe("TC-403 加价可复算(task-114)", () => {
|
|
|
it("从 DB raw_freight + markup 重算 final_total 误差 ≤0.01", () => {
|
|
|
const markupPercent = 10;
|
|
|
const marked = applyMarkupToQuotes(RAW_TIERS, markupPercent);
|
|
|
|
|
|
for (let i = 0; i < RAW_TIERS.length; i++) {
|
|
|
const raw = RAW_TIERS[i];
|
|
|
const expected = applyMarkup(
|
|
|
raw.raw_freight,
|
|
|
raw.raw_total,
|
|
|
markupPercent,
|
|
|
);
|
|
|
const actual = marked[i];
|
|
|
expect(Math.abs(actual.final_total - expected.finalTotal)).toBeLessThanOrEqual(
|
|
|
0.01,
|
|
|
);
|
|
|
expect(Math.abs(actual.markup_amount - expected.markupAmount)).toBeLessThanOrEqual(
|
|
|
0.01,
|
|
|
);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
it("TC-103 精确到分:markup_amount=32.00 final_total=367.00", () => {
|
|
|
const result = applyMarkup(320, 335, 10);
|
|
|
expect(result.markupAmount).toBe(32);
|
|
|
expect(result.finalTotal).toBe(367);
|
|
|
});
|
|
|
});
|