import { describe, expect, it } from "vitest"; import { evaluateCartAttributes } from "../../extensions/validation-slot/src/evaluate.js"; const COMPLETE = { dd_method: "PICKUP", dd_date: "2026-08-25", dd_start_min: "540", dd_end_min: "600", dd_location_id: "loc_123", }; describe("evaluateCartAttributes", () => { it("is valid when every required attribute is present", () => { expect(evaluateCartAttributes(COMPLETE)).toEqual({ valid: true }); }); it("rejects a cart with no scheduling attributes at all", () => { const result = evaluateCartAttributes({}); expect(result).toMatchObject({ valid: false, reason: "no_slot_selected" }); }); it("rejects a cart missing just one required attribute", () => { const { dd_start_min, ...rest } = COMPLETE; const result = evaluateCartAttributes(rest); expect(result).toMatchObject({ valid: false, reason: "incomplete_slot_selection", missing: ["dd_start_min"] }); }); it("treats an empty-string attribute the same as missing", () => { const result = evaluateCartAttributes({ ...COMPLETE, dd_date: "" }); expect(result.valid).toBe(false); }); it("treats null/undefined attribute values as missing", () => { const result = evaluateCartAttributes({ ...COMPLETE, dd_location_id: null, dd_method: undefined }); expect(result.valid).toBe(false); if (result.valid) throw new Error("unreachable"); expect(result.reason).toBe("incomplete_slot_selection"); expect([...result.missing].sort()).toEqual(["dd_location_id", "dd_method"]); }); });