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