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
			| 
								 
											3 years ago
										 
									 | 
							
								'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' })
							 | 
						||
| 
								 | 
							
								})
							 |