mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-01 19:03:12 +00:00
Empty search waits until the Unassigned queue has settled. Reschedule selects the destination day's page before flashing the row.
123 lines
3.7 KiB
TypeScript
123 lines
3.7 KiB
TypeScript
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> = {},
|
|
): 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(
|
|
<WoTable
|
|
tableData={data}
|
|
users={[]}
|
|
sites={[]}
|
|
vendors={[]}
|
|
pmTypes={[]}
|
|
weekMonday="2026-05-18"
|
|
onNavigateToDay={vi.fn()}
|
|
onOpenSlideOver={vi.fn()}
|
|
onOpenMedia={vi.fn()}
|
|
onClearSearch={vi.fn()}
|
|
onPatch={vi.fn()}
|
|
/>,
|
|
{ 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();
|
|
});
|
|
});
|