shoc-frontend-new/src/test/app/(protected)/workorders/due-date-calendar-dialog.test.tsx
Arthur Bassi 7a30335ab8 feat(work-orders): add per-WO Aveta indicators and advanced filter
Dispatchers can flag Aveta on Service and Notes and filter those rows
without a site-level attribute.
2026-08-24 15:16:51 -03:00

62 lines
2.2 KiB
TypeScript

import { ThemeProvider } from "@mui/material";
import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { DueDateCalendarDialog } from "@/app/(protected)/workorders/_components/list/table/cells/due-date-calendar-dialog";
import { DueDateCell } from "@/app/(protected)/workorders/_components/list/table/cells/due-date-cell";
import { WizardDueDateField } from "@/app/(protected)/workorders/_components/wizard/wizard-due-date-field";
import { muiTheme } from "@/lib/theme/mui-theme";
function renderWithTheme(ui: React.ReactElement) {
return render(<ThemeProvider theme={muiTheme}>{ui}</ThemeProvider>);
}
describe("DueDateCalendarDialog", () => {
it("saves the selected day as ISO and closes", () => {
const onSave = vi.fn();
const onOpenChange = vi.fn();
renderWithTheme(
<DueDateCalendarDialog open onOpenChange={onOpenChange} value="2026-07-15" onSave={onSave} />,
);
expect(screen.getByRole("dialog")).toBeInTheDocument();
expect(screen.getByText("Due Date")).toBeInTheDocument();
fireEvent.click(screen.getByRole("button", { name: "20" }));
expect(onSave).toHaveBeenCalledWith("2026-07-20");
expect(onOpenChange).toHaveBeenCalledWith(false);
});
});
describe("DueDateCell", () => {
it("opens a dialog for Emergency and keeps popover for PM", () => {
const onSave = vi.fn();
const { rerender } = renderWithTheme(
<DueDateCell type="Emergency" value="2026-07-15" onSave={onSave} />,
);
fireEvent.click(screen.getByRole("button", { name: "Due Date" }));
expect(screen.getByRole("dialog")).toBeInTheDocument();
rerender(
<ThemeProvider theme={muiTheme}>
<DueDateCell type="PM" value="2026-07-15" onSave={onSave} />
</ThemeProvider>,
);
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
});
});
describe("WizardDueDateField", () => {
it("opens a dialog when type is Emergency", () => {
renderWithTheme(
<WizardDueDateField type="Emergency" value="" placeholder="No due date" onChange={vi.fn()} />,
);
fireEvent.click(screen.getByRole("button", { name: /No due date/i }));
expect(screen.getByRole("dialog")).toBeInTheDocument();
});
});