import { fireEvent, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { WoTableRowServiceCells } from "@/app/(protected)/workorders/_components/list/table/wo-table-row-service-cells"; import type { WoTableRowHandlers } from "@/app/(protected)/workorders/_components/list/table/wo-table-row"; import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row"; import { renderWithProviders } from "@/test/test-utils"; function makeRow(overrides: Partial = {}): WorkOrderTableRow { return { id: 9, woNumber: "24818000001", site: "BK5", type: "PM", severity: null, dispatcherId: "u1", dispatcherName: "Alex", scheduledOn: "2026-07-15", completedDate: "2026-07-20", targetWeek: "2026-07-15", dayGroup: "07/15", dayLabel: "Tue", location: "Lobby", locationId: "loc-1", pm: "HVAC", serviceNotes: "", extraServices: [], vendorId: "7", company: "Acme", tech: "Sam", techPhone: "", apptStart: "", apptEnd: "", apptTime: "09:00 – 10:00", status: "Incomplete", docStatus: "Yes", pocName: "", pocPhone: "", pocNotes: "", dueDate: "2026-07-22", rescheduleCount: 0, carriedOver: 0, originalWeek: "", originalDate: "", isPastDue: false, scheduleWeekOnly: false, isAddOn: false, mediaCount: 1, title: "", priority: "", primaryDispatchId: null, rowVersion: "", dispatchRowVersion: "", flagColor: null, additionalContacts: [], upliftSummary: { hasUplift: false, pendingCount: 0 }, ...overrides, }; } const handlers: WoTableRowHandlers = { onRowClick: vi.fn(), onView: vi.fn(), onEdit: vi.fn(), onOpenMedia: vi.fn(), onPatch: vi.fn(), onScheduleDate: vi.fn(), onScheduleWeek: vi.fn(), onScheduleRange: vi.fn(), onOpenSlideOver: vi.fn(), onOpenCompDoc: vi.fn(), onOpenUplifts: vi.fn(), onReorder: vi.fn(), onDragStart: vi.fn(), onDragOver: vi.fn(), onDrop: vi.fn(), onDragEnd: vi.fn(), }; function renderCells(row: WorkOrderTableRow, viewOnly = false) { const onPatchRow = vi.fn(); renderWithProviders(
, ); return onPatchRow; } describe("WoTableRowServiceCells completed date Clear (SH-390)", () => { it("shows Clear in the completed-date editor and patches completedDate to empty", async () => { const onPatchRow = renderCells(makeRow()); fireEvent.click(screen.getByRole("button", { name: /07-20/ })); fireEvent.click(await screen.findByRole("button", { name: /clear/i })); expect(onPatchRow).toHaveBeenCalledWith({ completedDate: "" }); }); it("offers no Clear when the completed date is already empty", async () => { renderCells(makeRow({ completedDate: "" })); fireEvent.click(screen.getByRole("button", { name: "—" })); expect(await screen.findByRole("button", { name: "20" })).toBeInTheDocument(); expect(screen.queryByRole("button", { name: /clear/i })).not.toBeInTheDocument(); }); it("offers no Clear on a Completed (view-only) row", async () => { renderCells(makeRow({ status: "Completed" }), true); fireEvent.click(screen.getByRole("button", { name: /07-20/ })); expect(await screen.findByRole("button", { name: "20" })).toBeInTheDocument(); expect(screen.queryByRole("button", { name: /clear/i })).not.toBeInTheDocument(); }); });