PromucFlow_constructor/app/client/src/IDE/Components/HeaderEditorSwitcher.test.tsx
ashit-rath ac4cf98b9d
chore: Pages dropdown common components (#33051)
## Description
Extracts certain building blocks for the IDE into common components to
introduce more reusability in implementation of IDE in other editors

This PR deals with the pages dropdown section only. 

Fixes #33048

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/8919287328>
> Commit: 4d534b4e8df1f240a8f164089893aca8673553e3
> Cypress dashboard url: <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=8919287328&attempt=2"
target="_blank">Click here!</a>

<!-- end of auto-generated comment: Cypress test results  -->












## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No
2024-05-06 12:50:32 +05:30

102 lines
3.2 KiB
TypeScript

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(<HeaderEditorSwitcher {...defaultProps} />);
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(
<HeaderEditorSwitcher {...defaultProps} active />,
);
expect(getByText("Prefix /")).toHaveStyle(
"background-color: var(--ads-v2-color-bg-subtle)",
);
});
it("calls onClick handler when clicked", () => {
const { getByText } = render(<HeaderEditorSwitcher {...defaultProps} />);
fireEvent.click(getByText("Title"));
expect(mockOnClick).toHaveBeenCalled();
});
it("forwards ref correctly", () => {
const ref = React.createRef();
render(<HeaderEditorSwitcher {...defaultProps} ref={ref} />);
expect(ref.current).toBeTruthy();
});
it("does not crash when onClick is not provided", () => {
const { getByText } = render(
<HeaderEditorSwitcher {...defaultProps} onClick={undefined} />,
);
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(
<HeaderEditorSwitcher
{...defaultProps}
data-testid="root-div"
ref={ref}
title={undefined}
/>,
);
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(
<HeaderEditorSwitcher
active
className={className}
data-testid={testId} // Additional prop
prefix="Prefix"
title="Title"
titleTestId="titleTestId"
/>,
);
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
});
});