import { describe, it, expect } from "vitest"; import { buildMMSendWorkOrderOperationFromLaborTicket } from "./labor-ticket-work-order-operation-send.js"; import { MMReceiveLaborTicket } from "../services/mm-api-service/types/receive-types.js"; import { MMWorkOrderOperationStatus } from "../types/erp-types.js"; const ticket = ( workOrderOperation: MMReceiveLaborTicket["workOrderOperation"] ): MMReceiveLaborTicket => new MMReceiveLaborTicket({ workOrderId: "WO-1", lot: "0", split: "0", sub: "0", sequenceNumber: "10", resourceId: "R1", workOrderOperation, } as Partial); describe("buildMMSendWorkOrderOperationFromLaborTicket", () => { it("returns null when the ticket carries neither a close-out nor WOO custom fields", () => { expect( buildMMSendWorkOrderOperationFromLaborTicket(ticket({ closedDate: null })) ).toBeNull(); }); it("marks the operation COMPLETED on close-out", () => { const send = buildMMSendWorkOrderOperationFromLaborTicket( ticket({ closedDate: "2026-03-01T10:00:00Z", status: "RELEASED" }) ); expect(send?.toRESTApiObject()).toMatchObject({ workOrderId: "WO-1", sequenceNumber: "10", closedDate: "2026-03-01T10:00:00Z", status: MMWorkOrderOperationStatus.COMPLETED, }); }); it("still marks COMPLETED when the payload carries no operation status (MM's export omits it)", () => { const send = buildMMSendWorkOrderOperationFromLaborTicket( ticket({ closedDate: "2026-03-01T10:00:00Z" }) ); expect(send?.toRESTApiObject()).toMatchObject({ closedDate: "2026-03-01T10:00:00Z", status: MMWorkOrderOperationStatus.COMPLETED, }); }); it("does not resurrect an operation MM already reports as DELETED", () => { const send = buildMMSendWorkOrderOperationFromLaborTicket( ticket({ closedDate: "2026-03-01T10:00:00Z", status: " deleted " }) ); const rest = send?.toRESTApiObject() ?? {}; expect(rest.closedDate).toBe("2026-03-01T10:00:00Z"); expect(rest).not.toHaveProperty("status"); }); });