import { describe, expect, it } from "vitest";
import { isPublicNetworkAddress, normalizePublicSiteUrl } from "./url";

describe("public Site Agent URLs", () => {
  it("normalizes a public HTTPS origin", () => {
    expect(normalizePublicSiteUrl("https://Example.com/a/path?x=1").href).toBe("https://example.com/");
  });

  it("rejects local, private, and non-HTTPS targets", () => {
    expect(() => normalizePublicSiteUrl("http://example.com")).toThrow();
    expect(() => normalizePublicSiteUrl("https://localhost")).toThrow();
    expect(() => normalizePublicSiteUrl("https://192.168.1.10")).toThrow();
    expect(() => normalizePublicSiteUrl("https://user:secret@example.com")).toThrow();
    expect(() => normalizePublicSiteUrl("https://example.com:8443")).toThrow();
  });

  it("recognizes private address ranges", () => {
    expect(isPublicNetworkAddress("8.8.8.8")).toBe(true);
    expect(isPublicNetworkAddress("10.0.0.1")).toBe(false);
    expect(isPublicNetworkAddress("172.20.0.1")).toBe(false);
    expect(isPublicNetworkAddress("::1")).toBe(false);
  });
});
