UNPKG

judgeval

Version:

Judgment SDK for TypeScript/JavaScript

285 lines 14.5 kB
"use strict"; /** * @file example.test.ts * @description Tests for the Example and ExampleBuilder classes. * This file tests: * - Example construction and validation * - ExampleBuilder pattern * - JSON serialization * - Default values and optional fields * - Trace-related fields and validation * - UUID generation * - Error handling */ Object.defineProperty(exports, "__esModule", { value: true }); const globals_1 = require("@jest/globals"); const example_js_1 = require("../../data/example.js"); (0, globals_1.describe)('Example', () => { (0, globals_1.describe)('constructor', () => { (0, globals_1.it)('should create an example with all fields', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', expectedOutput: 'expected output', context: ['context 1', 'context 2'], retrievalContext: ['retrieval 1', 'retrieval 2'], additionalMetadata: { key: 'value' }, toolsCalled: ['tool1', 'tool2'], expectedTools: ['tool1', 'tool2'], name: 'test example', exampleId: 'test-id', exampleIndex: 1, timestamp: '2024-01-01T00:00:00.000Z', traceId: 'test-trace', example: true, }); (0, globals_1.expect)(example.input).toBe('test input'); (0, globals_1.expect)(example.actualOutput).toBe('test output'); (0, globals_1.expect)(example.expectedOutput).toBe('expected output'); (0, globals_1.expect)(example.context).toEqual(['context 1', 'context 2']); (0, globals_1.expect)(example.retrievalContext).toEqual(['retrieval 1', 'retrieval 2']); (0, globals_1.expect)(example.additionalMetadata).toEqual({ key: 'value' }); (0, globals_1.expect)(example.toolsCalled).toEqual(['tool1', 'tool2']); (0, globals_1.expect)(example.expectedTools).toEqual(['tool1', 'tool2']); (0, globals_1.expect)(example.name).toBe('test example'); (0, globals_1.expect)(example.exampleId).toBe('test-id'); (0, globals_1.expect)(example.exampleIndex).toBe(1); (0, globals_1.expect)(example.timestamp).toBe('2024-01-01T00:00:00.000Z'); (0, globals_1.expect)(example.traceId).toBe('test-trace'); (0, globals_1.expect)(example.example).toBe(true); }); (0, globals_1.it)('should create an example with required fields only', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', }); (0, globals_1.expect)(example.input).toBe('test input'); (0, globals_1.expect)(example.actualOutput).toBe('test output'); (0, globals_1.expect)(example.expectedOutput).toBeUndefined(); (0, globals_1.expect)(example.context).toBeUndefined(); (0, globals_1.expect)(example.retrievalContext).toBeUndefined(); (0, globals_1.expect)(example.additionalMetadata).toBeUndefined(); (0, globals_1.expect)(example.toolsCalled).toBeUndefined(); (0, globals_1.expect)(example.expectedTools).toBeUndefined(); (0, globals_1.expect)(example.name).toBeUndefined(); (0, globals_1.expect)(example.exampleId).toBeDefined(); (0, globals_1.expect)(example.exampleIndex).toBeUndefined(); (0, globals_1.expect)(example.timestamp).toBeDefined(); (0, globals_1.expect)(example.traceId).toBeUndefined(); (0, globals_1.expect)(example.example).toBe(true); }); (0, globals_1.it)('should generate a valid UUID for exampleId if not provided', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', }); (0, globals_1.expect)(example.exampleId).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i); }); (0, globals_1.it)('should set example to false when explicitly set', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', example: false, }); (0, globals_1.expect)(example.example).toBe(false); }); (0, globals_1.it)('should validate trace ID format', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', traceId: 'invalid-trace-id' }); (0, globals_1.expect)(example.traceId).toBe('invalid-trace-id'); // Test with valid UUID format const example2 = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', traceId: '123e4567-e89b-12d3-a456-426614174000' }); (0, globals_1.expect)(example2.traceId).toBe('123e4567-e89b-12d3-a456-426614174000'); }); (0, globals_1.it)('should handle trace context correctly', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', context: ['trace context 1', 'trace context 2'], retrievalContext: ['retrieved context 1', 'retrieved context 2'] }); (0, globals_1.expect)(example.context).toEqual(['trace context 1', 'trace context 2']); (0, globals_1.expect)(example.retrievalContext).toEqual(['retrieved context 1', 'retrieved context 2']); }); (0, globals_1.it)('should handle array outputs correctly', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: ['output 1', 'output 2'], expectedOutput: ['expected 1', 'expected 2'] }); (0, globals_1.expect)(example.actualOutput).toEqual(['output 1', 'output 2']); (0, globals_1.expect)(example.expectedOutput).toEqual(['expected 1', 'expected 2']); }); }); (0, globals_1.describe)('toJSON', () => { (0, globals_1.it)('should convert example to JSON', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', expectedOutput: 'expected output', context: ['context 1', 'context 2'], retrievalContext: ['retrieval 1', 'retrieval 2'], additionalMetadata: { key: 'value' }, toolsCalled: ['tool1', 'tool2'], expectedTools: ['tool1', 'tool2'], name: 'test example', exampleIndex: 1, timestamp: '2024-01-01T00:00:00.000Z', traceId: 'test-trace', example: true, }); const json = example.toJSON(); (0, globals_1.expect)(json).toEqual({ input: 'test input', actualOutput: 'test output', expectedOutput: 'expected output', context: ['context 1', 'context 2'], retrievalContext: ['retrieval 1', 'retrieval 2'], additionalMetadata: { key: 'value' }, toolsCalled: ['tool1', 'tool2'], expectedTools: ['tool1', 'tool2'], name: 'test example', exampleId: globals_1.expect.stringMatching(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i), exampleIndex: 1, timestamp: '2024-01-01T00:00:00.000Z', traceId: 'test-trace', example: true, }); }); (0, globals_1.it)('should generate default values for required fields in JSON', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', }); const json = example.toJSON(); (0, globals_1.expect)(json).toEqual({ input: 'test input', actualOutput: 'test output', name: 'example', exampleId: globals_1.expect.stringMatching(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i), exampleIndex: 0, timestamp: globals_1.expect.any(String), traceId: globals_1.expect.stringMatching(/^trace-\d+-\d+$/), example: true, }); }); (0, globals_1.it)('should handle trace-related fields in JSON', () => { const example = new example_js_1.Example({ input: 'test input', actualOutput: 'test output', traceId: 'test-trace', context: ['trace context'], retrievalContext: ['retrieved context'] }); const json = example.toJSON(); (0, globals_1.expect)(json).toEqual({ input: 'test input', actualOutput: 'test output', name: 'example', exampleId: globals_1.expect.stringMatching(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i), exampleIndex: 0, timestamp: globals_1.expect.any(String), traceId: 'test-trace', context: ['trace context'], retrievalContext: ['retrieved context'], example: true }); }); }); }); (0, globals_1.describe)('ExampleBuilder', () => { (0, globals_1.it)('should build an example with all fields', () => { const example = new example_js_1.ExampleBuilder() .input('test input') .actualOutput('test output') .expectedOutput('expected output') .context(['context 1', 'context 2']) .retrievalContext(['retrieval 1', 'retrieval 2']) .additionalMetadata({ key: 'value' }) .toolsCalled(['tool1', 'tool2']) .expectedTools(['tool1', 'tool2']) .name('test example') .exampleId('test-id') .exampleIndex(1) .timestamp('2024-01-01T00:00:00.000Z') .traceId('test-trace') .example(true) .build(); (0, globals_1.expect)(example.input).toBe('test input'); (0, globals_1.expect)(example.actualOutput).toBe('test output'); (0, globals_1.expect)(example.expectedOutput).toBe('expected output'); (0, globals_1.expect)(example.context).toEqual(['context 1', 'context 2']); (0, globals_1.expect)(example.retrievalContext).toEqual(['retrieval 1', 'retrieval 2']); (0, globals_1.expect)(example.additionalMetadata).toEqual({ key: 'value' }); (0, globals_1.expect)(example.toolsCalled).toEqual(['tool1', 'tool2']); (0, globals_1.expect)(example.expectedTools).toEqual(['tool1', 'tool2']); (0, globals_1.expect)(example.name).toBe('test example'); (0, globals_1.expect)(example.exampleId).toBe('test-id'); (0, globals_1.expect)(example.exampleIndex).toBe(1); (0, globals_1.expect)(example.timestamp).toBe('2024-01-01T00:00:00.000Z'); (0, globals_1.expect)(example.traceId).toBe('test-trace'); (0, globals_1.expect)(example.example).toBe(true); }); (0, globals_1.it)('should build an example with required fields only', () => { const example = new example_js_1.ExampleBuilder() .input('test input') .actualOutput('test output') .build(); (0, globals_1.expect)(example.input).toBe('test input'); (0, globals_1.expect)(example.actualOutput).toBe('test output'); (0, globals_1.expect)(example.expectedOutput).toBeUndefined(); (0, globals_1.expect)(example.context).toBeUndefined(); (0, globals_1.expect)(example.retrievalContext).toBeUndefined(); (0, globals_1.expect)(example.additionalMetadata).toBeUndefined(); (0, globals_1.expect)(example.toolsCalled).toBeUndefined(); (0, globals_1.expect)(example.expectedTools).toBeUndefined(); (0, globals_1.expect)(example.name).toBeUndefined(); (0, globals_1.expect)(example.exampleId).toBeDefined(); (0, globals_1.expect)(example.exampleIndex).toBeUndefined(); (0, globals_1.expect)(example.timestamp).toBeDefined(); (0, globals_1.expect)(example.traceId).toBeUndefined(); (0, globals_1.expect)(example.example).toBe(true); }); (0, globals_1.it)('should throw error when input is not provided', () => { (0, globals_1.expect)(() => { new example_js_1.ExampleBuilder().build(); }).toThrow('Input is required for an Example'); }); (0, globals_1.it)('should set example to false when explicitly set', () => { const example = new example_js_1.ExampleBuilder() .input('test input') .actualOutput('test output') .example(false) .build(); (0, globals_1.expect)(example.example).toBe(false); }); (0, globals_1.it)('should handle trace-related fields in builder', () => { const example = new example_js_1.ExampleBuilder() .input('test input') .actualOutput('test output') .traceId('test-trace') .context(['trace context']) .retrievalContext(['retrieved context']) .build(); (0, globals_1.expect)(example.traceId).toBe('test-trace'); (0, globals_1.expect)(example.context).toEqual(['trace context']); (0, globals_1.expect)(example.retrievalContext).toEqual(['retrieved context']); }); (0, globals_1.it)('should handle array outputs in builder', () => { const example = new example_js_1.ExampleBuilder() .input('test input') .actualOutput(['output 1', 'output 2']) .expectedOutput(['expected 1', 'expected 2']) .build(); (0, globals_1.expect)(example.actualOutput).toEqual(['output 1', 'output 2']); (0, globals_1.expect)(example.expectedOutput).toEqual(['expected 1', 'expected 2']); }); }); //# sourceMappingURL=example.test.js.map