judgeval
Version:
Judgment SDK for TypeScript/JavaScript
285 lines • 14.5 kB
JavaScript
"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