import React from "react"; import { render, fireEvent } from "@testing-library/react"; import HeaderEditorSwitcher from "./HeaderEditorSwitcher"; import "@testing-library/jest-dom"; describe("HeaderEditorSwitcher", () => { const mockOnClick = jest.fn(); const defaultProps = { prefix: "Prefix", title: "Title", titleTestId: "titleTestId", active: false, onClick: mockOnClick, }; it("renders with correct props", () => { const { getByText } = render(); const testIdElement = document.getElementsByClassName( defaultProps.titleTestId, ); expect(getByText("Prefix /")).toBeInTheDocument(); expect(getByText(defaultProps.title)).toBeInTheDocument(); expect(testIdElement).toBeDefined(); }); it("renders active state correctly", () => { const { getByText } = render( , ); expect(getByText("Prefix /")).toHaveStyle( "background-color: var(--ads-v2-color-bg-subtle)", ); }); it("calls onClick handler when clicked", () => { const { getByText } = render(); fireEvent.click(getByText("Title")); expect(mockOnClick).toHaveBeenCalled(); }); it("forwards ref correctly", () => { const ref = React.createRef(); render(); expect(ref.current).toBeTruthy(); }); it("does not crash when onClick is not provided", () => { const { getByText } = render( , ); fireEvent.click(getByText("Title")); // Should not throw error }); it("does not show separator and applies different inactive color to icon", () => { const ref = React.createRef(); const { container, getByTestId } = render( , ); const icon = container.querySelector(".remixicon-icon"); // Get chevron icon expect(getByTestId("root-div")).toHaveTextContent("Prefix"); expect(icon).toHaveAttribute( "fill", "var(--ads-v2-colors-content-label-inactive-fg)", ); }); it("forwards additional props correctly", () => { const testId = "test-id"; const className = "custom-class"; const { container } = render( , ); const firstDiv = container.querySelector("div"); // Get the first div element const classNames = firstDiv?.getAttribute("class")?.split(" ") || []; expect(firstDiv).toHaveAttribute("data-testid", testId); // Check if data-testid prop is applied expect(classNames).toContain(className); // Check if className prop is applied expect(classNames).toContain("flex"); // Check if internal classes still exists expect(classNames).toContain("align-center"); // Check if internal classes still exists expect(classNames).toContain("justify-center"); // Check if internal classes still exists }); });