From 854267e213084746a91de0765af3f18d440409e1 Mon Sep 17 00:00:00 2001 From: Arthur Bassi Date: Wed, 19 Aug 2026 15:16:23 -0300 Subject: [PATCH] test(work-orders): keep Verified and Completed as live company assignment (SH-183) Cancelled/Canceled/Refused stay inactive; verified or completed dispatches still gate Complete on the vendor that did the work. --- .../work-orders/utils/wo-closability.test.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/domain/work-orders/utils/wo-closability.test.ts b/src/test/domain/work-orders/utils/wo-closability.test.ts index c50b27fb..45182f08 100644 --- a/src/test/domain/work-orders/utils/wo-closability.test.ts +++ b/src/test/domain/work-orders/utils/wo-closability.test.ts @@ -349,6 +349,29 @@ describe("detailToClosabilityInput", () => { }, ); + it.each(["Verified", "Completed", "Sent"])( + "treats dispatch status %s as a live company assignment (SH-183)", + (status) => { + const liveAssignment = { + assignedTo: "Alice", + completedDate: "2026-07-15", + workOrderNumber: "20260623001", + internalWONumber: "SH-1", + problem: "HVAC PM", + source: "procurement-integration", + type: "", + docStatus: "", + mediaCount: 0, + dispatches: [{ vendorName: "ACME Tech", vendorId: 45, status }], + } as WorkOrderDetail; + + const input = detailToClosabilityInput(liveAssignment); + expect(input.company).toBe("ACME Tech"); + expect(input.vendorId).toBe("45"); + expect(getClosabilityGaps(input)).toEqual([]); + }, + ); + it("uses the active dispatch after an inactive cancelled spelling (SH-183)", () => { const supersededThenCurrent = { assignedTo: "Alice",