diff --git a/backend/src/middleware/__tests__/validation.test.ts b/backend/src/middleware/__tests__/validation.test.ts new file mode 100644 index 00000000..9656727c --- /dev/null +++ b/backend/src/middleware/__tests__/validation.test.ts @@ -0,0 +1,54 @@ +import { describe, expect, it, vi } from 'vitest'; +import type { Request, Response } from 'express'; +import { z } from 'zod'; +import { commonSchemas, validateAndSanitize } from '../validation.js'; + +function req(overrides: Partial): Request { + return { + body: {}, + query: {}, + params: {}, + headers: {}, + ...overrides, + } as Request; +} + +describe('validation middleware', () => { + it('sanitizes and validates body, query, and params', () => { + const request = req({ + body: { email: ' USER@EXAMPLE.COM ', note: 'paid' }, + query: { page: '2', limit: '10' }, + params: { id: 'payment_123' }, + }); + const next = vi.fn(); + + validateAndSanitize({ + body: z.object({ + email: commonSchemas.email, + note: z.string().max(100), + }), + query: commonSchemas.pagination, + params: z.object({ id: commonSchemas.id }), + })(request, {} as Response, next); + + expect(next).toHaveBeenCalledWith(); + expect(request.body.email).toBe('user@example.com'); + expect(request.body.note).not.toContain('