import { describe, expect, it } from "vitest";
import { safeHref } from "#lib/safeHref.ts";
describe("safeHref", () => {
it("returns links unchanged", () => {
for (const value of [
"https://tangled.org/about",
"http://example.com",
"example.com/blog",
"mailto:me@example.com",
"ssh://git@github.com/owner/repo.git",
"git@github.com:owner/repo.git",
"http://["
]) {
expect(safeHref(value), value).toBe(value);
}
});
it("drops links the browser would run", () => {
for (const value of [
"javascript:alert(document.domain)",
"JavaScript:alert(1)",
" javascript:alert(1)",
"java\tscript:alert(1)",
"java\nscript:alert(1)",
"\u0001javascript:alert(1)",
"vbscript:msgbox(1)",
"data:text/html,<script>alert(1)</script>"
]) {
expect(safeHref(value), JSON.stringify(value)).toBeUndefined();
}
});
it("drops empty values", () => {
expect(safeHref(undefined)).toBeUndefined();
expect(safeHref("")).toBeUndefined();
});
});