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