import React from "react"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; // @ts-ignore import InputField from "./InputField"; describe("InputField Component", () => { const mockOnChange = jest.fn(); const mockOnBlur = jest.fn(); const mockOnFocus = jest.fn(); beforeEach(() => { jest.clearAllMocks(); }); test("renders with label and placeholder", () => { render( ); expect(screen.getByText(/test input/i)).toBeInTheDocument(); expect(screen.getByPlaceholderText(/enter text/i)).toBeInTheDocument(); }); test("calls onChange when input value changes", async () => { render( ); await userEvent.type( screen.getByPlaceholderText(/enter text/i), "New Value" ); expect(mockOnChange).toHaveBeenCalledTimes(9); // 'New Value' has 9 characters }); test("renders help text when provided", () => { render( ); expect(screen.getByText(/this is a help text/i)).toBeInTheDocument(); }); test("renders error message when provided", () => { render( ); expect(screen.getByText(/this is an error message/i)).toBeInTheDocument(); }); test("renders as textarea when type is textarea", () => { render( ); expect(screen.getByRole("textbox")).toHaveAttribute( "name", "test-textarea" ); }); test("renders copy button when enableCopy is true", () => { render( ); expect(screen.getByTestId("copy-icon")).toBeInTheDocument(); }); test("calls onBlur when input loses focus", async () => { render( ); const input = screen.getByPlaceholderText(/enter text/i); await userEvent.click(input); await userEvent.tab(); expect(mockOnBlur).toHaveBeenCalledTimes(1); }); test("calls onFocus when input gains focus", async () => { render( ); const input = screen.getByPlaceholderText(/enter text/i); await userEvent.click(input); expect(mockOnFocus).toHaveBeenCalledTimes(1); }); test("renders as disabled when disabled prop is true", () => { render( ); expect(screen.getByPlaceholderText(/enter text/i)).toBeDisabled(); }); });