UNPKG

@zhanghongping/json-sage-workflow-cli

Version:

An intelligent JSON processing workflow system with improved error handling and configuration

88 lines (69 loc) 2.94 kB
import { JsonAnalyzer } from '../core/analyzer'; import { writeFile } from 'fs/promises'; import { join } from 'path'; import os from 'os'; describe('JsonAnalyzer', () => { let analyzer: JsonAnalyzer; let tempDir: string; beforeEach(() => { analyzer = new JsonAnalyzer(); tempDir = join(os.tmpdir(), 'jsonsage-tests'); }); it('should analyze primitive types correctly', async () => { const testData = { string: 'test', number: 123, boolean: true, null: null }; const testFile = join(tempDir, 'test.json'); await writeFile(testFile, JSON.stringify(testData)); const schema = await analyzer.analyzeJsonStructure(testFile); expect(schema.type).toBe('object'); expect(schema.properties).toBeDefined(); expect(schema.properties?.string.type).toBe('string'); expect(schema.properties?.number.type).toBe('integer'); expect(schema.properties?.boolean.type).toBe('boolean'); expect(schema.properties?.null.type).toBe('null'); }); it('should detect date-time strings', async () => { const testData = { date: '2025-01-12T15:00:00Z' }; const testFile = join(tempDir, 'date-test.json'); await writeFile(testFile, JSON.stringify(testData)); const schema = await analyzer.analyzeJsonStructure(testFile); expect(schema.properties?.date.type).toBe('string'); expect(schema.properties?.date.format).toBe('date-time'); }); it('should handle nested objects', async () => { const testData = { user: { name: 'John', age: 30, address: { street: '123 Main St', city: 'Example City' } } }; const testFile = join(tempDir, 'nested-test.json'); await writeFile(testFile, JSON.stringify(testData)); const schema = await analyzer.analyzeJsonStructure(testFile); expect(schema.properties?.user.type).toBe('object'); expect(schema.properties?.user.properties?.address.type).toBe('object'); }); it('should analyze arrays correctly', async () => { const testData = { numbers: [1, 2, 3], mixed: [1, 'string', true] }; const testFile = join(tempDir, 'array-test.json'); await writeFile(testFile, JSON.stringify(testData)); const schema = await analyzer.analyzeJsonStructure(testFile); expect(schema.properties?.numbers.type).toBe('array'); expect(schema.properties?.numbers.items.type).toBe('integer'); expect(schema.properties?.mixed.type).toBe('array'); expect(schema.properties?.mixed.items.anyOf).toBeDefined(); }); });