import { composeStories } from "@storybook/react"
import { screen } from "@testing-library/react"
import React from "react"
import { expect, describe, test } from "vitest"
import { render } from "../../../tests/render"
import * as stories from "./Link.stories"
const { Default } = composeStories(stories)
describe("Link", () => {
describe("preserves href", () => {
test("absolute", () => {
render(Foobar)
const link = screen.getByRole("link", { name: "Foobar" })
expect(link).toHaveAttribute("href", "http://example.com/")
})
test("absolute - traling slash", () => {
render(Foobar)
const link = screen.getByRole("link", { name: "Foobar" })
expect(link).toHaveAttribute("href", "http://example.com/")
})
})
describe("url sanitization", () => {
test("sanitizes email", () => {
render(Foobar)
const link = screen.getByRole("link", { name: "Foobar" })
expect(link).toHaveAttribute("href", "mailto:hello@example.com")
})
test("sanitizes absolute paths", () => {
render(Foobar)
const link = screen.getByRole("link", { name: "Foobar" })
expect(link).toHaveAttribute("href", "/example-path?query=1")
})
test("sanitizes javascript", () => {
render(Foobar)
const link = screen.getByRole("link", { name: "Foobar" })
expect(link).toHaveAttribute("href", "about:blank")
})
test("sanitizes encoded javascript", () => {
render(
Foobar
,
)
const link = screen.getByRole("link", { name: "Foobar" })
expect(link).toHaveAttribute("href", "about:blank")
})
})
describe("rel & target properties", () => {
test("addspropertries to external urls by default", () => {
render()
const link = screen.getByRole("link", { name: "OpenSea" })
expect(link).toHaveAttribute("target", "_blank")
expect(link).toHaveAttribute("rel", "nofollow noopener")
})
test("does not add propertries to external urls when overriden", () => {
render()
const link = screen.getByRole("link", { name: "OpenSea" })
expect(link).toHaveAttribute("target", "")
expect(link).toHaveAttribute("rel", "")
})
})
})