fatsify核心功能示例测试!!!
This commit is contained in:
196
node_modules/fast-json-stringify/test/side-effect.test.js
generated
vendored
Normal file
196
node_modules/fast-json-stringify/test/side-effect.test.js
generated
vendored
Normal file
@@ -0,0 +1,196 @@
|
||||
'use strict'
|
||||
|
||||
const { test } = require('node:test')
|
||||
const clone = require('rfdc/default')
|
||||
const build = require('..')
|
||||
|
||||
test('oneOf with $ref should not change the input schema', t => {
|
||||
t.plan(2)
|
||||
|
||||
const referenceSchema = {
|
||||
$id: 'externalId',
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: { type: 'string' }
|
||||
}
|
||||
}
|
||||
|
||||
const schema = {
|
||||
$id: 'mainSchema',
|
||||
type: 'object',
|
||||
properties: {
|
||||
people: {
|
||||
oneOf: [{ $ref: 'externalId' }]
|
||||
}
|
||||
}
|
||||
}
|
||||
const clonedSchema = clone(schema)
|
||||
const stringify = build(schema, {
|
||||
schema: {
|
||||
[referenceSchema.$id]: referenceSchema
|
||||
}
|
||||
})
|
||||
|
||||
const value = stringify({ people: { name: 'hello', foo: 'bar' } })
|
||||
t.assert.equal(value, '{"people":{"name":"hello"}}')
|
||||
t.assert.deepStrictEqual(schema, clonedSchema)
|
||||
})
|
||||
|
||||
test('oneOf and anyOf with $ref should not change the input schema', t => {
|
||||
t.plan(3)
|
||||
|
||||
const referenceSchema = {
|
||||
$id: 'externalSchema',
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: { type: 'string' }
|
||||
}
|
||||
}
|
||||
|
||||
const schema = {
|
||||
$id: 'rootSchema',
|
||||
type: 'object',
|
||||
properties: {
|
||||
people: {
|
||||
oneOf: [{ $ref: 'externalSchema' }]
|
||||
},
|
||||
love: {
|
||||
anyOf: [
|
||||
{ $ref: '#/definitions/foo' },
|
||||
{ type: 'boolean' }
|
||||
]
|
||||
}
|
||||
},
|
||||
definitions: {
|
||||
foo: { type: 'string' }
|
||||
}
|
||||
}
|
||||
const clonedSchema = clone(schema)
|
||||
const stringify = build(schema, {
|
||||
schema: {
|
||||
[referenceSchema.$id]: referenceSchema
|
||||
}
|
||||
})
|
||||
|
||||
const valueAny1 = stringify({ people: { name: 'hello', foo: 'bar' }, love: 'music' })
|
||||
const valueAny2 = stringify({ people: { name: 'hello', foo: 'bar' }, love: true })
|
||||
|
||||
t.assert.equal(valueAny1, '{"people":{"name":"hello"},"love":"music"}')
|
||||
t.assert.equal(valueAny2, '{"people":{"name":"hello"},"love":true}')
|
||||
t.assert.deepStrictEqual(schema, clonedSchema)
|
||||
})
|
||||
|
||||
test('multiple $ref tree', t => {
|
||||
t.plan(2)
|
||||
|
||||
const referenceDeepSchema = {
|
||||
$id: 'deepId',
|
||||
type: 'number'
|
||||
}
|
||||
|
||||
const referenceSchema = {
|
||||
$id: 'externalId',
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: { $ref: '#/definitions/foo' },
|
||||
age: { $ref: 'deepId' }
|
||||
},
|
||||
definitions: {
|
||||
foo: { type: 'string' }
|
||||
}
|
||||
}
|
||||
|
||||
const schema = {
|
||||
$id: 'mainSchema',
|
||||
type: 'object',
|
||||
properties: {
|
||||
people: {
|
||||
oneOf: [{ $ref: 'externalId' }]
|
||||
}
|
||||
}
|
||||
}
|
||||
const clonedSchema = clone(schema)
|
||||
const stringify = build(schema, {
|
||||
schema: {
|
||||
[referenceDeepSchema.$id]: referenceDeepSchema,
|
||||
[referenceSchema.$id]: referenceSchema
|
||||
}
|
||||
})
|
||||
|
||||
const value = stringify({ people: { name: 'hello', foo: 'bar', age: 42 } })
|
||||
t.assert.equal(value, '{"people":{"name":"hello","age":42}}')
|
||||
t.assert.deepStrictEqual(schema, clonedSchema)
|
||||
})
|
||||
|
||||
test('must not mutate items $ref', t => {
|
||||
t.plan(2)
|
||||
|
||||
const referenceSchema = {
|
||||
$id: 'ShowSchema',
|
||||
$schema: 'http://json-schema.org/draft-07/schema#',
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: {
|
||||
type: 'string'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const schema = {
|
||||
$id: 'ListSchema',
|
||||
$schema: 'http://json-schema.org/draft-07/schema#',
|
||||
type: 'array',
|
||||
items: {
|
||||
$ref: 'ShowSchema#'
|
||||
}
|
||||
}
|
||||
const clonedSchema = clone(schema)
|
||||
const stringify = build(schema, {
|
||||
schema: {
|
||||
[referenceSchema.$id]: referenceSchema
|
||||
}
|
||||
})
|
||||
|
||||
const value = stringify([{ name: 'foo' }])
|
||||
t.assert.equal(value, '[{"name":"foo"}]')
|
||||
t.assert.deepStrictEqual(schema, clonedSchema)
|
||||
})
|
||||
|
||||
test('must not mutate items referred by $ref', t => {
|
||||
t.plan(2)
|
||||
|
||||
const firstSchema = {
|
||||
$id: 'example1',
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: {
|
||||
type: 'string'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const reusedSchema = {
|
||||
$id: 'example2',
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: {
|
||||
oneOf: [
|
||||
{
|
||||
$ref: 'example1'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const clonedSchema = clone(firstSchema)
|
||||
const stringify = build(reusedSchema, {
|
||||
schema: {
|
||||
[firstSchema.$id]: firstSchema
|
||||
}
|
||||
})
|
||||
|
||||
const value = stringify({ name: { name: 'foo' } })
|
||||
t.assert.equal(value, '{"name":{"name":"foo"}}')
|
||||
t.assert.deepStrictEqual(firstSchema, clonedSchema)
|
||||
})
|
||||
Reference in New Issue
Block a user