import { cleanup, fireEvent, render, screen } from "@solidjs/testing-library";
import { afterEach, describe, expect, it, vi } from "vitest";
import { SearchInput } from "../SearchInput";
const navigateMock = vi.fn();
vi.mock("@solidjs/router", () => ({ useNavigate: () => navigateMock }));
describe("SearchInput", () => {
afterEach(() => {
cleanup();
vi.clearAllMocks();
});
it("renders correctly", () => {
render(() => );
expect(screen.getByPlaceholderText("Search decks, cards...")).toBeInTheDocument();
});
it("updates query on input", () => {
render(() => );
const input = screen.getByPlaceholderText("Search decks, cards...") as HTMLInputElement;
fireEvent.input(input, { target: { value: "test query" } });
expect(input.value).toBe("test query");
});
it("navigates on submit with query", () => {
render(() => );
const input = screen.getByPlaceholderText("Search decks, cards...");
fireEvent.input(input, { target: { value: "test" } });
fireEvent.submit(input.closest("form")!);
expect(navigateMock).toHaveBeenCalledWith("/search?q=test");
});
it("does not navigate on empty submit", () => {
render(() => );
const input = screen.getByPlaceholderText("Search decks, cards...");
fireEvent.submit(input.closest("form")!);
expect(navigateMock).not.toHaveBeenCalled();
});
it("initializes with initialQuery prop", () => {
render(() => );
const input = screen.getByPlaceholderText("Search decks, cards...") as HTMLInputElement;
expect(input.value).toBe("initial");
});
});