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.
		
		
		
		
		
			
		
			
				
					175 lines
				
				3.1 KiB
			
		
		
			
		
	
	
					175 lines
				
				3.1 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const test = require('tap').test | ||
|  | const build = require('..') | ||
|  | 
 | ||
|  | test('use toJSON method on object types', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple object', | ||
|  |     type: 'object', | ||
|  |     properties: { | ||
|  |       productName: { | ||
|  |         type: 'string' | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   const object = { | ||
|  |     product: { name: 'cola' }, | ||
|  |     toJSON: function () { | ||
|  |       return { productName: this.product.name } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   t.equal('{"productName":"cola"}', stringify(object)) | ||
|  | }) | ||
|  | 
 | ||
|  | test('use toJSON method on nested object types', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple array', | ||
|  |     type: 'array', | ||
|  |     items: { | ||
|  |       type: 'object', | ||
|  |       properties: { | ||
|  |         productName: { | ||
|  |           type: 'string' | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   const array = [ | ||
|  |     { | ||
|  |       product: { name: 'cola' }, | ||
|  |       toJSON: function () { | ||
|  |         return { productName: this.product.name } | ||
|  |       } | ||
|  |     }, | ||
|  |     { | ||
|  |       product: { name: 'sprite' }, | ||
|  |       toJSON: function () { | ||
|  |         return { productName: this.product.name } | ||
|  |       } | ||
|  |     } | ||
|  |   ] | ||
|  | 
 | ||
|  |   t.equal('[{"productName":"cola"},{"productName":"sprite"}]', stringify(array)) | ||
|  | }) | ||
|  | 
 | ||
|  | test('not use toJSON if does not exist', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple object', | ||
|  |     type: 'object', | ||
|  |     properties: { | ||
|  |       product: { | ||
|  |         type: 'object', | ||
|  |         properties: { | ||
|  |           name: { | ||
|  |             type: 'string' | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   const object = { | ||
|  |     product: { name: 'cola' } | ||
|  |   } | ||
|  | 
 | ||
|  |   t.equal('{"product":{"name":"cola"}}', stringify(object)) | ||
|  | }) | ||
|  | 
 | ||
|  | test('not fail on null object declared nullable', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple object', | ||
|  |     type: 'object', | ||
|  |     nullable: true, | ||
|  |     properties: { | ||
|  |       product: { | ||
|  |         type: 'object', | ||
|  |         properties: { | ||
|  |           name: { | ||
|  |             type: 'string' | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   t.equal('null', stringify(null)) | ||
|  | }) | ||
|  | 
 | ||
|  | test('not fail on null sub-object declared nullable', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple object', | ||
|  |     type: 'object', | ||
|  |     properties: { | ||
|  |       product: { | ||
|  |         nullable: true, | ||
|  |         type: 'object', | ||
|  |         properties: { | ||
|  |           name: { | ||
|  |             type: 'string' | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   const object = { | ||
|  |     product: null | ||
|  |   } | ||
|  |   t.equal('{"product":null}', stringify(object)) | ||
|  | }) | ||
|  | 
 | ||
|  | test('throw an error on non nullable null sub-object', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple object', | ||
|  |     type: 'object', | ||
|  |     properties: { | ||
|  |       product: { | ||
|  |         nullable: false, | ||
|  |         type: 'object', | ||
|  |         properties: { | ||
|  |           name: { | ||
|  |             type: 'string' | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   const object = { | ||
|  |     product: null | ||
|  |   } | ||
|  |   t.throws(() => { stringify(object) }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('throw an error on non nullable null object', (t) => { | ||
|  |   t.plan(1) | ||
|  | 
 | ||
|  |   const stringify = build({ | ||
|  |     title: 'simple object', | ||
|  |     nullable: false, | ||
|  |     type: 'object', | ||
|  |     properties: { | ||
|  |       product: { | ||
|  |         nullable: false, | ||
|  |         type: 'object', | ||
|  |         properties: { | ||
|  |           name: { | ||
|  |             type: 'string' | ||
|  |           } | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   t.throws(() => { stringify(null) }) | ||
|  | }) |