import { url } from "../build/cjs/url"; import expect = require("expect.js"); const loc: any = {}; describe("url", () => { it("works with undefined", () => { loc.hostname = "woot.com"; loc.protocol = "https:"; loc.port = 4005; loc.host = loc.hostname + ":" + loc.port; const parsed = url(undefined, undefined, loc); expect(parsed.host).to.be("woot.com"); expect(parsed.protocol).to.be("https"); expect(parsed.port).to.be("4005"); }); it("works with relative paths", () => { loc.hostname = "woot.com"; loc.protocol = "https:"; loc.port = 3000; loc.host = loc.hostname + ":" + loc.port; const parsed = url("/test", undefined, loc); expect(parsed.host).to.be("woot.com"); expect(parsed.protocol).to.be("https"); expect(parsed.port).to.be("3000"); }); it("works with no protocol", () => { loc.protocol = "http:"; const parsed = url("localhost:3000", undefined, loc); expect(parsed.host).to.be("localhost"); expect(parsed.port).to.be("3000"); expect(parsed.protocol).to.be("http"); }); it("works with no schema", () => { loc.protocol = "http:"; const parsed = url("//localhost:3000", undefined, loc); expect(parsed.host).to.be("localhost"); expect(parsed.port).to.be("3000"); expect(parsed.protocol).to.be("http"); }); it("forces ports for unique url ids", () => { const id1 = url("http://google.com:80/"); const id2 = url("http://google.com/"); const id3 = url("https://google.com/"); const id4 = url("http://google.com/", "/test"); expect(id1.id).to.be(id2.id); expect(id1.id).to.not.be(id3.id); expect(id2.id).to.not.be(id3.id); expect(id2.id).to.not.be(id4.id); }); it("identifies the namespace", () => { loc.protocol = "http:"; loc.hostname = "woot.com"; expect(url("/woot", undefined, loc).path).to.be("/woot"); expect(url("http://google.com").path).to.be("/"); expect(url("http://google.com/").path).to.be("/"); }); it("works with ipv6", () => { const parsed = url("http://[::1]"); expect(parsed.protocol).to.be("http"); expect(parsed.host).to.be("::1"); expect(parsed.port).to.be("80"); expect(parsed.id).to.be("http://[::1]:80"); }); it("works with ipv6 location", () => { loc.protocol = "http:"; loc.hostname = "[::1]"; loc.port = ""; loc.host = loc.hostname + ":" + loc.port; const parsed = url(undefined, undefined, loc); expect(parsed.protocol).to.be("http"); expect(parsed.host).to.be("::1"); expect(parsed.port).to.be("80"); expect(parsed.id).to.be("http://[::1]:80"); }); it("works with a custom path", function () { const parsed = url("https://woot.com/some-namespace", "/some-path"); expect(parsed.id).to.be("https://woot.com:443/some-path"); expect(parsed.path).to.be("/some-namespace"); }); });