UNPKG

fastify

Version:

Fast and low overhead web framework, for Node.js

299 lines (257 loc) 6.63 kB
'use strict' const t = require('tap') const test = t.test const sget = require('simple-get').concat const Fastify = require('../fastify') const jsonParser = require('fast-json-body') const { getServerUrl } = require('./helper') process.removeAllListeners('warning') test('Should have typeof body object with no custom parser defined, null body and content type = \'text/plain\'', t => { t.plan(4) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: null, headers: { 'Content-Type': 'text/plain' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(typeof body, 'object') fastify.close() }) }) }) test('Should have typeof body object with no custom parser defined, undefined body and content type = \'text/plain\'', t => { t.plan(4) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: undefined, headers: { 'Content-Type': 'text/plain' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(typeof body, 'object') fastify.close() }) }) }) test('Should get the body as string', t => { t.plan(6) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.addContentTypeParser('text/plain', { parseAs: 'string' }, function (req, body, done) { t.ok('called') t.ok(typeof body === 'string') try { const plainText = body done(null, plainText) } catch (err) { err.statusCode = 400 done(err, undefined) } }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: 'hello world', headers: { 'Content-Type': 'text/plain' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.toString(), 'hello world') fastify.close() }) }) }) test('Should get the body as buffer', t => { t.plan(6) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.addContentTypeParser('application/json', { parseAs: 'buffer' }, function (req, body, done) { t.ok('called') t.ok(body instanceof Buffer) try { const json = JSON.parse(body) done(null, json) } catch (err) { err.statusCode = 400 done(err, undefined) } }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: '{"hello":"world"}', headers: { 'Content-Type': 'application/json' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.toString(), '{"hello":"world"}') fastify.close() }) }) }) test('Should get the body as buffer', t => { t.plan(6) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.addContentTypeParser('text/plain', { parseAs: 'buffer' }, function (req, body, done) { t.ok('called') t.ok(body instanceof Buffer) try { const plainText = body done(null, plainText) } catch (err) { err.statusCode = 400 done(err, undefined) } }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: 'hello world', headers: { 'Content-Type': 'text/plain' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.toString(), 'hello world') fastify.close() }) }) }) test('Should parse empty bodies as a string', t => { t.plan(9) const fastify = Fastify() fastify.addContentTypeParser('text/plain', { parseAs: 'string' }, (req, body, done) => { t.equal(body, '') done(null, body) }) fastify.route({ method: ['POST', 'DELETE'], url: '/', handler (request, reply) { reply.send(request.body) } }) fastify.listen({ port: 0 }, err => { t.error(err) t.teardown(() => { fastify.close() }) sget({ method: 'POST', url: getServerUrl(fastify), body: '', headers: { 'Content-Type': 'text/plain' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.toString(), '') }) sget({ method: 'DELETE', url: getServerUrl(fastify), body: '', headers: { 'Content-Type': 'text/plain', 'Content-Length': '0' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.toString(), '') }) }) }) test('Should parse empty bodies as a buffer', t => { t.plan(6) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.addContentTypeParser('text/plain', { parseAs: 'buffer' }, function (req, body, done) { t.ok(body instanceof Buffer) t.equal(body.length, 0) done(null, body) }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: '', headers: { 'Content-Type': 'text/plain' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.length, 0) fastify.close() }) }) }) test('The charset should not interfere with the content type handling', t => { t.plan(5) const fastify = Fastify() fastify.post('/', (req, reply) => { reply.send(req.body) }) fastify.addContentTypeParser('application/json', function (req, payload, done) { t.ok('called') jsonParser(payload, function (err, body) { done(err, body) }) }) fastify.listen({ port: 0 }, err => { t.error(err) sget({ method: 'POST', url: getServerUrl(fastify), body: '{"hello":"world"}', headers: { 'Content-Type': 'application/json; charset=utf-8' } }, (err, response, body) => { t.error(err) t.equal(response.statusCode, 200) t.equal(body.toString(), '{"hello":"world"}') fastify.close() }) }) })