import { fireEvent, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { SlideOverInfoTabEditView } from "@/app/(protected)/workorders/_components/detail/tabs/slide-over-info-tab-edit-view"; import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row"; import { pad2, todayIso } from "@/domain/work-orders/utils/wizard-date-utils"; import { renderWithProviders } from "@/test/test-utils"; vi.mock("@/app/(protected)/workorders/_components/list/table/cells/site-cell", () => ({ SiteCell: () => null, })); vi.mock( "@/app/(protected)/workorders/_components/list/table/cells/editable-wo-number-cell", () => ({ EditableWONumberCell: () => null, }), ); vi.mock("@/app/(protected)/workorders/_components/list/table/cells/type-cell", () => ({ TypeCell: () => null, })); vi.mock("@/app/(protected)/workorders/_components/list/table/cells/assigned-to-cell", () => ({ AssignedToCell: () => null, })); vi.mock("@/app/(protected)/workorders/_components/list/table/cells/appt-time-cell", () => ({ ApptTimeCell: () => null, })); vi.mock("@/app/(protected)/workorders/_components/list/table/cells/pm-type-cell", () => ({ PMTypeCell: () => null, })); vi.mock("@/app/(protected)/workorders/_components/list/table/cells/vendor-cell", () => ({ VendorCell: () => null, })); vi.mock("@/app/(protected)/workorders/_components/list/table/cells/status-cell", () => ({ StatusCell: () => null, })); function currentMonthIso(day: number): string { const [y, m] = todayIso().split("-").map(Number); return `${y}-${pad2(m)}-${pad2(day)}`; } function baseRow(overrides: Partial = {}): WorkOrderTableRow { return { id: 42, woNumber: "WO-42", site: "SEA1", type: "PM", severity: null, dispatcherId: "u1", dispatcherName: "Dispatcher", scheduledOn: "", completedDate: "", targetWeek: "", dayGroup: "", dayLabel: "", location: "Seattle", locationId: "loc-1", pm: "HVAC", serviceNotes: "", extraServices: [], company: "Vendor Co", tech: "Tech", techPhone: "", vendorId: "v1", apptStart: "", apptEnd: "", apptTime: "", status: "Incomplete", docStatus: "No", pocName: "", pocPhone: "", pocNotes: "", additionalContacts: [], dueDate: "", rescheduleCount: 0, carriedOver: 0, isAddOn: false, originalWeek: "", originalDate: "", isPastDue: false, scheduleWeekOnly: false, mediaCount: 0, title: "", priority: "", primaryDispatchId: null, rowVersion: "v1", dispatchRowVersion: "", flagColor: null, ...overrides, }; } describe("SlideOverInfoTabEditView — Schedule On range", () => { it("patches range start/end and schedMode from the DateCell", async () => { const onDraftChange = vi.fn(); renderWithProviders( , ); const scheduleRow = screen.getByText("Schedule On").closest("div"); fireEvent.click(scheduleRow!.querySelector("button")!); fireEvent.click(await screen.findByRole("button", { name: "Range" })); fireEvent.click(screen.getByRole("button", { name: "5" })); fireEvent.click(screen.getByRole("button", { name: "20" })); fireEvent.click(screen.getByRole("button", { name: /^done$/i })); expect(onDraftChange).toHaveBeenCalledWith( expect.objectContaining({ scheduledOn: currentMonthIso(5), scheduleEnd: currentMonthIso(20), schedMode: "range", scheduleWeekOnly: false, targetWeek: "", }), ); }, 10_000); it("clears every schedule field in the draft", async () => { const onDraftChange = vi.fn(); renderWithProviders( , ); const scheduleRow = screen.getByText("Schedule On").closest("div"); fireEvent.click(scheduleRow!.querySelector("button")!); fireEvent.click(await screen.findByRole("button", { name: /clear/i })); expect(onDraftChange).toHaveBeenCalledWith( expect.objectContaining({ scheduledOn: "", scheduleWeekOnly: false, targetWeek: "", scheduleEnd: "", schedMode: undefined, dayGroup: "", dayLabel: "", isPastDue: false, }), ); }); });