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