import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { describe, it, expect, vi } from "vitest";
import { MemoryRouter } from "react-router";
import { ContextMenuNavLink } from "#/components/features/context-menu/context-menu-nav-link";
import { I18nKey } from "#/i18n/declaration";
const mockNavItem = {
to: "/settings/test",
icon: Icon,
text: I18nKey.SETTINGS$NAV_API_KEYS,
};
const renderContextMenuNavLink = (item = mockNavItem, onClick = vi.fn()) =>
render(
,
);
describe("ContextMenuNavLink", () => {
it("should render the link with icon and text", () => {
// Arrange & Act
renderContextMenuNavLink();
// Assert
expect(screen.getByRole("link")).toBeInTheDocument();
expect(screen.getByTestId("test-icon")).toBeInTheDocument();
expect(screen.getByText("SETTINGS$NAV_API_KEYS")).toBeInTheDocument();
});
it("should navigate to the correct route", () => {
// Arrange & Act
renderContextMenuNavLink();
// Assert
const link = screen.getByRole("link");
expect(link).toHaveAttribute("href", "/settings/test");
});
it("should call onClick when clicked", async () => {
// Arrange
const user = userEvent.setup();
const onClick = vi.fn();
renderContextMenuNavLink(mockNavItem, onClick);
// Act
await user.click(screen.getByRole("link"));
// Assert
expect(onClick).toHaveBeenCalledTimes(1);
});
});