import { describe, expect, it } from "vitest"; import { resolveRate, type RateLike } from "../../app/services/rates.server"; import { formatPriceLabel } from "../../app/lib/currency"; function zoneRate(overrides: Partial = {}): RateLike { return { id: "rate_1", method: "LOCAL_DELIVERY", zoneId: "zone_1", name: "Zone A", priceCents: 500, keyedBy: "zone", minDistanceKm: null, maxDistanceKm: null, ...overrides, }; } describe("resolveRate", () => { it("matches a zone-keyed rate by exact zoneId", () => { const rates = [zoneRate({ id: "a", zoneId: "zone_1" }), zoneRate({ id: "b", zoneId: "zone_2" })]; const result = resolveRate(rates, { method: "LOCAL_DELIVERY", zoneId: "zone_1" }); expect(result?.id).toBe("a"); }); it("returns null when no zone matches", () => { const rates = [zoneRate({ zoneId: "zone_1" })]; expect(resolveRate(rates, { method: "LOCAL_DELIVERY", zoneId: "zone_9" })).toBeNull(); }); it("does not match a different method", () => { const rates = [zoneRate({ method: "PICKUP", zoneId: "zone_1" })]; expect(resolveRate(rates, { method: "LOCAL_DELIVERY", zoneId: "zone_1" })).toBeNull(); }); it("matches a distance-keyed rate within its band", () => { const rates = [ zoneRate({ id: "near", keyedBy: "distance", zoneId: null, minDistanceKm: 0, maxDistanceKm: 5, priceCents: 300 }), zoneRate({ id: "far", keyedBy: "distance", zoneId: null, minDistanceKm: 5, maxDistanceKm: 15, priceCents: 700 }), ]; expect(resolveRate(rates, { method: "LOCAL_DELIVERY", distanceKm: 3 })?.id).toBe("near"); expect(resolveRate(rates, { method: "LOCAL_DELIVERY", distanceKm: 10 })?.id).toBe("far"); }); it("treats an unbounded minDistanceKm as 0 and unbounded maxDistanceKm as infinite", () => { const rates = [zoneRate({ id: "flat", keyedBy: "distance", zoneId: null, minDistanceKm: null, maxDistanceKm: null })]; expect(resolveRate(rates, { method: "LOCAL_DELIVERY", distanceKm: 999 })?.id).toBe("flat"); }); it("excludes the upper bound of a distance band (half-open interval)", () => { const rates = [ zoneRate({ id: "near", keyedBy: "distance", zoneId: null, minDistanceKm: 0, maxDistanceKm: 5 }), zoneRate({ id: "far", keyedBy: "distance", zoneId: null, minDistanceKm: 5, maxDistanceKm: 15 }), ]; expect(resolveRate(rates, { method: "LOCAL_DELIVERY", distanceKm: 5 })?.id).toBe("far"); }); it("returns the cheapest match when multiple rates overlap", () => { const rates = [ zoneRate({ id: "expensive", zoneId: "zone_1", priceCents: 900 }), zoneRate({ id: "cheap", zoneId: "zone_1", priceCents: 400 }), ]; expect(resolveRate(rates, { method: "LOCAL_DELIVERY", zoneId: "zone_1" })?.id).toBe("cheap"); }); it("returns null for an empty rate list", () => { expect(resolveRate([], { method: "LOCAL_DELIVERY", zoneId: "zone_1" })).toBeNull(); }); }); describe("formatPriceLabel", () => { it("formats cents as a dollar amount with 2 decimals", () => { expect(formatPriceLabel(500)).toBe("$5.00"); expect(formatPriceLabel(1999)).toBe("$19.99"); expect(formatPriceLabel(0)).toBe("$0.00"); }); });