shoc-frontend-new/src/test/domain/work-orders/utils/slide-over-draft.test.ts
Arthur Bassi 31c5559d23 fix(work-orders): clear uplift form state only after successful mutations
[recover] remove malicious eslint payload (was 380188af)
2026-08-10 17:12:10 -03:00

98 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildSlideOverPatch,
isSlideOverDraftDirty,
SLIDE_OVER_EDIT_KEYS,
} from "@/domain/work-orders/utils/slide-over-draft";
import { EMPTY_UPLIFT_SUMMARY } from "@/domain/work-orders/types/work-order-uplift";
import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row";
function baseRow(overrides: Partial<WorkOrderTableRow> = {}): WorkOrderTableRow {
return {
id: 1,
woNumber: "1001",
site: "SITE-A",
type: "PM",
dispatcherId: "10",
dispatcherName: "Alex",
scheduledOn: "2026-07-16",
targetWeek: "",
dayGroup: "2026-07-16",
dayLabel: "Thu",
location: "Main",
locationId: 5,
pm: "Plumbing",
serviceNotes: "",
extraServices: [],
vendorId: "v1",
company: "Acme",
tech: "Sam",
techPhone: "",
apptStart: "",
apptEnd: "",
apptTime: "09:00",
status: "Incomplete",
docStatus: "",
pocName: "",
pocPhone: "",
pocNotes: "",
dueDate: "2026-07-20",
rescheduleCount: 0,
carriedOver: 0,
originalWeek: "",
originalDate: "",
isPastDue: false,
scheduleWeekOnly: false,
mediaCount: 0,
title: "",
priority: "",
primaryDispatchId: null,
rowVersion: "1",
dispatchRowVersion: "",
flagColor: null,
upliftSummary: EMPTY_UPLIFT_SUMMARY,
...overrides,
};
}
describe("slide-over-draft", () => {
it("exposes only board-persistable edit keys", () => {
expect(SLIDE_OVER_EDIT_KEYS).toContain("woNumber");
expect(SLIDE_OVER_EDIT_KEYS).toContain("status");
expect(SLIDE_OVER_EDIT_KEYS).not.toContain("pocName");
expect(SLIDE_OVER_EDIT_KEYS).not.toContain("locationId");
expect(SLIDE_OVER_EDIT_KEYS).not.toContain("techPhone");
});
it("ignores POC-only edits for dirty state", () => {
const row = baseRow();
const draft = baseRow({ pocName: "Jordan", pocPhone: "555-0100" });
expect(isSlideOverDraftDirty(draft, row)).toBe(false);
expect(buildSlideOverPatch(draft, row)).toEqual({});
});
it("detects dirty draft when a tracked field changes", () => {
const row = baseRow();
const draft = baseRow({ scheduledOn: "2026-07-17" });
expect(isSlideOverDraftDirty(draft, row)).toBe(true);
});
it("is not dirty when values match", () => {
const row = baseRow();
expect(isSlideOverDraftDirty(row, row)).toBe(false);
});
it("builds a patch with only changed fields", () => {
const row = baseRow();
const draft = baseRow({
woNumber: "1002",
status: "Completed",
extraServices: ["HVAC"],
});
expect(buildSlideOverPatch(draft, row)).toEqual({
woNumber: "1002",
status: "Completed",
extraServices: ["HVAC"],
});
});
});