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