import React from "react" import { beforeEach, describe, expect, test, vi } from "vitest" import { cleanup, render } from "@testing-library/react" import { MainNavProvider } from "../main-nav" // Mock functions const mockGetNavDropdownItems = vi.fn((options: unknown) => [ { title: "Test Item", path: "/test", }, ]) vi.mock("docs-ui", () => ({ getNavDropdownItems: (options: unknown) => mockGetNavDropdownItems(options), MainNavProvider: ({ children, navItems }: { children: React.ReactNode; navItems: unknown[] }) => (
{children}
), })) vi.mock("@/config", () => ({ config: { baseUrl: "https://test.com", }, })) describe("MainNavProvider", () => { beforeEach(() => { vi.clearAllMocks() cleanup() }) describe("rendering", () => { test("renders children", () => { const { getByText } = render(
Test Content
) expect(getByText("Test Content")).toBeInTheDocument() }) test("renders UiMainNavProvider with navItems", () => { const { getByTestId } = render(
Test
) const uiProvider = getByTestId("ui-main-nav-provider") expect(uiProvider).toBeInTheDocument() expect(mockGetNavDropdownItems).toHaveBeenCalledWith({ basePath: "https://test.com", }) }) }) describe("navigationDropdownItems", () => { test("memoizes navigationDropdownItems", () => { const { rerender } = render(
Test
) const callCount = mockGetNavDropdownItems.mock.calls.length rerender(
Test
) // Should not call getNavDropdownItems again due to memoization expect(mockGetNavDropdownItems.mock.calls.length).toBe(callCount) }) }) })