import { generateURL, sortRoutes } from "./generate-routes.js"; import { formatWithPrettier } from "./utils/prettier.js"; import assert from "node:assert"; describe("generate routes", () => { it("handles a url with params", async () => { assert.strictEqual( await formatWithPrettier(generateURL("EditUser", "/admin/users/:id/edit/")), await formatWithPrettier( `export const EditUserURL = (id: string) => \`/admin/users/\${id}/edit/\`; EditUserURL.params = ["id"]; EditUserURL.rawURL = "/admin/users/:id/edit/";` ) ); }); it("handles polish characters in the url", () => { assert.strictEqual( generateURL("Users", "/admin/użytkownicy/"), `export const UsersURL = "/admin/u%C5%BCytkownicy/";` ); }); it("handles a url with params and diacritics", async () => { assert.strictEqual( await formatWithPrettier(generateURL("EditUser", "/admin/użytkownicy/:id/edit/")), await formatWithPrettier( `export const EditUserURL = (id: string) => \`/admin/u%C5%BCytkownicy/\${id}/edit/\`; EditUserURL.params = ["id"]; EditUserURL.rawURL = "/admin/u%C5%BCytkownicy/:id/edit/";` ) ); }); it("sorts routes from most specific first to least specific last, considering directory structure", () => { assert.deepStrictEqual( sortRoutes( [ "/home", "/foo/:bar/:baz", "/:param1/:param2/:param3", "/foo/bar/baz", "/foo/:bar", "/:param1", ].map((url) => ({ url, })) ).map(({ url }: { url: string }) => url), [ "/home", "/:param1", "/foo/:bar", "/foo/bar/baz", "/foo/:bar/:baz", "/:param1/:param2/:param3", ] ); }); });