import { cleanup, fireEvent, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import React from "react";
import { Link } from "./link";
import { NavigationHooksContext } from "../navigation/hook";
afterEach(cleanup);
describe("Link Component", () => {
    const navigateMock = vi.fn();
    const mockHooks = {
        useNavigation: () => ({
            navigate: navigateMock,
        }),
        // Other hooks are not used by Link, but we might need to provide them if Link changes
    };
    const Wrapper = ({ children }) => (<NavigationHooksContext.Provider value={mockHooks}>
            {children}
        </NavigationHooksContext.Provider>);
    it("should render correctly", () => {
        render(<Link href="/home">Home</Link>, { wrapper: Wrapper });
        const link = screen.getByText("Home");
        expect(link.getAttribute("href")).toBe("/home");
    });
    it("should navigate on click", () => {
        navigateMock.mockReset();
        render(<Link href="/about">About</Link>, { wrapper: Wrapper });
        const link = screen.getByText("About");
        fireEvent.click(link);
        expect(navigateMock).toHaveBeenCalledTimes(1);
        expect(navigateMock).toHaveBeenCalledWith("/about");
    });
    it("should not navigate if modifier key is pressed", () => {
        navigateMock.mockReset();
        render(<Link href="/contact">Contact</Link>, { wrapper: Wrapper });
        const link = screen.getByText("Contact");
        fireEvent.click(link, { ctrlKey: true });
        expect(navigateMock).toHaveBeenCalledTimes(0);
    });
});
