fastify-openapi-glue
Version: 
generate a fastify configuration from an openapi specification
76 lines (67 loc) • 1.89 kB
JavaScript
import { createRequire } from "node:module";
import { test } from "node:test";
import Fastify from "fastify";
import fastifyOpenapiGlue from "../index.js";
const importJSON = createRequire(import.meta.url);
const testSpec = await importJSON("./test-openapi.v3.json");
test("return route params from operationResolver", async (t) => {
	const fastify = Fastify();
	fastify.register(fastifyOpenapiGlue, {
		specification: testSpec,
		operationResolver: () => {
			return {
				onSend: async (_req, res) => {
					res.code(304);
					return null;
				},
				handler: async () => {
					return { hello: "world" };
				},
			};
		},
	});
	const res = await fastify.inject({
		method: "GET",
		url: "/queryParamObject?int1=1&int2=2",
	});
	t.assert.equal(res.statusCode, 304);
});
test("operationResolver route params overwrite default params", async (t) => {
	const fastify = Fastify();
	fastify.register(fastifyOpenapiGlue, {
		specification: testSpec,
		operationResolver: () => {
			return {
				config: { foo: "bar" },
				handler: async (req) => {
					return req.routeOptions.config;
				},
			};
		},
	});
	const res = await fastify.inject({
		method: "GET",
		url: "/queryParamObject?int1=1&int2=2",
	});
	t.assert.equal(res.statusCode, 200);
	t.assert.equal(JSON.parse(res.body)?.foo, "bar");
});
test("throw an error if handler is not specified", async (t) => {
	const fastify = Fastify();
	fastify.register(fastifyOpenapiGlue, {
		specification: testSpec,
		operationResolver: () => ({}),
	});
	const res = await fastify.inject({
		method: "GET",
		url: "/queryParamObject?int1=1&int2=2",
	});
	t.assert.equal(res.statusCode, 500);
	const parsedBody = JSON.parse(res.body);
	t.assert.equal(parsedBody?.statusCode, 500);
	t.assert.equal(parsedBody?.error, "Internal Server Error");
	t.assert.equal(
		parsedBody?.message,
		"Operation getQueryParamObject not implemented",
	);
});