43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { normalizeDomainInput } from "@/server/lib/domainUtils";
|
|
import { isValidDomainHost } from "@/types/schemas/domain";
|
|
|
|
describe("isValidDomainHost", () => {
|
|
it("accepts real registrable domains", () => {
|
|
expect(isValidDomainHost("example.com")).toBe(true);
|
|
expect(isValidDomainHost("sub.example.co.uk")).toBe(true);
|
|
expect(isValidDomainHost("openseo.so")).toBe(true);
|
|
});
|
|
|
|
it("rejects fake TLDs, IPs, and bare hosts", () => {
|
|
expect(isValidDomainHost("example.por")).toBe(false);
|
|
expect(isValidDomainHost("localhost")).toBe(false);
|
|
expect(isValidDomainHost("127.0.0.1")).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("normalizeDomainInput", () => {
|
|
it("normalizes a valid domain, stripping protocol/www/path", () => {
|
|
expect(
|
|
normalizeDomainInput("https://www.Example.com/path?q=1", false),
|
|
).toBe("example.com");
|
|
expect(normalizeDomainInput("blog.example.com", true)).toBe(
|
|
"blog.example.com",
|
|
);
|
|
});
|
|
|
|
it("rejects a fake TLD before it can reach DataForSEO", () => {
|
|
expect(() => normalizeDomainInput("victorgomez.por", false)).toThrowError(
|
|
/valid domain/i,
|
|
);
|
|
// Validation must also run on the includeSubdomains=true path.
|
|
expect(() => normalizeDomainInput("victorgomez.por", true)).toThrowError(
|
|
/valid domain/i,
|
|
);
|
|
});
|
|
|
|
it("rejects empty input", () => {
|
|
expect(() => normalizeDomainInput(" ", false)).toThrowError(/required/i);
|
|
});
|
|
});
|