import { resolve } from "node:path"; import { describe, expect, it, vi } from "vitest"; import { render, fireEvent } from "@testing-library/preact"; import { Select } from "./Select.js"; const defaultOptions = [ { value: "a", label: "Alpha" }, { value: "b", label: "Beta" }, { value: "c", label: "Gamma" }, ]; describe("Select", () => { it("renders a select element", () => { const { getByRole } = render( ); const select = getByRole("combobox") as HTMLSelectElement; const firstOption = select.options[0]; expect(firstOption.textContent).toBe("Pick one"); expect(firstOption.disabled).toBe(true); expect(firstOption.value).toBe(""); }); it("renders all options", () => { const { getByRole } = render( ); const select = getByRole("combobox") as HTMLSelectElement; // Preact onChange maps to native "change" event; dispatch it directly select.value = "b"; select.dispatchEvent(new Event("change", { bubbles: true })); expect(onChange).toHaveBeenCalled(); }); it("applies error class when error prop is true", () => { const { container } = render( ); expect(getByRole("combobox")).toHaveAttribute("aria-invalid", "true"); }); it("sets disabled attribute when disabled", () => { const { getByRole } = render( ); expect(container.querySelector(".strand-select--disabled")).toBeTruthy(); }); it("forwards ref to select element", () => { let selectEl: HTMLSelectElement | null = null; render(