119 lines
3.5 KiB
TypeScript
119 lines
3.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { RacingDomainValidationError } from '../errors/RacingDomainError';
|
|
import { Car } from './Car';
|
|
|
|
describe('Car', () => {
|
|
describe('create', () => {
|
|
it('should create a car with required fields', () => {
|
|
const car = Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
manufacturer: 'Ferrari',
|
|
gameId: 'iracing',
|
|
});
|
|
|
|
expect(car.id.toString()).toBe('1');
|
|
expect(car.name.toString()).toBe('Ferrari 488');
|
|
expect(car.manufacturer.toString()).toBe('Ferrari');
|
|
expect(car.gameId.toString()).toBe('iracing');
|
|
});
|
|
|
|
it('should create a car with all fields', () => {
|
|
const car = Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
shortName: '488',
|
|
manufacturer: 'Ferrari',
|
|
carClass: 'gt',
|
|
license: 'Pro',
|
|
year: 2018,
|
|
horsepower: 661,
|
|
weight: 1320,
|
|
imageUrl: 'http://example.com/car.jpg',
|
|
gameId: 'iracing',
|
|
});
|
|
|
|
expect(car.id.toString()).toBe('1');
|
|
expect(car.name.toString()).toBe('Ferrari 488');
|
|
expect(car.shortName).toBe('488');
|
|
expect(car.manufacturer.toString()).toBe('Ferrari');
|
|
expect(car.carClass.toString()).toBe('gt');
|
|
expect(car.license.toString()).toBe('Pro');
|
|
expect(car.year.toNumber()).toBe(2018);
|
|
expect(car.horsepower?.toNumber()).toBe(661);
|
|
expect(car.weight?.toNumber()).toBe(1320);
|
|
expect(car.imageUrl?.toString()).toBe('http://example.com/car.jpg');
|
|
expect(car.gameId.toString()).toBe('iracing');
|
|
});
|
|
|
|
it('should use defaults for optional fields', () => {
|
|
const car = Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
manufacturer: 'Ferrari',
|
|
gameId: 'iracing',
|
|
});
|
|
|
|
expect(car.carClass.toString()).toBe('gt');
|
|
expect(car.license.toString()).toBe('D');
|
|
expect(car.year.toNumber()).toBe(new Date().getFullYear());
|
|
expect(car.shortName).toBe('Ferrari 48');
|
|
});
|
|
|
|
it('should throw error for invalid id', () => {
|
|
expect(() => Car.create({
|
|
id: '',
|
|
name: 'Ferrari 488',
|
|
manufacturer: 'Ferrari',
|
|
gameId: 'iracing',
|
|
})).toThrow(RacingDomainValidationError);
|
|
});
|
|
|
|
it('should throw error for invalid name', () => {
|
|
expect(() => Car.create({
|
|
id: '1',
|
|
name: '',
|
|
manufacturer: 'Ferrari',
|
|
gameId: 'iracing',
|
|
})).toThrow(RacingDomainValidationError);
|
|
});
|
|
|
|
it('should throw error for invalid manufacturer', () => {
|
|
expect(() => Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
manufacturer: '',
|
|
gameId: 'iracing',
|
|
})).toThrow(RacingDomainValidationError);
|
|
});
|
|
|
|
it('should throw error for invalid gameId', () => {
|
|
expect(() => Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
manufacturer: 'Ferrari',
|
|
gameId: '',
|
|
})).toThrow(RacingDomainValidationError);
|
|
});
|
|
|
|
it('should throw error for invalid horsepower', () => {
|
|
expect(() => Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
manufacturer: 'Ferrari',
|
|
gameId: 'iracing',
|
|
horsepower: 0,
|
|
})).toThrow(RacingDomainValidationError);
|
|
});
|
|
|
|
it('should throw error for invalid weight', () => {
|
|
expect(() => Car.create({
|
|
id: '1',
|
|
name: 'Ferrari 488',
|
|
manufacturer: 'Ferrari',
|
|
gameId: 'iracing',
|
|
weight: -1,
|
|
})).toThrow(RacingDomainValidationError);
|
|
});
|
|
});
|
|
}); |