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.
		
		
		
		
		
			
		
			
				
					114 lines
				
				3.1 KiB
			
		
		
			
		
	
	
					114 lines
				
				3.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const test = require('tap').test
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const build = require('..')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const nullable = true
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const complexObject = {
							 | 
						||
| 
								 | 
							
								  type: 'object',
							 | 
						||
| 
								 | 
							
								  properties: {
							 | 
						||
| 
								 | 
							
								    nullableString: { type: 'string', nullable: nullable },
							 | 
						||
| 
								 | 
							
								    nullableNumber: { type: 'number', nullable: nullable },
							 | 
						||
| 
								 | 
							
								    nullableInteger: { type: 'integer', nullable: nullable },
							 | 
						||
| 
								 | 
							
								    nullableBoolean: { type: 'boolean', nullable: nullable },
							 | 
						||
| 
								 | 
							
								    nullableNull: { type: 'null', nullable: nullable },
							 | 
						||
| 
								 | 
							
								    nullableArray: {
							 | 
						||
| 
								 | 
							
								      type: 'array',
							 | 
						||
| 
								 | 
							
								      nullable: true,
							 | 
						||
| 
								 | 
							
								      items: {}
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    nullableObject: { type: 'object', nullable: true },
							 | 
						||
| 
								 | 
							
								    objectWithNullableProps: {
							 | 
						||
| 
								 | 
							
								      type: 'object',
							 | 
						||
| 
								 | 
							
								      nullable: false,
							 | 
						||
| 
								 | 
							
								      additionalProperties: true,
							 | 
						||
| 
								 | 
							
								      properties: {
							 | 
						||
| 
								 | 
							
								        nullableString: { type: 'string', nullable: nullable },
							 | 
						||
| 
								 | 
							
								        nullableNumber: { type: 'number', nullable: nullable },
							 | 
						||
| 
								 | 
							
								        nullableInteger: { type: 'integer', nullable: nullable },
							 | 
						||
| 
								 | 
							
								        nullableBoolean: { type: 'boolean', nullable: nullable },
							 | 
						||
| 
								 | 
							
								        nullableNull: { type: 'null', nullable: nullable },
							 | 
						||
| 
								 | 
							
								        nullableArray: {
							 | 
						||
| 
								 | 
							
								          type: 'array',
							 | 
						||
| 
								 | 
							
								          nullable: true,
							 | 
						||
| 
								 | 
							
								          items: {}
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    arrayWithNullableItems: {
							 | 
						||
| 
								 | 
							
								      type: 'array',
							 | 
						||
| 
								 | 
							
								      nullable: true,
							 | 
						||
| 
								 | 
							
								      items: { type: ['integer', 'string'], nullable: true }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const complexData = {
							 | 
						||
| 
								 | 
							
								  nullableString: null,
							 | 
						||
| 
								 | 
							
								  nullableNumber: null,
							 | 
						||
| 
								 | 
							
								  nullableInteger: null,
							 | 
						||
| 
								 | 
							
								  nullableBoolean: null,
							 | 
						||
| 
								 | 
							
								  nullableNull: null,
							 | 
						||
| 
								 | 
							
								  nullableArray: null,
							 | 
						||
| 
								 | 
							
								  nullableObject: null,
							 | 
						||
| 
								 | 
							
								  objectWithNullableProps: {
							 | 
						||
| 
								 | 
							
								    additionalProp: null,
							 | 
						||
| 
								 | 
							
								    nullableString: null,
							 | 
						||
| 
								 | 
							
								    nullableNumber: null,
							 | 
						||
| 
								 | 
							
								    nullableInteger: null,
							 | 
						||
| 
								 | 
							
								    nullableBoolean: null,
							 | 
						||
| 
								 | 
							
								    nullableNull: null,
							 | 
						||
| 
								 | 
							
								    nullableArray: null
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  arrayWithNullableItems: [1, 2, null]
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const complexExpectedResult = {
							 | 
						||
| 
								 | 
							
								  nullableString: null,
							 | 
						||
| 
								 | 
							
								  nullableNumber: null,
							 | 
						||
| 
								 | 
							
								  nullableInteger: null,
							 | 
						||
| 
								 | 
							
								  nullableBoolean: null,
							 | 
						||
| 
								 | 
							
								  nullableNull: null,
							 | 
						||
| 
								 | 
							
								  nullableArray: null,
							 | 
						||
| 
								 | 
							
								  nullableObject: null,
							 | 
						||
| 
								 | 
							
								  objectWithNullableProps: {
							 | 
						||
| 
								 | 
							
								    additionalProp: null,
							 | 
						||
| 
								 | 
							
								    nullableString: null,
							 | 
						||
| 
								 | 
							
								    nullableNumber: null,
							 | 
						||
| 
								 | 
							
								    nullableInteger: null,
							 | 
						||
| 
								 | 
							
								    nullableBoolean: null,
							 | 
						||
| 
								 | 
							
								    nullableNull: null,
							 | 
						||
| 
								 | 
							
								    nullableArray: null
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  arrayWithNullableItems: [1, 2, null]
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const testSet = {
							 | 
						||
| 
								 | 
							
								  nullableString: [{ type: 'string', nullable: nullable }, null, null],
							 | 
						||
| 
								 | 
							
								  nullableNumber: [{ type: 'number', nullable: nullable }, null, null],
							 | 
						||
| 
								 | 
							
								  nullableInteger: [{ type: 'integer', nullable: nullable }, null, null],
							 | 
						||
| 
								 | 
							
								  nullableBoolean: [{ type: 'boolean', nullable: nullable }, null, null],
							 | 
						||
| 
								 | 
							
								  nullableNull: [{ type: 'null', nullable: nullable }, null, null],
							 | 
						||
| 
								 | 
							
								  nullableArray: [{
							 | 
						||
| 
								 | 
							
								    type: 'array',
							 | 
						||
| 
								 | 
							
								    nullable: true,
							 | 
						||
| 
								 | 
							
								    items: {}
							 | 
						||
| 
								 | 
							
								  }, null, null],
							 | 
						||
| 
								 | 
							
								  nullableObject: [{ type: 'object', nullable: true }, null, null],
							 | 
						||
| 
								 | 
							
								  complexObject: [complexObject, complexData, complexExpectedResult]
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.keys(testSet).forEach(key => {
							 | 
						||
| 
								 | 
							
								  test(`handle nullable:true in ${key} correctly`, (t) => {
							 | 
						||
| 
								 | 
							
								    t.plan(1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const stringifier = build(testSet[key][0])
							 | 
						||
| 
								 | 
							
								    const data = testSet[key][1]
							 | 
						||
| 
								 | 
							
								    const expected = testSet[key][2]
							 | 
						||
| 
								 | 
							
								    const result = stringifier(data)
							 | 
						||
| 
								 | 
							
								    t.same(JSON.parse(result), expected)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 |