107 lines
3.0 KiB
TypeScript
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(),
|
|
});
|
|
});
|
|
});
|
|
}); |