test(work-orders): align table mutations test with updateCompletedDate

Assert updateCompletedDate instead of getById before EditWorkorder.
This commit is contained in:
Arthur Bassi 2026-07-31 09:58:34 -03:00
parent 96f3daf20c
commit 27c7c8df55

View file

@ -2,17 +2,19 @@ import type { ReactNode } from "react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { act, renderHook, waitFor } from "@testing-library/react"; import { act, renderHook, waitFor } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest"; import { beforeEach, describe, expect, it, vi } from "vitest";
import type { WorkOrderDetail, WorkOrderFormValues } from "@/domain/work-orders/types/work-order"; import type { WorkOrderDetail } from "@/domain/work-orders/types/work-order";
import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row"; import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row";
const getById = vi.fn(); const getById = vi.fn();
const update = vi.fn(); const update = vi.fn();
const updateCompletedDate = vi.fn();
const patchBoardField = vi.fn(); const patchBoardField = vi.fn();
vi.mock("@/domain/work-orders/api/work-orders-api", () => ({ vi.mock("@/domain/work-orders/api/work-orders-api", () => ({
workOrdersApi: { workOrdersApi: {
getById: (...args: unknown[]) => getById(...args), getById: (...args: unknown[]) => getById(...args),
update: (...args: unknown[]) => update(...args), update: (...args: unknown[]) => update(...args),
updateCompletedDate: (...args: unknown[]) => updateCompletedDate(...args),
patchBoardField: (...args: unknown[]) => patchBoardField(...args), patchBoardField: (...args: unknown[]) => patchBoardField(...args),
}, },
})); }));
@ -117,6 +119,7 @@ describe("useWorkOrderTableMutations completion-doc persistence", () => {
beforeEach(() => { beforeEach(() => {
getById.mockReset(); getById.mockReset();
update.mockReset(); update.mockReset();
updateCompletedDate.mockReset();
patchBoardField.mockReset(); patchBoardField.mockReset();
serverState = { ...BASE_DETAIL }; serverState = { ...BASE_DETAIL };
rowState = { ...BASE_ROW }; rowState = { ...BASE_ROW };
@ -144,24 +147,11 @@ describe("useWorkOrderTableMutations completion-doc persistence", () => {
}, },
); );
getById.mockImplementation(async () => { updateCompletedDate.mockImplementation(async (_id: unknown, completedDate: string) => {
events.push("getById:start"); events.push("updateCompletedDate:start");
await delay(15);
events.push("getById:end");
return { ...serverState };
});
update.mockImplementation(async (_id: unknown, values: WorkOrderFormValues) => {
events.push("update:start");
await delay(5); await delay(5);
serverState = { serverState = { ...serverState, completedDate };
...serverState, events.push("updateCompletedDate:end");
scheduledDate: values.scheduledDate,
completedDate: values.completedDate,
status: values.status,
};
events.push("update:end");
return { ...serverState };
}); });
}); });
@ -189,10 +179,12 @@ describe("useWorkOrderTableMutations completion-doc persistence", () => {
workOrderVersion: "AAAAAAA=", workOrderVersion: "AAAAAAA=",
}); });
expect(update).not.toHaveBeenCalled(); expect(update).not.toHaveBeenCalled();
expect(updateCompletedDate).not.toHaveBeenCalled();
expect(getById).not.toHaveBeenCalled();
expect(serverState.docStatus).toBe("NN"); expect(serverState.docStatus).toBe("NN");
}); });
it("serializes board docStatus and completedDate full-update without racing", async () => { it("serializes board docStatus and completedDate without racing or GetWorkorderById", async () => {
const onPatch = vi.fn(); const onPatch = vi.fn();
const { result } = renderHook( const { result } = renderHook(
() => () =>
@ -209,27 +201,23 @@ describe("useWorkOrderTableMutations completion-doc persistence", () => {
result.current.patchField(42, { completedDate: "2026-07-20" }); result.current.patchField(42, { completedDate: "2026-07-20" });
}); });
await waitFor(() => expect(events).toContain("update:end")); await waitFor(() => expect(events).toContain("updateCompletedDate:end"));
await waitFor(() => expect(events).toContain("boardPatch:end")); await waitFor(() => expect(events).toContain("boardPatch:end"));
expect(events).toEqual([ expect(events).toEqual([
"boardPatch:start", "boardPatch:start",
"boardPatch:end", "boardPatch:end",
"getById:start", "updateCompletedDate:start",
"getById:end", "updateCompletedDate:end",
"update:start",
"update:end",
]); ]);
expect(getById).not.toHaveBeenCalled();
expect(update).not.toHaveBeenCalled();
expect(updateCompletedDate).toHaveBeenCalledWith(42, "2026-07-20");
expect(serverState.docStatus).toBe("Yes"); expect(serverState.docStatus).toBe("Yes");
expect(serverState.completedDate).toBe("2026-07-20"); expect(serverState.completedDate).toBe("2026-07-20");
expect(serverState.scheduledDate).toBe(BASE_DETAIL.scheduledDate); expect(serverState.scheduledDate).toBe(BASE_DETAIL.scheduledDate);
expect(serverState.status).toBe(BASE_DETAIL.status); expect(serverState.status).toBe(BASE_DETAIL.status);
for (const call of update.mock.calls) {
const values = call[1] as WorkOrderFormValues;
expect(values.scheduledDate).toBe(BASE_DETAIL.scheduledDate);
expect(values.status).not.toBe("Done");
}
}); });
}); });