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