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