import { describe, expect, test } from "bun:test"; import { isRouteTemplate, routeTemplate } from "./route-template"; describe("routeTemplate", () => { test("keeps route words and drops every name", () => { expect(routeTemplate("/")).toBe("/"); expect(routeTemplate("/acme")).toBe("/:owner"); expect(routeTemplate("/acme/secret-repo")).toBe("/:owner/:repo"); expect(routeTemplate("/acme/secret-repo/issues/42")).toBe("/:owner/:repo/issues/:n"); expect(routeTemplate("/acme/secret-repo/blob/main/src/hidden.ts")).toBe("/:owner/:repo/blob/:param/:param/:param"); expect(routeTemplate("/acme/secret-repo.git/info/refs")).toBe("/:owner/:repo.git/info/refs"); expect(routeTemplate("/api/v1/repos/acme/secret-repo/pulls/3")).toBe("/api/v1/repos/:param/:param/pulls/:n"); expect(routeTemplate("/settings/tokens")).toBe("/settings/tokens"); expect(routeTemplate("/_serverFn/fns.repos.exploreRepos")).toBe("/_serverFn/fns.repos.exploreRepos"); expect(routeTemplate("/_serverFn/not%20an%20id")).toBe("/_serverFn/:fn"); }); test("recognises its own output only", () => { for (const path of ["/acme/secret/issues/4", "/settings/tokens", "/", "/_serverFn/fns.repos.exploreRepos"]) { expect(isRouteTemplate(routeTemplate(path))).toBe(true); } expect(isRouteTemplate("/acme/secret")).toBe(false); expect(isRouteTemplate("/:owner/:repo/blob/secret.ts")).toBe(false); }); });