import { describe, expect, it } from "vitest"; import { mothershipSuggestBodySchema } from "@/modules/address/validation"; import { axelSearchRowToCandidate } from "@/lib/axel/candidates"; import { buildDetailsStateFromL1 } from "@/components/mothership/mothership-logged-in-details-form"; import { buildQuoteRequestBodyFromLoggedIn } from "@/lib/frontend/mothership-logged-in-quote-body"; import type { MothershipLoggedInShipmentPayload } from "@/components/mothership/mothership-logged-in-shipment-form"; import type { MothershipAddressCandidate } from "@/lib/frontend/types"; const pickupConfirmed: MothershipAddressCandidate = { option_id: "place_pickup", display_label: "456 Oak Avenue unit 207, Fairhope, AL, USA", formatted_address: "456 Oak Avenue unit 207, Fairhope, AL, USA", street: "456 Oak Avenue unit 207", city: "Fairhope", state: "AL", zip: "36532", selectable: true, }; const deliveryConfirmed: MothershipAddressCandidate = { option_id: "place_delivery", display_label: "789 East Elm Street suite 301, Brea, CA, USA", formatted_address: "789 East Elm Street suite 301, Brea, CA, USA", street: "789 East Elm Street suite 301", city: "Brea", state: "CA", zip: "92821", selectable: true, }; const sample: MothershipLoggedInShipmentPayload = { pickupQuery: pickupConfirmed.display_label, deliveryQuery: deliveryConfirmed.display_label, pickupConfirmed, deliveryConfirmed, pickupAccessorials: ["cfs", "liftgate"], deliveryAccessorials: ["fbaAppointment"], readyDate: "2026-07-16", readyTime: "12:00 PM", timezone: "GMT+8", cargo: [ { cargoType: "pallet", quantity: 2, weightLb: 250, lengthIn: 48, widthIn: 48, heightIn: 48, }, ], }; describe("mothershipSuggestBodySchema", () => { it("query 至少 3 字符", () => { expect( mothershipSuggestBodySchema.safeParse({ customer_id: "CUST_001", query: "ab", }).success, ).toBe(false); expect( mothershipSuggestBodySchema.safeParse({ customer_id: "CUST_001", query: "456 Oak", }).success, ).toBe(true); }); }); describe("axelSearchRowToCandidate(纯 query 兜底)", () => { it("用 mainText/secondaryText 解析候选", () => { const row = axelSearchRowToCandidate( { placeId: "ChIJtest", description: "456 Oak Avenue unit 207, Fairhope, AL, USA", mainText: "456 Oak Avenue unit 207", secondaryText: "Fairhope, AL", }, { street: "456 Oak Avenue, Unit 207", city: "", state: "", zip: "" }, ); expect(row).not.toBeNull(); expect(row!.option_id).toBe("ChIJtest"); expect(row!.city).toBe("Fairhope"); expect(row!.state).toBe("AL"); }); }); describe("mothership logged-in → 真实询价映射", () => { it("二级从 confirmed candidate 预填地址", () => { const state = buildDetailsStateFromL1(sample); expect(state.pickup.address).toBe(pickupConfirmed.formatted_address); expect(state.delivery.address).toBe(deliveryConfirmed.formatted_address); expect(state.pickup.accessorials).toEqual(["cfs", "liftgate"]); expect(state.cargo[0]?.quantity).toBe("2"); expect(state.cargo[0]?.weightLb).toBe("250"); expect(state.requestDeliveryAppointment).toBe(true); }); it("buildQuoteRequestBodyFromLoggedIn 对齐截图样例", () => { const body = buildQuoteRequestBodyFromLoggedIn(sample, "CUST_001"); expect(body.customer_id).toBe("CUST_001"); expect(body.pallet_count).toBe(2); expect(body.weight).toEqual({ value: 250, unit: "lb" }); expect(body.dimensions).toEqual({ length: 48, width: 48, height: 48, unit: "in", }); expect(body.pickup_address.selected_from_mothership).toBe(true); expect(body.pickup_address.mothership_option_id).toBe("place_pickup"); expect(body.delivery_address.mothership_option_id).toBe("place_delivery"); expect(body.pickup_address.city).toBe("Fairhope"); expect(body.delivery_address.city).toBe("Brea"); expect(body.cargo_type).toBe("general_freight"); }); });