mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-09-30 05:43:12 +00:00
129 lines
3.9 KiB
TypeScript
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();
|
|
});
|
|
});
|