metatron-open-seo/src/server/lib/domainUtils.test.ts
2026-06-05 15:22:32 -04:00

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);
});
});