Initial Commit
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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}",
|
||||
]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user