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.
		
		
		
		
		
			
		
			
				
					377 lines
				
				6.2 KiB
			
		
		
			
		
	
	
					377 lines
				
				6.2 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const test = require('tap').test | ||
|  | const build = require('..') | ||
|  | 
 | ||
|  | function buildTest (schema, toStringify, expected) { | ||
|  |   test(`render a ${schema.title} with default as JSON`, (t) => { | ||
|  |     t.plan(1) | ||
|  | 
 | ||
|  |     const stringify = build(schema) | ||
|  | 
 | ||
|  |     const output = stringify(toStringify) | ||
|  | 
 | ||
|  |     t.equal(output, JSON.stringify(expected)) | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default string', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string', | ||
|  |       default: 'Collina' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     magic: { | ||
|  |       type: 'number' | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   magic: 42, | ||
|  |   age: 32 | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   magic: 42 | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default string with value', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string', | ||
|  |       default: 'Collina' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     magic: { | ||
|  |       type: 'number' | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'collina', | ||
|  |   magic: 42, | ||
|  |   age: 32 | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'collina', | ||
|  |   age: 32, | ||
|  |   magic: 42 | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default number', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     magic: { | ||
|  |       type: 'number', | ||
|  |       default: 42 | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32 | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   magic: 42 | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default number with value', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     magic: { | ||
|  |       type: 'number', | ||
|  |       default: 42 | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   magic: 66 | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   magic: 66 | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default object', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     otherProps: { | ||
|  |       type: 'object', | ||
|  |       default: { foo: 'bar' } | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32 | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   otherProps: { foo: 'bar' } | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default object with value', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     otherProps: { | ||
|  |       type: 'object', | ||
|  |       additionalProperties: true, | ||
|  |       default: { foo: 'bar' } | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   otherProps: { hello: 'world' } | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   otherProps: { hello: 'world' } | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default array', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     otherProps: { | ||
|  |       type: 'array', | ||
|  |       items: { type: 'string' }, | ||
|  |       default: ['FOO'] | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32 | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   otherProps: ['FOO'] | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default array with value', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     }, | ||
|  |     otherProps: { | ||
|  |       type: 'array', | ||
|  |       items: { type: 'string' }, | ||
|  |       default: ['FOO'] | ||
|  |     } | ||
|  |   }, | ||
|  |   required: ['firstName', 'lastName'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   otherProps: ['BAR'] | ||
|  | }, { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32, | ||
|  |   otherProps: ['BAR'] | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default deeper value', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     level1: { | ||
|  |       type: 'object', | ||
|  |       properties: { | ||
|  |         level2: { | ||
|  |           type: 'object', | ||
|  |           properties: { | ||
|  |             level3: { | ||
|  |               type: 'object', | ||
|  |               properties: { | ||
|  |                 level4: { | ||
|  |                   type: 'object', | ||
|  |                   default: { foo: 'bar' } | ||
|  |                 } | ||
|  |               } | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | }, { | ||
|  |   level1: { level2: { level3: { } } } | ||
|  | }, { | ||
|  |   level1: { level2: { level3: { level4: { foo: 'bar' } } } } | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   title: 'default deeper value with value', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     level1: { | ||
|  |       type: 'object', | ||
|  |       properties: { | ||
|  |         level2: { | ||
|  |           type: 'object', | ||
|  |           properties: { | ||
|  |             level3: { | ||
|  |               type: 'object', | ||
|  |               properties: { | ||
|  |                 level4: { | ||
|  |                   type: 'object', | ||
|  |                   default: { foo: 'bar' } | ||
|  |                 } | ||
|  |               } | ||
|  |             } | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | }, { | ||
|  |   level1: { level2: { level3: { level4: { } } } } | ||
|  | }, { | ||
|  |   level1: { level2: { level3: { level4: { } } } } | ||
|  | }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     name: { | ||
|  |       type: 'string', | ||
|  |       default: 'foo' | ||
|  |     }, | ||
|  |     dev: { | ||
|  |       type: 'boolean', | ||
|  |       default: false | ||
|  |     } | ||
|  |   }, | ||
|  |   required: [ | ||
|  |     'name', 'dev' | ||
|  |   ] | ||
|  | }, {}, { name: 'foo', dev: false }) | ||
|  | 
 | ||
|  | buildTest({ | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     name: { | ||
|  |       type: 'string', | ||
|  |       default: 'foo' | ||
|  |     }, | ||
|  |     dev: { | ||
|  |       type: 'boolean' | ||
|  |     }, | ||
|  |     job: { | ||
|  |       type: 'string', | ||
|  |       default: 'awesome' | ||
|  |     } | ||
|  |   }, | ||
|  |   required: [ | ||
|  |     'name', 'dev' | ||
|  |   ] | ||
|  | }, { dev: true }, { name: 'foo', dev: true, job: 'awesome' }) |