Files
plainleaf/client/lib/url_prefix.test.ts
T

149 lines
5.3 KiB
TypeScript

import { expect, test } from "vitest";
import { applyUrlPrefix, removeUrlPrefix } from "./url_prefix.ts";
test("url_prefix - removeUrlPrefix - with value", async () => {
// Absolute URL, present, should be removed
expect(removeUrlPrefix("http://myserver/sb/relevant", "/sb")).toEqual(
"http://myserver/relevant",
);
expect(removeUrlPrefix("https://myserver/sb/relevant", "/sb")).toEqual(
"https://myserver/relevant",
);
// Absolute URL, present, should only remove leading
expect(removeUrlPrefix("http://myserver/sb/sb/relevant/sb", "/sb")).toEqual(
"http://myserver/sb/relevant/sb",
);
expect(removeUrlPrefix("http://myserver/relevant/sb", "/sb")).toEqual(
"http://myserver/relevant/sb",
);
// Absolute URL, absent, should be untouched
expect(removeUrlPrefix("http://myserver/other/relevant", "/sb")).toEqual(
"http://myserver/other/relevant",
);
expect(removeUrlPrefix("https://myserver/other/relevant", "/sb")).toEqual(
"https://myserver/other/relevant",
);
// Absolute URL, queryString, should be preserved
expect(
removeUrlPrefix("http://myserver/sb/sb/relevant/sb?param=arg", "/sb"),
).toEqual("http://myserver/sb/relevant/sb?param=arg");
// Absolute URL, unsupported, should be untouched
expect(removeUrlPrefix("ftp://myserver/sb/relevant", "/sb")).toEqual(
"ftp://myserver/sb/relevant",
);
// Host-Relative URL, present, should be removed
expect(removeUrlPrefix("/sb/relevant", "/sb")).toEqual("/relevant");
// Host-Relative URL, present, should only remove leading
expect(removeUrlPrefix("/sb/sb/relevant/sb", "/sb")).toEqual(
"/sb/relevant/sb",
);
expect(removeUrlPrefix("/relevant/sb", "/sb")).toEqual("/relevant/sb");
// Host-Relative URL, queryString, should be preserved
expect(removeUrlPrefix("/sb/sb/relevant/sb?param=arg", "/sb")).toEqual(
"/sb/relevant/sb?param=arg",
);
expect(removeUrlPrefix("/relevant/sb?param=arg", "/sb")).toEqual(
"/relevant/sb?param=arg",
);
// Host-Relative URL, absent, should be untouched
expect(removeUrlPrefix("/other/relevant", "/sb")).toEqual("/other/relevant");
// Page-Relative URL, should be untouched
expect(removeUrlPrefix("sb/relevant", "/sb")).toEqual("sb/relevant");
});
test("url_prefix - removeUrlPrefix - no value", async () => {
// Absolute URL, should be untouched
expect(removeUrlPrefix("http://myserver/sb/relevant", "")).toEqual(
"http://myserver/sb/relevant",
);
expect(removeUrlPrefix("https://myserver/sb/relevant")).toEqual(
"https://myserver/sb/relevant",
);
// Host-Relative URL, should be untouched
expect(removeUrlPrefix("/sb/relevant", "")).toEqual("/sb/relevant");
expect(removeUrlPrefix("/sb/relevant")).toEqual("/sb/relevant");
// Page-Relative URL, should be untouched
expect(removeUrlPrefix("sb/relevant", "")).toEqual("sb/relevant");
expect(removeUrlPrefix("sb/relevant")).toEqual("sb/relevant");
});
test("url_prefix - applyUrlPrefix - with value", async () => {
// string, Absolute URL, should be prefixed
expect(applyUrlPrefix("http://myserver/relevant", "/sb")).toEqual(
"http://myserver/sb/relevant",
);
expect(applyUrlPrefix("https://myserver/relevant", "/sb")).toEqual(
"https://myserver/sb/relevant",
);
// string, Absolute URL, should not care about dups
expect(applyUrlPrefix("http://myserver/sb/relevant/sb", "/sb")).toEqual(
"http://myserver/sb/sb/relevant/sb",
);
// string, Absolute URL, queryString should be preserved
expect(
applyUrlPrefix("http://myserver/sb/relevant/sb?param=arg", "/sb"),
).toEqual("http://myserver/sb/sb/relevant/sb?param=arg");
// string, Absolute URL, unsupported, should be untouched
expect(applyUrlPrefix("ftp://myserver/relevant", "/sb")).toEqual(
"ftp://myserver/relevant",
);
// string, Host-Relative URL, should be prefixed
expect(applyUrlPrefix("/relevant", "/sb")).toEqual("/sb/relevant");
// string, Host-Relative URL, should not care about dups
expect(applyUrlPrefix("/sb/relevant/sb", "/sb")).toEqual(
"/sb/sb/relevant/sb",
);
// string, Host-Relative URL, queryString should be preserved
expect(applyUrlPrefix("/sb/relevant/sb?param=arg", "/sb")).toEqual(
"/sb/sb/relevant/sb?param=arg",
);
// string, Page-Relative URL, should be untouched
expect(applyUrlPrefix("relevant", "/sb")).toEqual("relevant");
// URL object, Absolute URL, should be prefixed
expect(applyUrlPrefix(new URL("http://myserver/relevant"), "/sb")).toEqual(
new URL("http://myserver/sb/relevant"),
);
// URL object, Absolute URL, queryString should be preserved
expect(
applyUrlPrefix(new URL("http://myserver/relevant?param=arg"), "/sb"),
).toEqual(new URL("http://myserver/sb/relevant?param=arg"));
});
test("url_prefix - applyUrlPrefix - no value", async () => {
// Absolute URL, should be untouched
expect(applyUrlPrefix("http://myserver/relevant", "")).toEqual(
"http://myserver/relevant",
);
expect(applyUrlPrefix("https://myserver/relevant")).toEqual(
"https://myserver/relevant",
);
// Host-Relative URL, should be untouched
expect(applyUrlPrefix("/relevant", "")).toEqual("/relevant");
expect(applyUrlPrefix("/relevant")).toEqual("/relevant");
// Page-Relative URL, should be untouched
expect(applyUrlPrefix("relevant", "")).toEqual("relevant");
expect(applyUrlPrefix("relevant")).toEqual("relevant");
});