137 lines
3.5 KiB
TypeScript
137 lines
3.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { Track } from './Track';
|
|
|
|
describe('Track', () => {
|
|
it('should create a track', () => {
|
|
const track = Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
shortName: 'MON',
|
|
country: 'Italy',
|
|
category: 'road',
|
|
difficulty: 'advanced',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
imageUrl: 'https://example.com/monza.jpg',
|
|
gameId: 'game1',
|
|
});
|
|
|
|
expect(track.id).toBe('track1');
|
|
expect(track.name.toString()).toBe('Monza Circuit');
|
|
expect(track.shortName.toString()).toBe('MON');
|
|
expect(track.country.toString()).toBe('Italy');
|
|
expect(track.category).toBe('road');
|
|
expect(track.difficulty).toBe('advanced');
|
|
expect(track.lengthKm.toNumber()).toBe(5.793);
|
|
expect(track.turns.toNumber()).toBe(11);
|
|
expect(track.imageUrl.toString()).toBe('https://example.com/monza.jpg');
|
|
expect(track.gameId.toString()).toBe('game1');
|
|
});
|
|
|
|
it('should create track with defaults', () => {
|
|
const track = Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
country: 'Italy',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
gameId: 'game1',
|
|
});
|
|
|
|
expect(track.shortName.toString()).toBe('MON');
|
|
expect(track.category).toBe('road');
|
|
expect(track.difficulty).toBe('intermediate');
|
|
expect(track.imageUrl.toString()).toBeUndefined();
|
|
});
|
|
|
|
it('should create track with generated shortName', () => {
|
|
const track = Track.create({
|
|
id: 'track1',
|
|
name: 'Silverstone',
|
|
country: 'UK',
|
|
lengthKm: 5.891,
|
|
turns: 18,
|
|
gameId: 'game1',
|
|
});
|
|
|
|
expect(track.shortName.toString()).toBe('SIL');
|
|
});
|
|
|
|
it('should throw on invalid id', () => {
|
|
expect(() => Track.create({
|
|
id: '',
|
|
name: 'Monza Circuit',
|
|
country: 'Italy',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
gameId: 'game1',
|
|
})).toThrow('Track ID is required');
|
|
});
|
|
|
|
it('should throw on invalid name', () => {
|
|
expect(() => Track.create({
|
|
id: 'track1',
|
|
name: '',
|
|
country: 'Italy',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
gameId: 'game1',
|
|
})).toThrow('Track name cannot be empty');
|
|
});
|
|
|
|
it('should throw on invalid country', () => {
|
|
expect(() => Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
country: '',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
gameId: 'game1',
|
|
})).toThrow('Track country is required');
|
|
});
|
|
|
|
it('should throw on invalid lengthKm', () => {
|
|
expect(() => Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
country: 'Italy',
|
|
lengthKm: 0,
|
|
turns: 11,
|
|
gameId: 'game1',
|
|
})).toThrow('Track length must be positive');
|
|
});
|
|
|
|
it('should throw on negative turns', () => {
|
|
expect(() => Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
country: 'Italy',
|
|
lengthKm: 5.793,
|
|
turns: -1,
|
|
gameId: 'game1',
|
|
})).toThrow('Track turns cannot be negative');
|
|
});
|
|
|
|
it('should throw on invalid gameId', () => {
|
|
expect(() => Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
country: 'Italy',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
gameId: '',
|
|
})).toThrow('Track game ID cannot be empty');
|
|
});
|
|
|
|
it('should throw on empty imageUrl string', () => {
|
|
expect(() => Track.create({
|
|
id: 'track1',
|
|
name: 'Monza Circuit',
|
|
country: 'Italy',
|
|
lengthKm: 5.793,
|
|
turns: 11,
|
|
imageUrl: '',
|
|
gameId: 'game1',
|
|
})).toThrow('Track image URL cannot be empty string');
|
|
});
|
|
}); |