2026-08-10 17:12:14 -03:00
|
|
|
import { fireEvent, render, screen, within } from "@testing-library/react";
|
|
|
|
|
import { describe, expect, it, vi } from "vitest";
|
|
|
|
|
import { WizardStepVendorTime } from "@/app/(protected)/workorders/_components/wizard/wizard-step-vendor-time";
|
|
|
|
|
import { EMPTY_WIZARD_DRAFT } from "@/domain/work-orders/types/work-order-wizard";
|
|
|
|
|
|
2026-08-28 11:05:43 -03:00
|
|
|
describe("WizardStepVendorTime Appt Time", () => {
|
|
|
|
|
it("marks Appt Time as optional", () => {
|
|
|
|
|
render(
|
|
|
|
|
<WizardStepVendorTime
|
|
|
|
|
draft={{ ...EMPTY_WIZARD_DRAFT, type: "PM", status: "Incomplete" }}
|
|
|
|
|
vendors={[]}
|
|
|
|
|
onUpdate={vi.fn()}
|
|
|
|
|
onPatch={vi.fn()}
|
|
|
|
|
/>,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(screen.getByText("Appt Time")).toBeInTheDocument();
|
|
|
|
|
expect(screen.getAllByText("optional").length).toBeGreaterThan(0);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2026-09-02 15:11:31 -03:00
|
|
|
describe("WizardStepVendorTime creation statuses (AAP)", () => {
|
|
|
|
|
it("offers only Incomplete, Pending, and Scheduled", () => {
|
|
|
|
|
render(
|
|
|
|
|
<WizardStepVendorTime
|
|
|
|
|
draft={{ ...EMPTY_WIZARD_DRAFT, type: "PM", status: "Incomplete" }}
|
|
|
|
|
vendors={[]}
|
|
|
|
|
onUpdate={vi.fn()}
|
|
|
|
|
onPatch={vi.fn()}
|
|
|
|
|
/>,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
fireEvent.click(screen.getByRole("button", { name: /incomplete/i }));
|
|
|
|
|
expect(screen.getByRole("button", { name: /^pending$/i })).toBeInTheDocument();
|
|
|
|
|
expect(screen.getByRole("button", { name: /^scheduled$/i })).toBeInTheDocument();
|
|
|
|
|
expect(screen.queryByRole("button", { name: /^completed$/i })).not.toBeInTheDocument();
|
|
|
|
|
expect(screen.queryByRole("button", { name: /^en route$/i })).not.toBeInTheDocument();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("disables Scheduled without a concrete date", () => {
|
2026-08-10 17:12:14 -03:00
|
|
|
const onUpdate = vi.fn();
|
|
|
|
|
render(
|
|
|
|
|
<WizardStepVendorTime
|
2026-09-02 15:11:31 -03:00
|
|
|
draft={{ ...EMPTY_WIZARD_DRAFT, type: "PM", status: "Incomplete" }}
|
2026-08-10 17:12:14 -03:00
|
|
|
vendors={[]}
|
|
|
|
|
onUpdate={onUpdate}
|
|
|
|
|
onPatch={vi.fn()}
|
|
|
|
|
/>,
|
|
|
|
|
);
|
|
|
|
|
|
2026-09-02 15:11:31 -03:00
|
|
|
fireEvent.click(screen.getByRole("button", { name: /incomplete/i }));
|
|
|
|
|
const scheduled = screen.getByRole("button", { name: /^scheduled$/i });
|
|
|
|
|
expect(scheduled).toBeDisabled();
|
|
|
|
|
expect(scheduled).toHaveAttribute(
|
|
|
|
|
"title",
|
|
|
|
|
"Set a Schedule On date before marking this work order as Scheduled.",
|
|
|
|
|
);
|
|
|
|
|
fireEvent.click(scheduled);
|
|
|
|
|
expect(onUpdate).not.toHaveBeenCalledWith("status", "Scheduled");
|
2026-08-10 17:12:14 -03:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("allows selecting a non-Completed status", () => {
|
2026-09-03 14:42:19 -03:00
|
|
|
const onPatch = vi.fn();
|
2026-08-10 17:12:14 -03:00
|
|
|
render(
|
|
|
|
|
<WizardStepVendorTime
|
|
|
|
|
draft={{ ...EMPTY_WIZARD_DRAFT, type: "PM", status: "Incomplete" }}
|
|
|
|
|
vendors={[]}
|
2026-09-03 14:42:19 -03:00
|
|
|
onUpdate={vi.fn()}
|
|
|
|
|
onPatch={onPatch}
|
2026-08-10 17:12:14 -03:00
|
|
|
/>,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
fireEvent.click(screen.getByRole("button", { name: /incomplete/i }));
|
|
|
|
|
const menu = screen.getByRole("button", { name: /^pending$/i }).closest("div");
|
|
|
|
|
expect(menu).not.toBeNull();
|
|
|
|
|
fireEvent.click(within(menu!.parentElement!).getByRole("button", { name: /^pending$/i }));
|
2026-09-03 14:42:19 -03:00
|
|
|
expect(onPatch).toHaveBeenCalledWith({ status: "Pending" });
|
|
|
|
|
});
|
|
|
|
|
|
2026-09-04 14:31:08 -03:00
|
|
|
it("promotes Pending to Scheduled when picked on a dated draft", () => {
|
2026-09-03 14:42:19 -03:00
|
|
|
const onPatch = vi.fn();
|
|
|
|
|
render(
|
|
|
|
|
<WizardStepVendorTime
|
|
|
|
|
draft={{
|
|
|
|
|
...EMPTY_WIZARD_DRAFT,
|
|
|
|
|
type: "PM",
|
|
|
|
|
status: "Scheduled",
|
|
|
|
|
scheduledOn: "2026-06-01",
|
|
|
|
|
scheduleWeekOnly: false,
|
|
|
|
|
}}
|
|
|
|
|
vendors={[]}
|
|
|
|
|
onUpdate={vi.fn()}
|
|
|
|
|
onPatch={onPatch}
|
|
|
|
|
/>,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
fireEvent.click(screen.getByRole("button", { name: /scheduled/i }));
|
|
|
|
|
fireEvent.click(screen.getByRole("button", { name: /^pending$/i }));
|
2026-09-04 14:31:08 -03:00
|
|
|
expect(onPatch).toHaveBeenCalledWith({ status: "Scheduled" });
|
2026-08-10 17:12:14 -03:00
|
|
|
});
|
|
|
|
|
});
|