import React from "react"; import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { vi } from "vitest"; import DocumentPicker from "../components/upload/DocumentPicker"; import { listDocuments, searchDocuments } from "../services/api"; vi.mock("../services/api", () => ({ listDocuments: vi.fn(), searchDocuments: vi.fn(), })); describe("DocumentPicker", () => { beforeEach(() => { vi.clearAllMocks(); }); it("loads existing documents and emits selected document", async () => { listDocuments.mockResolvedValue({ data: [ { id: "doc-a", filename: "alpha.txt" }, { id: "doc-b", filename: "beta.txt" }, ], }); const onSelect = vi.fn(); render(); expect(await screen.findByText("alpha.txt")).toBeInTheDocument(); const radios = screen.getAllByRole("radio"); fireEvent.click(radios[1]); expect(onSelect).toHaveBeenCalledWith({ id: "doc-b", filename: "beta.txt" }); }); it("uses search endpoint when query is provided", async () => { listDocuments.mockResolvedValue({ data: [] }); searchDocuments.mockResolvedValue({ data: [{ id: "doc-z", filename: "zeta.pdf" }] }); render(); await screen.findByPlaceholderText("Search by filename"); fireEvent.change(screen.getByPlaceholderText("Search by filename"), { target: { value: "zeta" } }); fireEvent.click(screen.getByRole("button", { name: "Find" })); await waitFor(() => { expect(searchDocuments).toHaveBeenCalledWith("zeta", 100); }); }); });