shoc-frontend-new/src/test/domain/uplifts/mappers/uplift-mapper.test.ts
2026-09-16 22:40:48 -03:00

129 lines
3.9 KiB
TypeScript

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();
});
});