import type {UserEvent} from "@testing-library/user-event";
import * as React from "react";
import {render} from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import {HeroUIProvider} from "@heroui/system";
import {Link} from "../src";
describe("Link", () => {
let user: UserEvent;
beforeEach(() => {
user = userEvent.setup();
});
it("should render correctly", () => {
const wrapper = render();
expect(() => wrapper.unmount()).not.toThrow();
});
it("ref should be forwarded", () => {
const ref = React.createRef();
render();
expect(ref.current).not.toBeNull();
});
it("should be no errors when href missing", () => {
const wrapper = render(Link);
expect(() => wrapper.unmount()).not.toThrow();
});
it('should show a link icon when "showAnchorIcon" is true', () => {
const {container} = render(
Link
,
);
expect(container.querySelector("svg")).not.toBeNull();
});
it("should trigger onPress function", async () => {
const onPress = jest.fn();
const {getByRole} = render();
const link = getByRole("link");
await user.click(link);
expect(onPress).toHaveBeenCalled();
});
it("should trigger onClick function", async () => {
const onClick = jest.fn();
const {getByRole} = render();
const link = getByRole("link");
await user.click(link);
expect(onClick).toHaveBeenCalled();
});
it('should have target="_blank" and rel="noopener noreferrer" when "isExternal" is true', () => {
const {container} = render(
Link
,
);
expect(container.querySelector("a")?.rel).toBe("noopener noreferrer");
expect(container.querySelector("a")?.target).toBe("_blank");
});
it('should have role="link" when "as" is different from "a"', () => {
const {container} = render(
Link
,
);
expect(container.querySelector("button")?.getAttribute("role")).toBe("link");
});
it("should apply useHref from provider", () => {
const useHref = (href: string) => `/example${href}`;
const {getByRole} = render(
Test Link
,
);
const link = getByRole("link");
expect(link.getAttribute("href")).toBe("/example/test");
});
});