UNPKG

fastify-type-provider-zod

Version:

Zod Type Provider for Fastify@4

79 lines (67 loc) 1.94 kB
import type { FastifyInstance } from 'fastify'; import Fastify from 'fastify'; import { z } from 'zod'; import type { ZodTypeProvider } from '../src'; import { serializerCompiler, validatorCompiler } from '../src'; describe('response schema', () => { let app: FastifyInstance; beforeAll(async () => { const REQUEST_SCHEMA = z.object({ name: z.string(), }); app = Fastify(); app.setValidatorCompiler(validatorCompiler); app.setSerializerCompiler(serializerCompiler); app.after(() => { app .withTypeProvider<ZodTypeProvider>() .route({ method: 'GET', url: '/', schema: { querystring: REQUEST_SCHEMA, }, handler: (req, res) => { res.send({ name: req.query.name, }); }, }) .route({ method: 'GET', url: '/no-schema', schema: undefined, handler: (req, res) => { res.send({ status: 'ok', }); }, }); }); await app.ready(); }); afterAll(async () => { await app.close(); }); it('accepts correct request', async () => { const response = await app.inject().get('/').query({ name: 'test', }); expect(response.statusCode).toBe(200); expect(response.json()).toEqual({ name: 'test', }); }); it('accepts request on route without schema', async () => { const response = await app.inject().get('/no-schema'); expect(response.statusCode).toBe(200); expect(response.json()).toEqual({ status: 'ok', }); }); it('returns 400 on validation error', async () => { const response = await app.inject().get('/'); expect(response.statusCode).toBe(400); expect(response.json()).toMatchSnapshot(); }); });