import { describe, it, expect } from 'vitest' import { validateJson, formatJson } from './jsonValidation' describe('validateJson', () => { it('returns valid for empty string', () => { const result = validateJson('') expect(result.valid).toBe(true) expect(result.error).toBeNull() expect(result.parsed).toBeNull() }) it('returns valid for whitespace only', () => { const result = validateJson(' ') expect(result.valid).toBe(true) expect(result.error).toBeNull() }) it('returns valid for valid JSON object', () => { const result = validateJson('{"key": "value"}') expect(result.valid).toBe(true) expect(result.error).toBeNull() expect(result.parsed).toEqual({ key: 'value' }) }) it('returns valid for nested JSON object', () => { const result = validateJson('{"outer": {"inner": 123}}') expect(result.valid).toBe(true) expect(result.parsed).toEqual({ outer: { inner: 123 } }) }) it('returns invalid for JSON array', () => { const result = validateJson('[1, 2, 3]') expect(result.valid).toBe(false) expect(result.error).toBe('Configuration must be a JSON object') }) it('returns invalid for JSON primitive string', () => { const result = validateJson('"hello"') expect(result.valid).toBe(false) expect(result.error).toBe('Configuration must be a JSON object') }) it('returns invalid for JSON primitive number', () => { const result = validateJson('42') expect(result.valid).toBe(false) expect(result.error).toBe('Configuration must be a JSON object') }) it('returns invalid for JSON null', () => { const result = validateJson('null') expect(result.valid).toBe(false) expect(result.error).toBe('Configuration must be a JSON object') }) it('returns invalid for malformed JSON', () => { const result = validateJson('{"key": }') expect(result.valid).toBe(false) expect(result.error).toContain('Invalid JSON') }) it('returns invalid for incomplete JSON', () => { const result = validateJson('{"key": "value"') expect(result.valid).toBe(false) expect(result.error).toContain('Invalid JSON') }) it('returns invalid for JSON with trailing comma', () => { const result = validateJson('{"key": "value",}') expect(result.valid).toBe(false) expect(result.error).toContain('Invalid JSON') }) }) describe('formatJson', () => { it('returns empty string unchanged', () => { expect(formatJson('')).toBe('') }) it('returns whitespace unchanged', () => { expect(formatJson(' ')).toBe(' ') }) it('formats compact JSON with indentation', () => { const result = formatJson('{"key":"value"}') expect(result).toBe('{\n "key": "value"\n}') }) it('formats nested JSON with proper indentation', () => { const result = formatJson('{"outer":{"inner":123}}') expect(result).toBe('{\n "outer": {\n "inner": 123\n }\n}') }) it('returns invalid JSON unchanged', () => { const invalid = '{"key": }' expect(formatJson(invalid)).toBe(invalid) }) })