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);
});
});