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.
		
		
		
		
		
			
		
			
				
					
					
						
							155 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
	
	
							155 lines
						
					
					
						
							3.4 KiB
						
					
					
				'use strict'
 | 
						|
 | 
						|
const test = require('tap').test
 | 
						|
const build = require('..')
 | 
						|
 | 
						|
test('object with nested random property', (t) => {
 | 
						|
  t.plan(4)
 | 
						|
 | 
						|
  const schema = {
 | 
						|
    title: 'empty schema to allow any object',
 | 
						|
    type: 'object',
 | 
						|
    properties: {
 | 
						|
      id: { type: 'number' },
 | 
						|
      name: {}
 | 
						|
    }
 | 
						|
  }
 | 
						|
  const stringify = build(schema)
 | 
						|
 | 
						|
  t.equal(stringify({
 | 
						|
    id: 1, name: 'string'
 | 
						|
  }), '{"id":1,"name":"string"}')
 | 
						|
 | 
						|
  t.equal(stringify({
 | 
						|
    id: 1, name: { first: 'name', last: 'last' }
 | 
						|
  }), '{"id":1,"name":{"first":"name","last":"last"}}')
 | 
						|
 | 
						|
  t.equal(stringify({
 | 
						|
    id: 1, name: null
 | 
						|
  }), '{"id":1,"name":null}')
 | 
						|
 | 
						|
  t.equal(stringify({
 | 
						|
    id: 1, name: ['first', 'last']
 | 
						|
  }), '{"id":1,"name":["first","last"]}')
 | 
						|
})
 | 
						|
 | 
						|
// reference: https://github.com/fastify/fast-json-stringify/issues/259
 | 
						|
test('object with empty schema with $id: undefined set', (t) => {
 | 
						|
  t.plan(1)
 | 
						|
 | 
						|
  const schema = {
 | 
						|
    title: 'empty schema to allow any object with $id: undefined set',
 | 
						|
    type: 'object',
 | 
						|
    properties: {
 | 
						|
      name: { $id: undefined }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  const stringify = build(schema)
 | 
						|
  t.equal(stringify({
 | 
						|
    name: 'string'
 | 
						|
  }), '{"name":"string"}')
 | 
						|
})
 | 
						|
 | 
						|
test('array with random items', (t) => {
 | 
						|
  t.plan(1)
 | 
						|
 | 
						|
  const schema = {
 | 
						|
    title: 'empty schema to allow any object',
 | 
						|
    type: 'array',
 | 
						|
    items: {}
 | 
						|
  }
 | 
						|
  const stringify = build(schema)
 | 
						|
 | 
						|
  const value = stringify([1, 'string', null])
 | 
						|
  t.equal(value, '[1,"string",null]')
 | 
						|
})
 | 
						|
 | 
						|
test('empty schema', (t) => {
 | 
						|
  t.plan(7)
 | 
						|
 | 
						|
  const schema = { }
 | 
						|
 | 
						|
  const stringify = build(schema)
 | 
						|
 | 
						|
  t.equal(stringify(null), 'null')
 | 
						|
  t.equal(stringify(1), '1')
 | 
						|
  t.equal(stringify(true), 'true')
 | 
						|
  t.equal(stringify('hello'), '"hello"')
 | 
						|
  t.equal(stringify({}), '{}')
 | 
						|
  t.equal(stringify({ x: 10 }), '{"x":10}')
 | 
						|
  t.equal(stringify([true, 1, 'hello']), '[true,1,"hello"]')
 | 
						|
})
 | 
						|
 | 
						|
test('empty schema on nested object', (t) => {
 | 
						|
  t.plan(7)
 | 
						|
 | 
						|
  const schema = {
 | 
						|
    type: 'object',
 | 
						|
    properties: {
 | 
						|
      x: {}
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  const stringify = build(schema)
 | 
						|
 | 
						|
  t.equal(stringify({ x: null }), '{"x":null}')
 | 
						|
  t.equal(stringify({ x: 1 }), '{"x":1}')
 | 
						|
  t.equal(stringify({ x: true }), '{"x":true}')
 | 
						|
  t.equal(stringify({ x: 'hello' }), '{"x":"hello"}')
 | 
						|
  t.equal(stringify({ x: {} }), '{"x":{}}')
 | 
						|
  t.equal(stringify({ x: { x: 10 } }), '{"x":{"x":10}}')
 | 
						|
  t.equal(stringify({ x: [true, 1, 'hello'] }), '{"x":[true,1,"hello"]}')
 | 
						|
})
 | 
						|
 | 
						|
test('empty schema on array', (t) => {
 | 
						|
  t.plan(1)
 | 
						|
 | 
						|
  const schema = {
 | 
						|
    type: 'array',
 | 
						|
    items: {}
 | 
						|
  }
 | 
						|
 | 
						|
  const stringify = build(schema)
 | 
						|
 | 
						|
  t.equal(stringify([1, true, 'hello', [], { x: 1 }]), '[1,true,"hello",[],{"x":1}]')
 | 
						|
})
 | 
						|
 | 
						|
test('empty schema on anyOf', (t) => {
 | 
						|
  t.plan(4)
 | 
						|
 | 
						|
  // any on Foo codepath.
 | 
						|
  const schema = {
 | 
						|
    anyOf: [
 | 
						|
      {
 | 
						|
        type: 'object',
 | 
						|
        properties: {
 | 
						|
          kind: {
 | 
						|
            type: 'string',
 | 
						|
            enum: ['Foo']
 | 
						|
          },
 | 
						|
          value: {}
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        type: 'object',
 | 
						|
        properties: {
 | 
						|
          kind: {
 | 
						|
            type: 'string',
 | 
						|
            enum: ['Bar']
 | 
						|
          },
 | 
						|
          value: {
 | 
						|
            type: 'number'
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  }
 | 
						|
 | 
						|
  const stringify = build(schema)
 | 
						|
 | 
						|
  t.equal(stringify({ kind: 'Bar', value: 1 }), '{"kind":"Bar","value":1}')
 | 
						|
  t.equal(stringify({ kind: 'Foo', value: 1 }), '{"kind":"Foo","value":1}')
 | 
						|
  t.equal(stringify({ kind: 'Foo', value: true }), '{"kind":"Foo","value":true}')
 | 
						|
  t.equal(stringify({ kind: 'Foo', value: 'hello' }), '{"kind":"Foo","value":"hello"}')
 | 
						|
})
 |