fastify-asyncforge
Version:
helpers to get fastify request/reply and app
215 lines (168 loc) • 5.1 kB
JavaScript
const { test } = require('node:test')
const Fastify = require('fastify')
const tspl = require('@matteo.collina/tspl')
const fastifyAsyncForge = require('../')
const { app, request, reply, logger } = fastifyAsyncForge
test('basic helpers', async (t) => {
const p = tspl(t, { plan: 7 })
const fastify = Fastify()
await fastify.register(fastifyAsyncForge)
fastify.runInAsyncScope(() => {
p.strictEqual(logger(), fastify.log)
p.strictEqual(app(), fastify)
})
fastify.get('/', async function (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
return { hello: 'world' }
})
const res = await fastify.inject({
method: 'GET',
url: '/'
})
p.strictEqual(res.statusCode, 200)
await p.completed
})
test('support in following plugin', async (t) => {
const p = tspl(t, { plan: 7 })
const fastify = Fastify()
fastify.register(fastifyAsyncForge)
fastify.register(async function (fastify, _opts) {
p.strictEqual(app(), Object.getPrototypeOf(fastify))
p.strictEqual(request(), undefined)
})
fastify.get('/', async function (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
return { hello: 'world' }
})
const res = await fastify.inject({
method: 'GET',
url: '/'
})
p.strictEqual(res.statusCode, 200)
await p.completed
})
test('support in following plugin with await ', async (t) => {
const p = tspl(t, { plan: 9 })
const fastify = Fastify()
await fastify.register(fastifyAsyncForge)
fastify.register(async function (fastify, _opts) {
p.throws(app)
p.throws(request)
fastify.runInAsyncScope(() => {
p.strictEqual(app(), fastify)
p.strictEqual(request(), undefined)
})
})
fastify.get('/', async function (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
return { hello: 'world' }
})
const res = await fastify.inject({
method: 'GET',
url: '/'
})
p.strictEqual(res.statusCode, 200)
await p.completed
})
test('with additional onRequest hook', async (t) => {
const p = tspl(t, { plan: 15 })
const fastify = Fastify()
await fastify.register(fastifyAsyncForge)
fastify.runInAsyncScope(() => {
p.strictEqual(logger(), fastify.log)
p.strictEqual(app(), fastify)
})
fastify.addHook('onRequest', async function b (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
})
fastify.get('/', {
onRequest: async function a (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
}
}, async function (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
return { hello: 'world' }
})
const res = await fastify.inject({
method: 'GET',
url: '/'
})
p.strictEqual(res.statusCode, 200)
await p.completed
})
test('onRequest hook added before registration fails', async (t) => {
const p = tspl(t, { plan: 15 })
const fastify = Fastify()
fastify.addHook('onRequest', async function b (_request, _reply) {
p.throws(app)
p.throws(logger)
p.throws(request)
p.throws(reply)
})
await fastify.register(fastifyAsyncForge)
fastify.runInAsyncScope(() => {
p.strictEqual(logger(), fastify.log)
p.strictEqual(app(), fastify)
})
fastify.get('/', {
onRequest: async function a (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
}
}, async function (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
return { hello: 'world' }
})
const res = await fastify.inject({
method: 'GET',
url: '/'
})
p.strictEqual(res.statusCode, 200)
await p.completed
})
test('basic helpers with start', async (t) => {
const p = tspl(t, { plan: 7 })
const fastify = Fastify()
await fastify.register(fastifyAsyncForge)
fastify.runInAsyncScope(() => {
p.strictEqual(logger(), fastify.log)
p.strictEqual(app(), fastify)
})
fastify.get('/', async function (_request, _reply) {
p.strictEqual(app(), this)
p.strictEqual(request(), _request)
p.strictEqual(reply(), _reply)
p.strictEqual(logger(), _request.log)
return { hello: 'world' }
})
const res = await fastify.inject({
method: 'GET',
url: '/'
})
p.strictEqual(res.statusCode, 200)
await p.completed
})