import { describe, expect, it } from "vitest"; import { buildDriverKanbanColumns, filterDriverDeliveries, getDeliveryCity, getDeliveryHalfDay, groupDriverDeliveriesByDate, reorderDriverDeliveries, } from "./driverDeliveries"; const driverOrders = [ { id: "d-1", status: "Назначен водитель", scheduledDelivery: "2026-03-14T08:30:00Z", driverRouteOrder: 2, customer: { address: "Симферополь, ул. Тургенева, 18", }, deliverySlots: [ { date: "2026-03-14", time: "Первая половина дня", }, ], }, { id: "d-2", status: "В пути", scheduledDelivery: "2026-03-14T13:00:00Z", driverRouteOrder: 1, customer: { address: "Симферополь, ул. Крылова, 4", }, deliverySlots: [ { date: "2026-03-14", time: "Вторая половина дня", }, ], }, { id: "d-3", status: "Доставлен", scheduledDelivery: "2026-03-15T09:00:00Z", driverRouteOrder: 1, customer: { address: "Ялта, ул. Московская, 14", }, deliverySlots: [ { date: "2026-03-15", time: "Первая половина дня", }, ], }, ]; describe("driverDeliveries helpers", () => { it("extracts city from delivery address", () => { expect(getDeliveryCity(driverOrders[0])).toBe("Симферополь"); }); it("derives half-day from delivery slot", () => { expect(getDeliveryHalfDay(driverOrders[1])).toBe("Вторая половина дня"); }); it("filters deliveries by date range, city, half-day and view mode", () => { const filtered = filterDriverDeliveries(driverOrders, { dateFrom: "2026-03-14", dateTo: "2026-03-14", city: "Симферополь", timeSlot: "all", viewMode: "active", showCompleted: false, }); expect(filtered.map((order) => order.id)).toEqual(["d-1", "d-2"]); }); it("can include completed deliveries back into the main list", () => { const filtered = filterDriverDeliveries(driverOrders, { dateFrom: "", dateTo: "", city: "all", timeSlot: "all", viewMode: "active", showCompleted: true, }); expect(filtered.map((order) => order.id)).toEqual(["d-1", "d-2", "d-3"]); }); it("groups deliveries by day and sorts them by route order", () => { const grouped = groupDriverDeliveriesByDate(driverOrders); expect(grouped).toHaveLength(2); expect(grouped[0].date).toBe("2026-03-14"); expect(grouped[0].items.map((order) => order.id)).toEqual(["d-2", "d-1"]); }); it("reorders deliveries and rewrites route positions", () => { const reordered = reorderDriverDeliveries(driverOrders, ["d-1", "d-2"]); const first = reordered.find((order) => order.id === "d-1"); const second = reordered.find((order) => order.id === "d-2"); expect(first.driverRouteOrder).toBe(1); expect(second.driverRouteOrder).toBe(2); }); it("builds driver kanban columns from filtered deliveries", () => { const columns = buildDriverKanbanColumns(driverOrders); expect(columns.map((column) => column.key)).toEqual([ "assigned", "loaded", "on_route", "delivered", "problem", ]); expect(columns[0].items.map((order) => order.id)).toEqual(["d-1"]); expect(columns[2].items.map((order) => order.id)).toEqual(["d-2"]); expect(columns[3].items.map((order) => order.id)).toEqual(["d-3"]); }); });