import test from 'node:test'; import assert from 'node:assert/strict'; import Fastify from 'fastify'; import { registerEmptyJsonBodyParser } from '../src/body-parser.js'; // Dit is precies wat public/js/core.js's api() vóór de fix altijd deed voor // een DELETE zonder body: Content-Type: application/json meesturen zonder // werkelijke inhoud. Fastify's ingebouwde JSON-parser weigert dat met "Body // cannot be empty when content-type is set to 'application/json'" - vóórdat // er ook maar één hook of route-handler heeft kunnen draaien. Geen enkele // gemockte-pool-test kon dit vangen (die simuleren geen echte HTTP-requests), // vandaar deze losse test tegen een echte Fastify-request-cyclus. test('leeg lichaam met Content-Type: application/json wordt niet geweigerd', async () => { const app = Fastify(); registerEmptyJsonBodyParser(app); app.delete('/thing/:id', async () => ({ ok: true })); await app.ready(); const res = await app.inject({ method: 'DELETE', url: '/thing/1', headers: { 'content-type': 'application/json' }, }); assert.equal(res.statusCode, 200, res.body); assert.deepEqual(res.json(), { ok: true }); await app.close(); }); test('ongeldige JSON in het lichaam geeft nog steeds een nette 400', async () => { const app = Fastify(); registerEmptyJsonBodyParser(app); app.post('/thing', async (req) => ({ received: req.body })); await app.ready(); const res = await app.inject({ method: 'POST', url: '/thing', headers: { 'content-type': 'application/json' }, payload: '{niet geldig', }); assert.equal(res.statusCode, 400); await app.close(); }); test('een echte JSON-body werkt gewoon zoals voorheen', async () => { const app = Fastify(); registerEmptyJsonBodyParser(app); app.post('/thing', async (req) => ({ received: req.body })); await app.ready(); const res = await app.inject({ method: 'POST', url: '/thing', headers: { 'content-type': 'application/json' }, payload: { a: 1 }, }); assert.equal(res.statusCode, 200, res.body); assert.deepEqual(res.json(), { received: { a: 1 } }); await app.close(); });