import { describe, expect, it, vi } from "vitest"; import { WoTable } from "@/app/(protected)/workorders/_components/list/table/wo-table"; import type { ReturnTypeOfUseWorkOrdersTableData } from "@/app/(protected)/workorders/_components/list/table/wo-table-types"; import { renderWithProviders } from "@/test/test-utils"; vi.mock("@/domain/locations/use-cases/use-location-sites", () => ({ useLocationSites: () => ({ data: [] }), })); vi.mock("@/app/(protected)/workorders/_components/list/table/use-wo-table-inline-create", () => ({ useWoTableInlineCreate: () => ({ handleInlineSave: vi.fn(), saving: false }), })); function tableData( overrides: Partial = {}, ): ReturnTypeOfUseWorkOrdersTableData { return { rows: [], isLoading: false, isFetching: false, error: null, refetch: vi.fn(), advActive: false, advResults: [], unassigned: [], unassignedError: null, unassignedLoading: false, unscheduled: [], displayGroups: [{ key: "05/18", label: "Mon · 05/18", date: "2026-05-18", items: [] }], searchActive: true, noSearchResults: true, isEmptyWeek: false, todayKey: null, draftDayKey: null, draft: { locationId: "", site: "" }, 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(), revealScheduledRow: vi.fn(), dragViz: null, setDragViz: vi.fn(), dragState: { current: { dragId: null, overId: 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: "no-match", showDayPagination: false, dayPageSize: 50, dayPageIndex: 0, dayPageCount: 1, dayItemCount: 0, dayFooterLabel: "Mon · 05/18", setDayPageSize: vi.fn(), goToPrevDayPage: vi.fn(), goToNextDayPage: vi.fn(), ...overrides, } as ReturnTypeOfUseWorkOrdersTableData; } function renderTable(data: ReturnTypeOfUseWorkOrdersTableData) { return renderWithProviders( , { withAuth: false }, ); } describe("WoTable search empty vs Unassigned queue (SH-165/SH-241)", () => { it("shows empty search only after the Unassigned queue has settled empty", () => { const { getByText, queryByText } = renderTable(tableData()); expect(getByText("No work orders match your search")).toBeInTheDocument(); expect(queryByText(/Loading unassigned work orders/)).not.toBeInTheDocument(); }); it("keeps Unassigned loading visible instead of a premature empty search", () => { const { getByText, queryByText } = renderTable( tableData({ noSearchResults: true, unassignedLoading: true, }), ); expect(queryByText("No work orders match your search")).not.toBeInTheDocument(); expect(getByText(/Loading unassigned work orders/)).toBeInTheDocument(); }); it("keeps Unassigned error visible instead of hiding it behind empty search", () => { const { getByText, queryByText } = renderTable( tableData({ noSearchResults: true, unassignedError: new Error("queue unavailable"), }), ); expect(queryByText("No work orders match your search")).not.toBeInTheDocument(); expect(getByText("queue unavailable")).toBeInTheDocument(); }); it("shows empty advanced-filter copy with Adjust filters", () => { const onOpenAdvancedFilters = vi.fn(); const { getByText, getByRole } = renderWithProviders( , { withAuth: false }, ); expect(getByText("No work orders match these filters")).toBeInTheDocument(); getByRole("button", { name: "Adjust filters" }).click(); expect(onOpenAdvancedFilters).toHaveBeenCalled(); }); });