import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { describe, expect, it, vi } from "vitest"; import { WoTableBody } from "@/app/(protected)/workorders/_components/list/table/wo-table-body"; import type { ReturnTypeOfUseWorkOrdersTableData } from "@/app/(protected)/workorders/_components/list/table/wo-table-types"; import type { WorkOrderTableRow } from "@/domain/work-orders/types/work-order-table-row"; function makeRow(overrides: Partial = {}): WorkOrderTableRow { return { id: "1", woNumber: "24991", site: "CLV2", type: "PM", dispatcherId: "", dispatcherName: "", scheduledOn: "2026-06-02", targetWeek: "", dayGroup: "06/02", dayLabel: "TUE · 06/02", location: "Cleveland, OH", locationId: "", pm: "Backflow", serviceNotes: "", extraServices: [], company: "", tech: "", techPhone: "", apptStart: "", apptEnd: "", apptTime: "—", status: "Incomplete", docStatus: "No", pocName: "", pocPhone: "", pocNotes: "", dueDate: "", rescheduleCount: 0, carriedOver: 0, originalWeek: "", originalDate: "", isPastDue: false, scheduleWeekOnly: false, mediaCount: 0, title: "", priority: "", vendorId: "", primaryDispatchId: null, rowVersion: "", dispatchRowVersion: "", flagColor: null, ...overrides, }; } function baseTableData( overrides: Partial = {}, ): ReturnTypeOfUseWorkOrdersTableData { return { rows: [], isLoading: false, isFetching: false, error: null, refetch: vi.fn(), advActive: false, advResults: [], unassigned: [], unscheduled: [], displayGroups: [], searchActive: false, noSearchResults: false, isEmptyWeek: false, todayKey: null, draftDayKey: null, draft: null, setDraft: vi.fn(), unassignedOpen: true, setUnassignedOpen: vi.fn(), unschedOpen: true, setUnschedOpen: vi.fn(), selectedId: null, setSelectedId: vi.fn(), selectedRow: null, flashId: null, triggerFlash: vi.fn(), dragViz: null, setDragViz: vi.fn(), dragState: null, patchRow: vi.fn(), clearRowPatch: vi.fn(), reorderRows: vi.fn(), endDrag: vi.fn(), startDayDraft: vi.fn(), cancelDraft: vi.fn(), addRow: vi.fn(), scopeTotalCount: 0, totalCount: 0, search: "", ...overrides, } as ReturnTypeOfUseWorkOrdersTableData; } describe("WoTableBody Unassigned queue (SH-165)", () => { it("renders Unassigned above Unscheduled and day groups without duplicate rows", () => { const datedUnassigned = makeRow({ id: "u-dated", woNumber: "24991" }); const undatedUnassigned = makeRow({ id: "us1", woNumber: "25021", scheduledOn: "", dayGroup: "", dayLabel: "", }); const undatedAssigned = makeRow({ id: "us-assigned", woNumber: "25022", dispatcherId: "sarah", dispatcherName: "Sarah", scheduledOn: "", dayGroup: "", dayLabel: "", }); const datedAssigned = makeRow({ id: "day-assigned", woNumber: "25023", dispatcherId: "sarah", dispatcherName: "Sarah", }); const tableData = baseTableData({ unassigned: [datedUnassigned, undatedUnassigned], unscheduled: [undatedAssigned], displayGroups: [ { key: "06/02", label: "TUE · 06/02", date: "2026-06-02", items: [datedAssigned], }, ], }); render( ( )} renderInlineRow={() => null} />
{row.woNumber}
, ); const unassignedHeader = screen.getByRole("button", { name: "Unassigned, 2 work orders, expanded", }); const unscheduledHeader = screen.getByRole("button", { name: "Unscheduled, 1 work order, expanded", }); const dayLabel = screen.getByText("TUE · 06/02"); expect(unassignedHeader.compareDocumentPosition(screen.getByTestId("row-u-dated"))).toBe( Node.DOCUMENT_POSITION_FOLLOWING, ); expect(unassignedHeader.compareDocumentPosition(unscheduledHeader)).toBe( Node.DOCUMENT_POSITION_FOLLOWING, ); expect(unscheduledHeader.compareDocumentPosition(dayLabel)).toBe( Node.DOCUMENT_POSITION_FOLLOWING, ); expect(screen.getByTestId("row-u-dated")).toBeInTheDocument(); expect(screen.getByTestId("row-us1")).toBeInTheDocument(); expect(screen.getByTestId("row-us-assigned")).toBeInTheDocument(); expect(screen.getByTestId("row-day-assigned")).toBeInTheDocument(); expect(screen.getAllByTestId(/row-/)).toHaveLength(4); }); it("collapses and expands the Unassigned section via the disclosure control", async () => { const user = userEvent.setup(); const setUnassignedOpen = vi.fn(); const tableData = baseTableData({ unassigned: [makeRow({ id: "u1", woNumber: "24991" })], setUnassignedOpen, }); render( ( )} renderInlineRow={() => null} />
{row.woNumber}
, ); await user.click(screen.getByRole("button", { name: "Unassigned, 1 work order, expanded" })); expect(setUnassignedOpen).toHaveBeenCalledWith(expect.any(Function)); }); });