import { describe, expect, it } from "vitest"; import { flockFreightClassRpaLabels, flockLocationRpaLabels, flockPackagingRpaLabels, FLOCK_LOCATION_RPA_LABELS, FLOCK_PICKUP_SERVICE_RPA_LABELS, FLOCK_DELIVERY_SERVICE_RPA_LABELS, FLOCK_PICKUP_SERVICE_WEIGHT_LOCKED, } from "@/lib/flock/logged-in-rpa-options"; import { FLOCK_LOCATION_TYPES } from "@/components/flock/flock-logged-in-quote-form"; import { validateFlockQuoteInput, defaultFlockPickupDate } from "@/modules/flock/validation"; describe("flock logged-in RPA options", () => { it("Bags / Business with Dock / density 候选可匹配官网", () => { expect(flockPackagingRpaLabels("bags")).toContain("Bags"); expect(flockLocationRpaLabels("business_with_dock")[0]).toBe( "Business with Dock", ); expect(flockFreightClassRpaLabels("density")[0]).toMatch(/density/i); }); it("地点 RPA 候选与 UI 12 类型对齐且含 Military Base", () => { const uiIds = FLOCK_LOCATION_TYPES.map((t) => t.id).sort(); const rpaIds = Object.keys(FLOCK_LOCATION_RPA_LABELS).sort(); expect(rpaIds).toEqual(uiIds); expect(FLOCK_LOCATION_RPA_LABELS.limited_military[0]).toMatch( /Military Base/i, ); expect(FLOCK_LOCATION_RPA_LABELS).not.toHaveProperty("limited_grocery"); }); it("调度服务文案含 During pickup window / Must arrive by date", () => { expect(FLOCK_PICKUP_SERVICE_RPA_LABELS.during_window[0]).toMatch( /pickup window/i, ); expect(FLOCK_DELIVERY_SERVICE_RPA_LABELS.must_arrive_by[0]).toMatch( /Must arrive by date/i, ); expect(FLOCK_PICKUP_SERVICE_WEIGHT_LOCKED.during_window).toBe(true); expect(FLOCK_PICKUP_SERVICE_WEIGHT_LOCKED.standard_fcfs).toBe(false); }); }); describe("validateFlockQuoteInput logged_in_quick", () => { it("允许数量 2(小于匿名托盘下限 4)", () => { const parsed = validateFlockQuoteInput({ request_id: "11111111-1111-4111-8111-111111111111", customer_id: "CUST_001", flock_input: { form_mode: "logged_in_quick", pickup_date: defaultFlockPickupDate(), pickup_zip: "90248", delivery_zip: "15222", pallet_count: 2, total_weight: { value: 500, unit: "lb" }, dimensions: { length: 48, width: 40, height: 48, unit: "in" }, packaging_type: "bags", freight_class: "density", description: "papers", stackable: true, pickup_location_type: "business_with_dock", delivery_location_type: "business_with_dock", }, }); expect(parsed.formMode).toBe("logged_in_quick"); expect(parsed.palletCount).toBe(2); expect(parsed.packagingType).toBe("bags"); expect(parsed.description).toBe("papers"); expect(parsed.stackable).toBe(true); }); });