You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.5 KiB
79 lines
1.5 KiB
'use strict'
|
|
|
|
const t = require('tap')
|
|
const fastify = require('fastify')
|
|
const FjsCompiler = require('../index')
|
|
|
|
const echo = async (req, reply) => { return req.body }
|
|
|
|
const sampleSchema = Object.freeze({
|
|
$id: 'example1',
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' }
|
|
}
|
|
})
|
|
|
|
const externalSchemas1 = Object.freeze({})
|
|
const externalSchemas2 = Object.freeze({
|
|
foo: {
|
|
$id: 'foo',
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' }
|
|
}
|
|
}
|
|
})
|
|
|
|
const fastifyFjsOptionsDefault = Object.freeze({})
|
|
|
|
t.test('basic usage', t => {
|
|
t.plan(1)
|
|
const factory = FjsCompiler()
|
|
const compiler = factory(externalSchemas1, fastifyFjsOptionsDefault)
|
|
const serializeFunc = compiler({ schema: sampleSchema })
|
|
const result = serializeFunc({ name: 'hello' })
|
|
t.equal(result, '{"name":"hello"}')
|
|
})
|
|
|
|
t.test('fastify integration', async t => {
|
|
const factory = FjsCompiler()
|
|
|
|
const app = fastify({
|
|
serializerOpts: {
|
|
rounding: 'ceil'
|
|
},
|
|
schemaController: {
|
|
compilersFactory: {
|
|
buildSerializer: factory
|
|
}
|
|
}
|
|
})
|
|
|
|
app.addSchema(externalSchemas2.foo)
|
|
|
|
app.post('/', {
|
|
handler: echo,
|
|
schema: {
|
|
response: {
|
|
200: {
|
|
$ref: 'foo#'
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
const res = await app.inject({
|
|
url: '/',
|
|
method: 'POST',
|
|
payload: {
|
|
version: '1',
|
|
foo: 'this is not a number',
|
|
name: 'serialize me'
|
|
}
|
|
})
|
|
|
|
t.equal(res.statusCode, 200)
|
|
t.same(res.json(), { name: 'serialize me' })
|
|
})
|