kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
147 wiersze
3.5 KiB
TypeScript
147 wiersze
3.5 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { validate } from '../src/index'
|
|
|
|
describe('json-schema coercion', () => {
|
|
it('string => number coercion', () => {
|
|
const result = validate('7', { type: 'number' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal(7)
|
|
})
|
|
|
|
it('boolean => number coercion', () => {
|
|
const result = validate(true, { type: 'number' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal(1)
|
|
})
|
|
|
|
it('null => number coercion', () => {
|
|
const result = validate(null, { type: 'number' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal(0)
|
|
})
|
|
|
|
it('array => number coercion', () => {
|
|
const result = validate([1], { type: 'number' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal(1)
|
|
})
|
|
|
|
it('boolean => string coercion', () => {
|
|
const result = validate(true, { type: 'string' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal('true')
|
|
})
|
|
|
|
it('number => string coercion', () => {
|
|
const result = validate(72.3, { type: 'string' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal('72.3')
|
|
})
|
|
|
|
it('null => string coercion', () => {
|
|
const result = validate(null, { type: 'string' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal('')
|
|
})
|
|
|
|
it('array => string coercion', () => {
|
|
const result = validate(['nala'], { type: 'string' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal('nala')
|
|
})
|
|
|
|
it('string => boolean coercion', () => {
|
|
const result = validate('true', { type: 'boolean' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal(true)
|
|
})
|
|
|
|
it('string => null coercion', () => {
|
|
const result = validate('', { type: 'null' }, { coerce: true })
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.equal(null)
|
|
})
|
|
|
|
it('object property coercion', () => {
|
|
const result = validate(
|
|
{
|
|
name: null,
|
|
cool: 'true',
|
|
cool2: 0,
|
|
number: '5.12',
|
|
integer: '5.12'
|
|
},
|
|
{
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' },
|
|
cool: { type: 'boolean' },
|
|
cool2: { type: 'boolean' },
|
|
number: { type: 'number' },
|
|
integer: { type: 'integer' }
|
|
}
|
|
},
|
|
{ coerce: true }
|
|
)
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.deep.equal({
|
|
name: '',
|
|
cool: true,
|
|
cool2: false,
|
|
number: 5.12,
|
|
integer: 5
|
|
})
|
|
})
|
|
|
|
it('strictAdditionalProperties false', () => {
|
|
const result = validate(
|
|
{
|
|
name: 'nala',
|
|
extra: true
|
|
},
|
|
{
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' }
|
|
}
|
|
}
|
|
)
|
|
|
|
expect(result.valid).to.equal(true)
|
|
expect(result.instance).to.deep.equal({
|
|
name: 'nala',
|
|
extra: true
|
|
})
|
|
})
|
|
|
|
it('strictAdditionalProperties true', () => {
|
|
const result = validate(
|
|
{
|
|
name: 'nala',
|
|
extra: true
|
|
},
|
|
{
|
|
type: 'object',
|
|
properties: {
|
|
name: { type: 'string' }
|
|
}
|
|
},
|
|
{ strictAdditionalProperties: true }
|
|
)
|
|
|
|
expect(result.valid).to.equal(false)
|
|
})
|
|
})
|