import { describe, expect, it } from "vitest"; import { mapUpliftQueueExposureTotal, mapUpliftQueueItem, } from "@/domain/uplifts/mappers/uplift-mapper"; describe("mapUpliftQueueItem", () => { it("maps ASP.NET PascalCase payload with queue fields", () => { const result = mapUpliftQueueItem({ Id: 42, Status: "Pending", CurrentNTE: 1000, RequestedNTE: 1500, Delta: 500, VendorReason: "Scope increase", RequestedAt: "2026-01-15T10:00:00Z", RequestedByVendorName: "Acme Plumbing", RequiredTier: 2, CanDecide: true, DispatchNumber: "D-1001", PONumber: "PO-2002", VendorCompanyName: "Acme Plumbing LLC", WorkOrderId: 99, DispatchId: 7, }); expect(result).toMatchObject({ id: 42, status: "Pending", currentNTE: 1000, requestedNTE: 1500, delta: 500, vendorReason: "Scope increase", requestedAt: "2026-01-15T10:00:00Z", requestedByVendorName: "Acme Plumbing", requiredTier: 2, canDecide: true, dispatchNumber: "D-1001", poNumber: "PO-2002", vendorCompanyName: "Acme Plumbing LLC", workOrderId: 99, dispatchId: 7, }); }); it("maps camelCase payload", () => { const result = mapUpliftQueueItem({ id: "u1", status: "Approved", currentNTE: 200, requestedNTE: 250, delta: 50, dispatchNumber: "D-1", poNumber: "PO-1", vendorCompanyName: "Vendor Co", }); expect(result.id).toBe("u1"); expect(result.status).toBe("Approved"); expect(result.dispatchNumber).toBe("D-1"); }); it("maps queue display fields in PascalCase", () => { const result = mapUpliftQueueItem({ id: 1, WoNumber: "WO-9", WorkOrderSite: "Site A", WorkOrderService: "Plumbing", RequestedByName: "Pat Approver", AttachmentCount: 3, WorkOrderAutoApprovedTotal: 100, WorkOrderAdminApprovedTotal: 250, WorkOrderApprovedExposureTotal: 350, WorkOrderClosed: true, }); expect(result.woNumber).toBe("WO-9"); expect(result.site).toBe("Site A"); expect(result.serviceName).toBe("Plumbing"); expect(result.requestedByVendorName).toBe("Pat Approver"); expect(result.attachmentCount).toBe(3); expect(result.approvedOnWoAuto).toBe(100); expect(result.approvedOnWoAdmin).toBe(250); expect(result.approvedOnWoTotal).toBe(350); expect(result.workOrderClosed).toBe(true); }); it("maps queue display fields in camelCase", () => { const result = mapUpliftQueueItem({ id: 2, woNumber: "WO-10", siteCode: "S-2", trade: "HVAC", attachmentCount: 2, autoApprovedTotal: 50, adminApprovedTotal: 75, approvedOnWorkOrderTotal: 125, isWorkOrderClosed: false, }); expect(result.woNumber).toBe("WO-10"); expect(result.site).toBe("S-2"); expect(result.serviceName).toBe("HVAC"); expect(result.attachmentCount).toBe(2); expect(result.approvedOnWoAuto).toBe(50); expect(result.approvedOnWoAdmin).toBe(75); expect(result.approvedOnWoTotal).toBe(125); expect(result.workOrderClosed).toBe(false); }); it("tolerates absent optional queue fields", () => { const result = mapUpliftQueueItem({ id: 3 }); expect(result.woNumber).toBe(""); expect(result.site).toBe(""); expect(result.serviceName).toBe(""); expect(result.attachmentCount).toBeNull(); expect(result.approvedOnWoAuto).toBeNull(); expect(result.approvedOnWoAdmin).toBeNull(); expect(result.approvedOnWoTotal).toBeNull(); expect(result.workOrderClosed).toBeNull(); }); it("maps pending exposure total from the queue payload", () => { expect(mapUpliftQueueExposureTotal({ PendingExposureTotal: 1250 })).toBe(1250); expect(mapUpliftQueueExposureTotal({ pendingExposureTotal: "900" })).toBe(900); expect(mapUpliftQueueExposureTotal({})).toBeNull(); }); });