// frontend/tests/dashboard/CommandInput.test.tsx import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; const push = vi.fn(); vi.mock("next/navigation", () => ({ useRouter: () => ({ push }) })); const capture = vi.fn().mockResolvedValue({ item: {}, classification: {} }); vi.mock("@/lib/dashboard/api", () => ({ captureCommand: (r: string) => capture(r) })); import { CommandInput } from "@/components/dashboard/CommandInput"; describe("CommandInput", () => { it("전송 시 캡처 호출 후 /inbox로 이동", async () => { render(); const input = screen.getByLabelText("아리에게 명령 입력"); fireEvent.change(input, { target: { value: "다음 주 한국 비행기 티켓 사기" } }); fireEvent.click(screen.getByLabelText("보내기")); await waitFor(() => expect(capture).toHaveBeenCalledWith("다음 주 한국 비행기 티켓 사기")); await waitFor(() => expect(push).toHaveBeenCalledWith("/inbox")); }); it("빈 입력이면 send 비활성", () => { render(); expect(screen.getByLabelText("보내기")).toBeDisabled(); }); });