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' })
 | 
						|
})
 |