fastify
Version:
Fast and low overhead web framework, for Node.js
156 lines (129 loc) • 3.08 kB
JavaScript
const t = require('tap')
const test = t.test
const Fastify = require('..')
test('close callback', t => {
t.plan(4)
const fastify = Fastify()
fastify.addHook('onClose', onClose)
function onClose (instance, done) {
t.type(fastify, instance)
done()
}
fastify.listen(0, err => {
t.error(err)
fastify.close((err) => {
t.error(err)
t.ok('close callback')
})
})
})
test('inside register', t => {
t.plan(5)
const fastify = Fastify()
fastify.register(function (f, opts, next) {
f.addHook('onClose', onClose)
function onClose (instance, done) {
t.ok(instance.prototype === fastify.prototype)
t.strictEqual(instance, f)
done()
}
next()
})
fastify.listen(0, err => {
t.error(err)
fastify.close((err) => {
t.error(err)
t.ok('close callback')
})
})
})
test('close order', t => {
t.plan(5)
const fastify = Fastify()
const order = [1, 2, 3]
fastify.register(function (f, opts, next) {
f.addHook('onClose', (instance, done) => {
t.is(order.shift(), 1)
done()
})
next()
})
fastify.addHook('onClose', (instance, done) => {
t.is(order.shift(), 2)
done()
})
fastify.listen(0, err => {
t.error(err)
fastify.close((err) => {
t.error(err)
t.is(order.shift(), 3)
})
})
})
test('should not throw an error if the server is not listening', t => {
t.plan(2)
const fastify = Fastify()
fastify.addHook('onClose', onClose)
function onClose (instance, done) {
t.type(fastify, instance)
done()
}
fastify.close((err) => {
t.error(err)
})
})
test('onClose should keep the context', t => {
t.plan(4)
const fastify = Fastify()
fastify.register(plugin)
function plugin (instance, opts, next) {
instance.decorate('test', true)
instance.addHook('onClose', onClose)
t.ok(instance.prototype === fastify.prototype)
function onClose (i, done) {
t.ok(i.test)
t.strictEqual(i, instance)
done()
}
next()
}
fastify.close((err) => {
t.error(err)
})
})
test('Should return 503 while closing - injection', t => {
t.plan(8)
const fastify = Fastify()
fastify.addHook('onClose', (instance, done) => {
setTimeout(done, 150)
})
fastify.get('/', (req, reply) => {
reply.send({ hello: 'world' })
})
fastify.inject({
method: 'GET',
url: '/'
}, (err, res) => {
t.error(err)
t.strictEqual(res.statusCode, 200)
fastify.close()
setTimeout(() => {
fastify.inject({
method: 'GET',
url: '/'
}, (err, res) => {
t.error(err)
t.strictEqual(res.statusCode, 503)
t.strictEqual(res.headers['content-type'], 'application/json')
t.strictEqual(res.headers['content-length'], '80')
t.strictEqual(res.headers['connection'], 'close')
t.deepEqual(JSON.parse(res.payload), {
error: 'Service Unavailable',
message: 'Service Unavailable',
statusCode: 503
})
})
}, 100)
})
})