mirror of
https://github.com/fosrl/pangolin.git
synced 2026-09-19 17:19:58 +02:00
135 lines
3.6 KiB
TypeScript
135 lines
3.6 KiB
TypeScript
import { assertEquals } from "../../../test/assert";
|
|
import { rewriteRequestPath } from "./middleware";
|
|
|
|
function runTests() {
|
|
console.log("Running rewriteRequestPath tests...");
|
|
|
|
// no rewrite configured
|
|
assertEquals(
|
|
rewriteRequestPath("/a/b", "/a", "prefix", null, null),
|
|
"/a/b",
|
|
"no rewrite type"
|
|
);
|
|
|
|
// exact rewrite
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "exact", "/new", "exact"),
|
|
"/new",
|
|
"exact -> exact"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old/x", "/old", "exact", "/new", "exact"),
|
|
"/old/x",
|
|
"exact rewrite only on exact match"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "exact", "new", "exact"),
|
|
"/new",
|
|
"leading slash added to rewrite"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/anything", null, null, "/new", "exact"),
|
|
"/new",
|
|
"no match path + exact rewrite replaces path"
|
|
);
|
|
|
|
// prefix rewrite
|
|
assertEquals(
|
|
rewriteRequestPath("/old/a/b", "/old", "prefix", "/new", "prefix"),
|
|
"/new/a/b",
|
|
"prefix -> prefix keeps rest"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "prefix", "/new", "prefix"),
|
|
"/new",
|
|
"prefix -> prefix bare"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "exact", "/new", "prefix"),
|
|
"/new",
|
|
"exact -> prefix"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath(
|
|
"/api/v1/users",
|
|
"^/api/v1/(.*)",
|
|
"regex",
|
|
"/v2/$1",
|
|
"prefix"
|
|
),
|
|
"/v2/users",
|
|
"regex -> prefix uses capture"
|
|
);
|
|
|
|
// regex rewrite
|
|
assertEquals(
|
|
rewriteRequestPath(
|
|
"/blog/2020/post",
|
|
"^/blog/(\\d+)/(.*)$",
|
|
"regex",
|
|
"/archive/$2-$1",
|
|
"regex"
|
|
),
|
|
"/archive/post-2020",
|
|
"regex -> regex"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old/x", "/old", "prefix", "/new$1", "regex"),
|
|
"/new/x",
|
|
"prefix -> regex has (.*) capture"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "exact", "/new", "regex"),
|
|
"/new",
|
|
"exact -> regex"
|
|
);
|
|
|
|
// stripPrefix
|
|
assertEquals(
|
|
rewriteRequestPath("/old/a", "/old", "prefix", null, "stripPrefix"),
|
|
"/a",
|
|
"stripPrefix"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "prefix", null, "stripPrefix"),
|
|
"/",
|
|
"stripPrefix to root"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old/a", "/old", "prefix", "/new", "stripPrefix"),
|
|
"/new/a",
|
|
"stripPrefix + addPrefix"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old", "/old", "exact", null, "stripPrefix"),
|
|
"/",
|
|
"stripPrefix exact"
|
|
);
|
|
// Same result the replacePathRegex middleware produces for this config
|
|
// (regex `^/old` -> `/`), quirky double slash included.
|
|
assertEquals(
|
|
rewriteRequestPath("/old/a", "^/old", "regex", null, "stripPrefix"),
|
|
"//a",
|
|
"stripPrefix regex mirrors Traefik"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/old/a", "^/old/", "regex", null, "stripPrefix"),
|
|
"/a",
|
|
"stripPrefix regex with trailing slash"
|
|
);
|
|
assertEquals(
|
|
rewriteRequestPath("/a/b", null, null, null, "stripPrefix"),
|
|
"/a/b",
|
|
"stripPrefix without match path is a no-op"
|
|
);
|
|
|
|
console.log("All rewriteRequestPath tests passed!");
|
|
}
|
|
|
|
try {
|
|
runTests();
|
|
} catch (error) {
|
|
console.error("Test failed:", error);
|
|
process.exit(1);
|
|
}
|