import { describe, expect, it } from "vitest"; import { dnsRecordNamesMatch, dnsNameToSubdomainLabel, normalizeDnsRecordName, } from "../src/subdomain.js"; const ZONE = "rkns.top"; describe("normalizeDnsRecordName", () => { it("normalizes short labels to FQDN", () => { expect(normalizeDnsRecordName("de", ZONE)).toBe("de.rkns.top"); expect(normalizeDnsRecordName("mhome", ZONE)).toBe("mhome.rkns.top"); }); it("keeps FQDN unchanged", () => { expect(normalizeDnsRecordName("ihome.rkns.top", ZONE)).toBe( "ihome.rkns.top", ); }); it("maps apex forms to zone name", () => { expect(normalizeDnsRecordName("@", ZONE)).toBe("rkns.top"); expect(normalizeDnsRecordName("rkns.top", ZONE)).toBe("rkns.top"); }); it("normalizes nested wildcard relative name to FQDN", () => { expect(normalizeDnsRecordName("*.mdns", ZONE)).toBe("*.mdns.rkns.top"); expect(normalizeDnsRecordName("*.mdns.rkns.top", ZONE)).toBe( "*.mdns.rkns.top", ); }); }); describe("dnsRecordNamesMatch", () => { it("matches short label and FQDN for the same host", () => { expect(dnsRecordNamesMatch("de", "de.rkns.top", ZONE)).toBe(true); expect(dnsRecordNamesMatch("mhome", "mhome.rkns.top", ZONE)).toBe(true); }); it("does not match different hosts", () => { expect(dnsRecordNamesMatch("de", "mhome.rkns.top", ZONE)).toBe(false); }); it("matches nested wildcard relative name and FQDN", () => { expect(dnsRecordNamesMatch("*.mdns", "*.mdns.rkns.top", ZONE)).toBe(true); }); }); describe("dnsNameToSubdomainLabel", () => { it("extracts label from FQDN", () => { expect(dnsNameToSubdomainLabel("de.rkns.top", ZONE)).toBe("de"); }); it("keeps nested wildcard relative names", () => { expect(dnsNameToSubdomainLabel("*.mdns", ZONE)).toBe("*.mdns"); expect(dnsNameToSubdomainLabel("*.mdns.rkns.top", ZONE)).toBe("*.mdns"); }); });