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