Files
gridpilot.gg/tests/unit/domain/value-objects/RaceCreationResult.test.ts
2025-11-26 17:03:29 +01:00

107 lines
3.0 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { RaceCreationResult } from '../../../../packages/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(),
});
});
});
});