Files
testapi/tests/routes.test.ts
2026-03-03 14:49:12 +00:00

42 lines
1.5 KiB
TypeScript

import { describe, expect, it } from "bun:test";
import { openApiDocument } from "../src/openapi";
import { matchRoute, routes } from "../src/routes";
describe("route registry", () => {
it("matches concrete paths and extracts route params", () => {
const matched = matchRoute("GET", "/orgs/org_acme/tasks");
expect(matched).not.toBeNull();
expect(matched?.route.operationId).toBe("listOrganizationTasks");
expect(matched?.params).toEqual({ orgId: "org_acme" });
});
it("returns null for unsupported methods and unknown paths", () => {
expect(matchRoute("DELETE", "/tasks/task_1001")).toBeNull();
expect(matchRoute("GET", "/does-not-exist")).toBeNull();
});
it("builds an openapi path entry for every registered route", () => {
const registeredOperations = routes.map(
(route) => `${route.method} ${route.path}:${route.operationId}`,
);
const documentedOperations = Object.entries(openApiDocument.paths).flatMap(
([path, pathItem]) =>
Object.entries(pathItem).map(
([method, operation]) =>
`${method.toUpperCase()} ${path}:${(operation as { operationId?: string }).operationId ?? ""}`,
),
);
expect(documentedOperations).toEqual(registeredOperations);
});
it("keeps spec-serving routes explicit in the registry", () => {
const openApiAliases = routes
.filter((route) => route.servesOpenApiDocument)
.map((route) => route.path);
expect(openApiAliases).toEqual(["/openapi.json", "/swagger.json", "/api-docs"]);
});
});