fastify
Version:
Fast and low overhead web framework, for Node.js
120 lines (105 loc) • 2.78 kB
JavaScript
const t = require('tap')
const test = t.test
const proxyquire = require('proxyquire')
const fs = require('node:fs')
const resolve = require('node:path').resolve
const zlib = require('node:zlib')
const pipeline = require('node:stream').pipeline
const Fastify = require('..')
test('onSend hook stream', t => {
t.plan(4)
const fastify = Fastify()
fastify.get('/', function (req, reply) {
reply.send({ hello: 'world' })
})
fastify.addHook('onSend', (req, reply, payload, done) => {
const gzStream = zlib.createGzip()
reply.header('Content-Encoding', 'gzip')
pipeline(
fs.createReadStream(resolve(__filename), 'utf8'),
gzStream,
t.error
)
done(null, gzStream)
})
fastify.inject({
url: '/',
method: 'GET'
}, (err, res) => {
t.error(err)
t.equal(res.headers['content-encoding'], 'gzip')
const file = fs.readFileSync(resolve(__filename), 'utf8')
const payload = zlib.gunzipSync(res.rawPayload)
t.equal(payload.toString('utf-8'), file)
fastify.close()
})
})
test('onSend hook stream should work even if payload is not a proper stream', t => {
t.plan(1)
const reply = proxyquire('../lib/reply', {
'node:stream': {
finished: (...args) => {
if (args.length === 2) { args[1](new Error('test-error')) }
}
}
})
const Fastify = proxyquire('..', {
'./lib/reply.js': reply
})
const spyLogger = {
fatal: () => { },
error: () => { },
warn: (message) => {
t.equal(message, 'stream payload does not end properly')
fastify.close()
},
info: () => { },
debug: () => { },
trace: () => { },
child: () => { return spyLogger }
}
const fastify = Fastify({ logger: spyLogger })
fastify.get('/', function (req, reply) {
reply.send({ hello: 'world' })
})
fastify.addHook('onSend', (req, reply, payload, done) => {
const fakeStream = { pipe: () => { } }
done(null, fakeStream)
})
fastify.inject({
url: '/',
method: 'GET'
})
})
test('onSend hook stream should work on payload with "close" ending function', t => {
t.plan(1)
const reply = proxyquire('../lib/reply', {
'node:stream': {
finished: (...args) => {
if (args.length === 2) { args[1](new Error('test-error')) }
}
}
})
const Fastify = proxyquire('..', {
'./lib/reply.js': reply
})
const fastify = Fastify({ logger: false })
fastify.get('/', function (req, reply) {
reply.send({ hello: 'world' })
})
fastify.addHook('onSend', (req, reply, payload, done) => {
const fakeStream = {
pipe: () => { },
close: (cb) => {
cb()
t.pass()
}
}
done(null, fakeStream)
})
fastify.inject({
url: '/',
method: 'GET'
})
})