chatgpt-api/packages/json-schema/test/coercion.test.ts

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