mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Add support for running under a context path, ie. /bonob, replace BONOB_WEB_ADDRESS with BONOB_URL
This commit is contained in:
212
tests/url_builder.test.ts
Normal file
212
tests/url_builder.test.ts
Normal file
@@ -0,0 +1,212 @@
|
||||
import url from "../src/url_builder";
|
||||
|
||||
describe("URLBuilder", () => {
|
||||
describe("construction", () => {
|
||||
it("with a string", () => {
|
||||
expect(url("http://example.com/").href()).toEqual("http://example.com/");
|
||||
expect(url("http://example.com/foobar?name=bob").href()).toEqual(
|
||||
"http://example.com/foobar?name=bob"
|
||||
);
|
||||
});
|
||||
|
||||
it("with a URL", () => {
|
||||
expect(url(new URL("http://example.com/")).href()).toEqual(
|
||||
"http://example.com/"
|
||||
);
|
||||
expect(url(new URL("http://example.com/foobar?name=bob")).href()).toEqual(
|
||||
"http://example.com/foobar?name=bob"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("toString", () => {
|
||||
it("should print the href", () => {
|
||||
expect(`${url("http://example.com/")}`).toEqual("http://example.com/");
|
||||
expect(`${url("http://example.com/foobar?name=bob")}`).toEqual(
|
||||
"http://example.com/foobar?name=bob"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("path", () => {
|
||||
it("should be the pathname and search", () => {
|
||||
expect(url("http://example.com/").path()).toEqual("/");
|
||||
expect(url("http://example.com/?whoop=ie").path()).toEqual("/?whoop=ie");
|
||||
expect(url("http://example.com/foo/bar").path()).toEqual("/foo/bar");
|
||||
expect(url("http://example.com/with/search?q=bob&s=100").path()).toEqual("/with/search?q=bob&s=100");
|
||||
expect(url("http://example.com/drops/hash#1234").path()).toEqual("/drops/hash");
|
||||
});
|
||||
});
|
||||
|
||||
describe("updating the pathname", () => {
|
||||
describe("appending", () => {
|
||||
describe("when there is no existing pathname", ()=>{
|
||||
it("should return a new URLBuilder with the new pathname appended to the existing pathname", () => {
|
||||
const original = url("https://example.com?a=b");
|
||||
const updated = original.append({ pathname: "/the-appended-path" });
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/?a=b");
|
||||
expect(original.pathname()).toEqual("/")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/the-appended-path?a=b");
|
||||
expect(updated.pathname()).toEqual("/the-appended-path")
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the existing pathname is /", ()=>{
|
||||
it("should return a new URLBuilder with the new pathname appended to the existing pathname", () => {
|
||||
const original = url("https://example.com/");
|
||||
const updated = original.append({ pathname: "/the-appended-path" });
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/");
|
||||
expect(original.pathname()).toEqual("/")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/the-appended-path");
|
||||
expect(updated.pathname()).toEqual("/the-appended-path")
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the existing pathname is /first-path", ()=>{
|
||||
it("should return a new URLBuilder with the new pathname appended to the existing pathname", () => {
|
||||
const original = url("https://example.com/first-path");
|
||||
const updated = original.append({ pathname: "/the-appended-path" });
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/first-path");
|
||||
expect(original.pathname()).toEqual("/first-path")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/first-path/the-appended-path");
|
||||
expect(updated.pathname()).toEqual("/first-path/the-appended-path")
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the existing pathname is /first-path/", ()=>{
|
||||
it("should return a new URLBuilder with the new pathname appended to the existing pathname", () => {
|
||||
const original = url("https://example.com/first-path/");
|
||||
const updated = original.append({ pathname: "/the-appended-path" });
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/first-path/");
|
||||
expect(original.pathname()).toEqual("/first-path/")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/first-path/the-appended-path");
|
||||
expect(updated.pathname()).toEqual("/first-path/the-appended-path")
|
||||
});
|
||||
});
|
||||
|
||||
it("should return a new URLBuilder with the new pathname appended to the existing pathname", () => {
|
||||
const original = url("https://example.com/some-path?a=b");
|
||||
const updated = original.append({ pathname: "/some-new-path" });
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b");
|
||||
expect(original.pathname()).toEqual("/some-path")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path/some-new-path?a=b");
|
||||
expect(updated.pathname()).toEqual("/some-path/some-new-path")
|
||||
});
|
||||
});
|
||||
|
||||
describe("replacing", () => {
|
||||
it("should return a new URLBuilder with the new pathname", () => {
|
||||
const original = url("https://example.com/some-path?a=b");
|
||||
const updated = original.with({ pathname: "/some-new-path" });
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b");
|
||||
expect(original.pathname()).toEqual("/some-path")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-new-path?a=b");
|
||||
expect(updated.pathname()).toEqual("/some-new-path")
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("updating search params", () => {
|
||||
describe("appending", () => {
|
||||
describe("with records", () => {
|
||||
it("should return a new URLBuilder with the new search params appended", () => {
|
||||
const original = url("https://example.com/some-path?a=b&c=d");
|
||||
const updated = original.append({
|
||||
searchParams: { x: "y", z: "1" },
|
||||
});
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b&c=d");
|
||||
expect(`${original.searchParams()}`).toEqual("a=b&c=d")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path?a=b&c=d&x=y&z=1");
|
||||
expect(`${updated.searchParams()}`).toEqual("a=b&c=d&x=y&z=1")
|
||||
});
|
||||
});
|
||||
|
||||
describe("with URLSearchParams", () => {
|
||||
it("should return a new URLBuilder with the new search params appended", () => {
|
||||
const original = url("https://example.com/some-path?a=b&c=d");
|
||||
const updated = original.append({
|
||||
searchParams: new URLSearchParams({ x: "y", z: "1" }),
|
||||
});
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b&c=d");
|
||||
expect(`${original.searchParams()}`).toEqual("a=b&c=d")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path?a=b&c=d&x=y&z=1");
|
||||
expect(`${updated.searchParams()}`).toEqual("a=b&c=d&x=y&z=1")
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("replacing", () => {
|
||||
describe("with records", () => {
|
||||
it("should be able to remove all search params", () => {
|
||||
const original = url("https://example.com/some-path?a=b&c=d");
|
||||
const updated = original.with({
|
||||
searchParams: {},
|
||||
});
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b&c=d");
|
||||
expect(`${original.searchParams()}`).toEqual("a=b&c=d")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path");
|
||||
expect(`${updated.searchParams()}`).toEqual("")
|
||||
});
|
||||
|
||||
it("should return a new URLBuilder with the new search params", () => {
|
||||
const original = url("https://example.com/some-path?a=b&c=d");
|
||||
const updated = original.with({
|
||||
searchParams: { x: "y", z: "1" },
|
||||
});
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b&c=d");
|
||||
expect(`${original.searchParams()}`).toEqual("a=b&c=d")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path?x=y&z=1");
|
||||
expect(`${updated.searchParams()}`).toEqual("x=y&z=1")
|
||||
});
|
||||
});
|
||||
|
||||
describe("with URLSearchParams", () => {
|
||||
it("should be able to remove all search params", () => {
|
||||
const original = url("https://example.com/some-path?a=b&c=d");
|
||||
const updated = original.with({
|
||||
searchParams: new URLSearchParams({}),
|
||||
});
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b&c=d");
|
||||
expect(`${original.searchParams()}`).toEqual("a=b&c=d")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path");
|
||||
expect(`${updated.searchParams()}`).toEqual("")
|
||||
});
|
||||
|
||||
it("should return a new URLBuilder with the new search params", () => {
|
||||
const original = url("https://example.com/some-path?a=b&c=d");
|
||||
const updated = original.with({
|
||||
searchParams: new URLSearchParams({ x: "y", z: "1" }),
|
||||
});
|
||||
|
||||
expect(original.href()).toEqual("https://example.com/some-path?a=b&c=d");
|
||||
expect(`${original.searchParams()}`).toEqual("a=b&c=d")
|
||||
|
||||
expect(updated.href()).toEqual("https://example.com/some-path?x=y&z=1");
|
||||
expect(`${updated.searchParams()}`).toEqual("x=y&z=1")
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user