import { render, fireEvent } from "@testing-library/react"; import React from "react"; import CustomInput from "./helper_components/custom_input"; import CustomTimeInput from "./helper_components/custom_time_input"; describe("CustomInput", () => { it("should call onChange when input value changes", () => { const onChange = jest.fn(); const { container } = render(); const input = container.querySelector("input") as HTMLInputElement; fireEvent.change(input, { target: { value: "test value" } }); // Line 22: onChange is called expect(onChange).toHaveBeenCalled(); expect(onChange).toHaveBeenCalledWith(expect.any(Object), "test value"); }); it("should handle onChange without onChangeArgs", () => { const onChange = jest.fn(); const { container } = render(); const input = container.querySelector("input") as HTMLInputElement; fireEvent.change(input, { target: { value: "hello" } }); expect(onChange).toHaveBeenCalledWith(expect.any(Object), "hello"); }); it("should use onChangeArgs when provided", () => { const onChange = jest.fn(); const onChangeArgs = ( event: React.ChangeEvent, ): [React.ChangeEvent, string] => { return [event, `modified: ${event.target.value}`]; }; const { container } = render( , ); const input = container.querySelector("input") as HTMLInputElement; fireEvent.change(input, { target: { value: "test" } }); // Lines 19-20: onChangeArgs is used expect(onChange).toHaveBeenCalledWith(expect.any(Object), "modified: test"); }); it("should not throw when onChange is not provided", () => { const { container } = render(); const input = container.querySelector("input") as HTMLInputElement; expect(() => fireEvent.change(input, { target: { value: "test" } }), ).not.toThrow(); }); it("should render input element", () => { const { container } = render(); const input = container.querySelector("input"); expect(input).not.toBeNull(); }); }); describe("CustomTimeInput", () => { it("should call onChange when time input value changes", () => { const onChange = jest.fn(); const { container } = render(); const input = container.querySelector("input") as HTMLInputElement; fireEvent.change(input, { target: { value: "12:30" } }); // Line 20: onChange is called expect(onChange).toHaveBeenCalled(); }); it("should not throw when onChange is not provided", () => { const { container } = render(); const input = container.querySelector("input") as HTMLInputElement; expect(() => fireEvent.change(input, { target: { value: "10:00" } }), ).not.toThrow(); }); it("should render input element", () => { const { container } = render(); const input = container.querySelector("input"); expect(input).not.toBeNull(); }); });