import { describe, it, expect } from 'vitest'; import { RaceCreationResult } from '@gridpilot/automation/domain/value-objects/RaceCreationResult'; describe('RaceCreationResult Value Object', () => { describe('create', () => { it('should create race creation result with all fields', () => { const result = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$10.00', timestamp: new Date('2025-11-25T12:00:00Z'), }); expect(result.sessionId).toBe('test-session-123'); expect(result.price).toBe('$10.00'); expect(result.timestamp).toEqual(new Date('2025-11-25T12:00:00Z')); }); it('should throw error for empty session ID', () => { expect(() => RaceCreationResult.create({ sessionId: '', price: '$10.00', timestamp: new Date(), }) ).toThrow('Session ID cannot be empty'); }); it('should throw error for empty price', () => { expect(() => RaceCreationResult.create({ sessionId: 'test-session-123', price: '', timestamp: new Date(), }) ).toThrow('Price cannot be empty'); }); }); describe('equals', () => { it('should return true for equal results', () => { const timestamp = new Date('2025-11-25T12:00:00Z'); const result1 = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$10.00', timestamp, }); const result2 = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$10.00', timestamp, }); expect(result1.equals(result2)).toBe(true); }); it('should return false for different session IDs', () => { const timestamp = new Date('2025-11-25T12:00:00Z'); const result1 = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$10.00', timestamp, }); const result2 = RaceCreationResult.create({ sessionId: 'test-session-456', price: '$10.00', timestamp, }); expect(result1.equals(result2)).toBe(false); }); it('should return false for different prices', () => { const timestamp = new Date('2025-11-25T12:00:00Z'); const result1 = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$10.00', timestamp, }); const result2 = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$20.00', timestamp, }); expect(result1.equals(result2)).toBe(false); }); }); describe('toJSON', () => { it('should serialize to JSON correctly', () => { const timestamp = new Date('2025-11-25T12:00:00Z'); const result = RaceCreationResult.create({ sessionId: 'test-session-123', price: '$10.00', timestamp, }); const json = result.toJSON(); expect(json).toEqual({ sessionId: 'test-session-123', price: '$10.00', timestamp: timestamp.toISOString(), }); }); }); });