import * as React from "react"; import { render, fireEvent } from "@testing-library/react"; import PasswordInput from "../../../src/components/PasswordInput"; describe("PasswordInput", () => { it("defaults to type='password'", () => { const { getByLabelText } = render( ); expect(getByLabelText("PIN")).toHaveAttribute("type", "password"); }); it("toggles to type='text' when show button is clicked", () => { const { getByLabelText } = render( ); const input = getByLabelText("PIN"); const toggleBtn = getByLabelText("Show password"); fireEvent.click(toggleBtn); expect(input).toHaveAttribute("type", "text"); fireEvent.click(getByLabelText("Hide password")); expect(input).toHaveAttribute("type", "password"); }); it("has correct aria-label on toggle button", () => { const { getByLabelText, queryByLabelText } = render( ); expect(getByLabelText("Show password")).toBeInTheDocument(); expect(queryByLabelText("Hide password")).not.toBeInTheDocument(); fireEvent.click(getByLabelText("Show password")); expect(getByLabelText("Hide password")).toBeInTheDocument(); expect(queryByLabelText("Show password")).not.toBeInTheDocument(); }); it("passes through standard input props", () => { const handleChange = jest.fn(); const { getByLabelText } = render( ); const input = getByLabelText("PIN"); expect(input).toHaveAttribute("id", "test-pw"); expect(input).toHaveClass("form-control"); expect(input).toHaveAttribute("value", "secret"); expect(input).toHaveAttribute("autoComplete", "off"); fireEvent.change(input, { target: { value: "new-value" } }); expect(handleChange).toHaveBeenCalled(); }); it("renders the wrapper div with password-input-wrapper class", () => { const { container } = render(); expect( container.querySelector(".password-input-wrapper") ).toBeInTheDocument(); }); });