mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-04 20:42:05 +00:00
Exit edit mode and refuse core Save when status becomes Completed; hide the footer even if unsaved.
96 lines
2.4 KiB
TypeScript
96 lines
2.4 KiB
TypeScript
import { act, renderHook } from "@testing-library/react";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { useSlideOverEditState } from "@/app/(protected)/workorders/_components/detail/use-slide-over-edit-state";
|
|
import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row";
|
|
|
|
function baseRow(overrides: Partial<WorkOrderTableRow> = {}): WorkOrderTableRow {
|
|
return {
|
|
id: 100,
|
|
woNumber: "100",
|
|
site: "SITE",
|
|
type: "Emergency",
|
|
severity: null,
|
|
dispatcherId: "d1",
|
|
dispatcherName: "Alex",
|
|
scheduledOn: "2026-07-16",
|
|
completedDate: "",
|
|
targetWeek: "",
|
|
dayGroup: "2026-07-16",
|
|
dayLabel: "Thu",
|
|
location: "Main",
|
|
locationId: 5,
|
|
pm: "",
|
|
serviceNotes: "",
|
|
extraServices: [],
|
|
vendorId: "v1",
|
|
company: "Acme",
|
|
tech: "Sam",
|
|
techPhone: "",
|
|
apptStart: "",
|
|
apptEnd: "",
|
|
apptTime: "",
|
|
status: "Incomplete",
|
|
docStatus: "",
|
|
pocName: "",
|
|
pocPhone: "",
|
|
pocNotes: "",
|
|
additionalContacts: [],
|
|
dueDate: "",
|
|
rescheduleCount: 0,
|
|
carriedOver: 0,
|
|
originalWeek: "",
|
|
originalDate: "",
|
|
isPastDue: false,
|
|
scheduleWeekOnly: false,
|
|
mediaCount: 0,
|
|
title: "",
|
|
priority: "",
|
|
primaryDispatchId: null,
|
|
rowVersion: "1",
|
|
dispatchRowVersion: "",
|
|
flagColor: null,
|
|
isAddOn: false,
|
|
upliftSummary: { hasUplift: false, pendingCount: 0 },
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("useSlideOverEditState completed lock", () => {
|
|
it("leaves edit mode and refuses commit when the same work order becomes completed", () => {
|
|
const onSave = vi.fn();
|
|
const onClose = vi.fn();
|
|
const setTab = vi.fn();
|
|
const open = baseRow();
|
|
|
|
const { result, rerender } = renderHook(
|
|
({ row, infoSource }) =>
|
|
useSlideOverEditState({
|
|
row,
|
|
editMode: true,
|
|
infoSource,
|
|
onSave,
|
|
onClose,
|
|
closeDisabled: false,
|
|
setTab,
|
|
}),
|
|
{ initialProps: { row: open, infoSource: open } },
|
|
);
|
|
|
|
expect(result.current.editing).toBe(true);
|
|
|
|
act(() => {
|
|
result.current.handleDraftChange({ woNumber: "WO-LOCKED" });
|
|
});
|
|
|
|
const completed = baseRow({ status: "Completed", woNumber: "100" });
|
|
rerender({ row: completed, infoSource: completed });
|
|
|
|
expect(result.current.editing).toBe(false);
|
|
|
|
act(() => {
|
|
result.current.commit();
|
|
});
|
|
|
|
expect(onSave).not.toHaveBeenCalled();
|
|
});
|
|
});
|