import test from "node:test"; import assert from "node:assert/strict"; import { cmapRoute, pageRoute, parseWikiRoute } from "../static/js/wiki/routes.js"; test("route builders encode references without changing their identity", () => { assert.equal(pageRoute("notes:een pagina"), "#/notes%3Aeen%20pagina"); assert.equal(cmapRoute("een kaart"), "#cmap/een%20kaart"); }); test("page, CMap and Todo routes decode their parameters", () => { assert.deepEqual(parseWikiRoute("#/notes%3Aeen%20pagina"), { name: "page", slug: "notes:een pagina" }); assert.deepEqual(parseWikiRoute("#cmap/een%20kaart"), { name: "cmap", slug: "een kaart" }); assert.deepEqual(parseWikiRoute("#todo/notes%3Aplanning/12"), { name: "todo", slug: "notes:planning", number: 12 }); }); test("search and fixed special routes have explicit names", () => { assert.deepEqual(parseWikiRoute("#search/een%20term"), { name: "search", query: "een term" }); assert.deepEqual(parseWikiRoute("#profile"), { name: "profile" }); assert.deepEqual(parseWikiRoute("#cmaps"), { name: "cmaps" }); assert.deepEqual(parseWikiRoute("#recent"), { name: "recent" }); assert.deepEqual(parseWikiRoute("#bookmarks"), { name: "bookmarks" }); assert.deepEqual(parseWikiRoute("#todos"), { name: "todos" }); }); test("administration routes remain distinct for permission dispatch", () => { assert.deepEqual(parseWikiRoute("#admin"), { name: "admin" }); assert.deepEqual(parseWikiRoute("#admin/users"), { name: "admin-users" }); assert.deepEqual(parseWikiRoute("#admin/mail"), { name: "admin-mail" }); assert.deepEqual(parseWikiRoute("#admin/aliases"), { name: "admin-aliases" }); assert.deepEqual(parseWikiRoute("#admin/orphaned-uploads"), { name: "admin-orphaned-uploads" }); assert.deepEqual(parseWikiRoute("#admin/archived-cmaps"), { name: "admin-archived-cmaps" }); }); test("empty, incomplete and unknown hashes fall back to home", () => { assert.deepEqual(parseWikiRoute(""), { name: "home" }); assert.deepEqual(parseWikiRoute("#search/"), { name: "home" }); assert.deepEqual(parseWikiRoute("#unknown"), { name: "home" }); });