import { render, fireEvent } from "@testing-library/react"; import React from "react"; import CalendarIcon from "../calendar_icon"; import { IconParkSolidApplication } from "./helper_components/calendar_icon"; import { safeQuerySelector } from "./test_utils"; describe("CalendarIcon", () => { let onClickMock: jest.Mock; beforeEach(() => { onClickMock = jest.fn(); }); afterEach(() => { onClickMock.mockClear(); }); it("renders a custom SVG icon when provided", () => { const { container } = render( } />, ); expect( container.querySelectorAll('[data-testid="icon-park-solid-application"]'), ).toHaveLength(1); }); it("renders a FontAwesome icon when provided", () => { const { container } = render(); expect(container.querySelectorAll("i.fa-example-icon")).toHaveLength(1); }); it("renders a default SVG icon when no icon is provided", () => { const { container } = render(); expect( container.querySelectorAll("svg.react-datepicker__calendar-icon"), ).toHaveLength(1); }); it("should fire onClick event when the icon is clicked", () => { const { container } = render(); const icon = safeQuerySelector( container, "svg.react-datepicker__calendar-icon", ); fireEvent.click(icon); expect(onClickMock).toHaveBeenCalledTimes(1); }); it("should fire onClick event on the click of font-awesome icon when provided", () => { const { container } = render( , ); const icon = safeQuerySelector(container, "i.fa-example-icon"); fireEvent.click(icon); expect(onClickMock).toHaveBeenCalledTimes(1); }); it("should fire onClick event on the click of custom icon component when provided", () => { const onClickCustomIcon = jest.fn(); const { container } = render( } onClick={onClickMock} />, ); const icon = safeQuerySelector( container, "svg.react-datepicker__calendar-icon", ); fireEvent.click(icon); expect(onClickMock).toHaveBeenCalledTimes(1); expect(onClickCustomIcon).toHaveBeenCalledTimes(1); }); it("should fire only custom icon onClick when CalendarIcon onClick is not provided", () => { const onClickCustomIcon = jest.fn(); const { container } = render( } />, ); const icon = safeQuerySelector( container, "svg.react-datepicker__calendar-icon", ); fireEvent.click(icon); // Lines 55-57: custom icon onClick is called expect(onClickCustomIcon).toHaveBeenCalledTimes(1); }); it("should fire only CalendarIcon onClick when custom icon onClick is not provided", () => { const { container } = render( } onClick={onClickMock} />, ); const icon = safeQuerySelector( container, "svg.react-datepicker__calendar-icon", ); fireEvent.click(icon); // Lines 59-61: CalendarIcon onClick is called expect(onClickMock).toHaveBeenCalledTimes(1); }); it("should handle custom icon without onClick prop", () => { const { container } = render( } />, ); const icon = safeQuerySelector( container, "svg.react-datepicker__calendar-icon", ); // Should not throw when clicking without any onClick handlers expect(() => fireEvent.click(icon)).not.toThrow(); }); it("should apply className to custom icon", () => { const { container } = render( } className="custom-class" />, ); const icon = container.querySelector(".custom-class"); expect(icon).not.toBeNull(); }); it("should apply className to string icon", () => { const { container } = render( , ); const icon = container.querySelector("i.custom-class"); expect(icon).not.toBeNull(); }); it("should apply className to default SVG icon", () => { const { container } = render(); const icon = container.querySelector("svg.custom-class"); expect(icon).not.toBeNull(); }); });