sentiment-scope / frontend /src /components /AnalyzeForm.test.tsx
melkholy's picture
feat: single-image Hugging Face Spaces deployment with rate limiting
c1fa0b4 verified
Raw
History Blame Contribute Delete
1.3 kB
import { expect, it, vi } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import AnalyzeForm from "./AnalyzeForm";
import { analyze } from "../api";
vi.mock("../api", () => ({
analyze: vi.fn(),
explainText: vi.fn(),
}));
it("disables both buttons until text is entered, then analyzes on click", async () => {
vi.mocked(analyze).mockResolvedValue({
label: "positive",
scores: { negative: 0.05, neutral: 0.15, positive: 0.8 },
});
const user = userEvent.setup();
render(<AnalyzeForm />);
const analyzeButton = screen.getByRole("button", { name: "Analyze" });
const explainButton = screen.getByRole("button", { name: "Analyze + Explain" });
expect(analyzeButton).toBeDisabled();
expect(explainButton).toBeDisabled();
await user.type(screen.getByPlaceholderText(/type or paste text/i), "I love this");
expect(analyzeButton).toBeEnabled();
await user.click(analyzeButton);
// "positive" appears twice once results land: the sentiment badge and the
// ConfidenceBars row label for the positive class.
expect(await screen.findAllByText("positive")).toHaveLength(2);
expect(screen.getByText("80.0%")).toBeInTheDocument();
expect(analyze).toHaveBeenCalledWith("I love this");
});