pipe-protocol
Version:
A protocol for large scale Interplanetary Intertool Agent Context
174 lines • 6.29 kB
JavaScript
"use strict";
/**
* @file Schema Generation Test Suite
* @version 1.0.0
* @status IN_DEVELOPMENT
* @lastModified 2024-02-04
*
* Tests for automatic JSON Schema generation from tool results
*
* Test Coverage:
* - Basic type inference
* - Complex object structure handling
* - Array type handling
* - Nested object handling
* - Required field detection
*/
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const schemaGeneration_1 = require("../schemaGeneration");
(0, vitest_1.describe)('Schema Generation', () => {
(0, vitest_1.describe)('Basic Type Inference', () => {
(0, vitest_1.it)('should infer string type', () => {
const data = 'test string';
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'string'
});
});
(0, vitest_1.it)('should infer number type', () => {
const data = 42;
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'number'
});
});
(0, vitest_1.it)('should infer boolean type', () => {
const data = true;
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'boolean'
});
});
(0, vitest_1.it)('should handle null values', () => {
const data = null;
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'null'
});
});
});
(0, vitest_1.describe)('Object Structure Handling', () => {
(0, vitest_1.it)('should generate schema for simple objects', () => {
const data = {
name: 'test',
count: 1,
isActive: true
};
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'object',
properties: {
name: { type: 'string' },
count: { type: 'number' },
isActive: { type: 'boolean' }
},
required: ['name', 'count', 'isActive']
});
});
(0, vitest_1.it)('should handle nested objects', () => {
const data = {
user: {
id: 1,
details: {
name: 'test'
}
}
};
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'object',
properties: {
user: {
type: 'object',
properties: {
id: { type: 'number' },
details: {
type: 'object',
properties: {
name: { type: 'string' }
},
required: ['name']
}
},
required: ['id', 'details']
}
},
required: ['user']
});
});
});
(0, vitest_1.describe)('Array Handling', () => {
(0, vitest_1.it)('should handle arrays of primitive types', () => {
const data = [1, 2, 3];
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'array',
items: { type: 'number' }
});
});
(0, vitest_1.it)('should handle arrays of objects', () => {
const data = [
{ id: 1, name: 'first' },
{ id: 2, name: 'second' }
];
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'array',
items: {
type: 'object',
properties: {
id: { type: 'number' },
name: { type: 'string' }
},
required: ['id', 'name']
}
});
});
(0, vitest_1.it)('should handle mixed type arrays', () => {
const data = [1, 'test', true];
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'array',
items: {
oneOf: [
{ type: 'number' },
{ type: 'string' },
{ type: 'boolean' }
]
}
});
});
});
(0, vitest_1.describe)('Edge Cases', () => {
(0, vitest_1.it)('should handle empty objects', () => {
const data = {};
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'object',
properties: {}
});
});
(0, vitest_1.it)('should handle empty arrays', () => {
const data = [];
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'array',
items: {}
});
});
(0, vitest_1.it)('should handle undefined values', () => {
const data = {
optional: undefined
};
const schema = (0, schemaGeneration_1.generateSchema)(data);
(0, vitest_1.expect)(schema).toEqual({
type: 'object',
properties: {
optional: { type: 'undefined' }
}
});
});
});
});
//# sourceMappingURL=schemaGeneration.test.js.map