91 lines
3.2 KiB
TypeScript
91 lines
3.2 KiB
TypeScript
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
import { createOpenAPIRegistry } from "@suaveplan/api-openapi";
|
|
import { createPluginContext } from "@suaveplan/api-plugin";
|
|
import { EventBus } from "@suaveplan/events";
|
|
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
import { createVaultPlugin } from "../../src/plugin/plugin.js";
|
|
import { createMemoryDrive } from "../setup/memory-drive.js";
|
|
|
|
const noopLogger = {
|
|
debug: () => undefined,
|
|
info: () => undefined,
|
|
warn: () => undefined,
|
|
error: () => undefined,
|
|
};
|
|
|
|
describe("openapi-doc", () => {
|
|
it("served doc lists 5 /vault/items routes", {
|
|
timeout: 30_000,
|
|
}, async () => {
|
|
const app = new OpenAPIHono();
|
|
const registry = createOpenAPIRegistry({
|
|
info: { title: "vault-test", version: "0.1.0" },
|
|
});
|
|
const services = new Map<string, unknown>();
|
|
services.set("app", app);
|
|
services.set("openAPIRegistry", registry);
|
|
const plugin = createVaultPlugin({
|
|
storage: createMemoryDrive(),
|
|
applySchemaOnInit: false,
|
|
});
|
|
await plugin.onInit?.(
|
|
createPluginContext({
|
|
logger: noopLogger,
|
|
eventBus: new EventBus(),
|
|
signal: new AbortController().signal,
|
|
config: plugin.defaults as never,
|
|
services,
|
|
})
|
|
);
|
|
const routes = registry.getRoutesByPlugin("vault");
|
|
expect(routes.length).toBe(5);
|
|
|
|
registry.applyTo(app, "/openapi.json");
|
|
const res = await app.request("/openapi.json");
|
|
const doc = (await res.json()) as {
|
|
paths: Record<string, Record<string, unknown>>;
|
|
};
|
|
const vaultPaths = Object.keys(doc.paths).filter((p) =>
|
|
p.startsWith("/vault/")
|
|
);
|
|
expect(vaultPaths.length).toBeGreaterThanOrEqual(2);
|
|
expect(doc.paths["/vault/items"]).toBeDefined();
|
|
expect(doc.paths["/vault/items/{id}"]).toBeDefined();
|
|
});
|
|
|
|
it("served /openapi.json includes 5 /vault/items routes", {
|
|
timeout: 30_000,
|
|
}, async () => {
|
|
const app = new OpenAPIHono();
|
|
const registry = createOpenAPIRegistry({
|
|
info: { title: "vault-test", version: "0.1.0" },
|
|
});
|
|
const services = new Map<string, unknown>();
|
|
services.set("app", app);
|
|
services.set("openAPIRegistry", registry);
|
|
const plugin = createVaultPlugin({
|
|
storage: createMemoryDrive(),
|
|
applySchemaOnInit: false,
|
|
});
|
|
await plugin.onInit?.(
|
|
createPluginContext({
|
|
logger: noopLogger,
|
|
eventBus: new EventBus(),
|
|
signal: new AbortController().signal,
|
|
config: plugin.defaults as never,
|
|
services,
|
|
})
|
|
);
|
|
const methods = registry
|
|
.getRoutesByPlugin("vault")
|
|
.map((r) => `${r.method.toUpperCase()} ${r.path}`);
|
|
expect(methods).toEqual([
|
|
"GET /vault/items",
|
|
"POST /vault/items",
|
|
"GET /vault/items/{id}",
|
|
"PATCH /vault/items/{id}",
|
|
"DELETE /vault/items/{id}",
|
|
]);
|
|
});
|
|
});
|