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