66 lines · 2.2 KB · TypeScript
RawDownload
import { Children, isValidElement, type ReactElement } from "react";import { describe, expect, it, vi } from "vite-plus/test"; import { WizardSteps } from "../ui/wizard";import { ADD_PROVIDER_WIZARD_STEPS } from "./AddProviderInstanceDialog.logic";import { AddProviderInstanceWizardSteps } from "./AddProviderInstanceWizardSteps"; interface StepButtonProps {  readonly "aria-current"?: string;  readonly onClick: () => void;} interface StepListItemProps {  readonly children: ReactElement<StepButtonProps>;} function renderStepButtons(  currentStep: number,  instanceIdError: string | null,  onNavigation: Parameters<typeof AddProviderInstanceWizardSteps>[0]["onNavigation"],): ReactElement<StepButtonProps>[] {  const header = AddProviderInstanceWizardSteps({    currentStep,    summaries: ["Codex", "Codex Workspace", null],    instanceIdError,    onNavigation,  });   return Children.toArray(WizardSteps(header.props).props.children)    .filter((child): child is ReactElement<StepListItemProps> => isValidElement(child))    .map((item) => item.props.children);} describe("AddProviderInstanceWizardSteps", () => {  it("gates the actual Config header click through Identity validation", () => {    const onNavigation = vi.fn();    const buttons = renderStepButtons(0, "Instance ID is required.", onNavigation);     expect(buttons).toHaveLength(ADD_PROVIDER_WIZARD_STEPS.length);    buttons[2]!.props.onClick();     expect(onNavigation).toHaveBeenCalledOnce();    expect(onNavigation).toHaveBeenCalledWith({      kind: "blocked",      step: 1,      error: "Instance ID is required.",    });  });   it("marks the wizard step separately from the clicked button focus", () => {    const buttons = renderStepButtons(1, "Instance ID is required.", vi.fn());     expect(buttons[0]!.props["aria-current"]).toBeUndefined();    expect(buttons[1]!.props["aria-current"]).toBe("step");    expect(buttons[2]!.props["aria-current"]).toBeUndefined();  });   it("preserves the actual backward header click", () => {    const onNavigation = vi.fn();    const buttons = renderStepButtons(2, "Instance ID is required.", onNavigation);     buttons[0]!.props.onClick();     expect(onNavigation).toHaveBeenCalledWith({ kind: "navigate", step: 0 });  });});