Files
gridpilot.gg/core/racing/domain/value-objects/RaceTimeOfDay.test.ts
2025-12-17 01:23:09 +01:00

65 lines
2.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { RaceTimeOfDay } from './RaceTimeOfDay';
import { RacingDomainValidationError } from '../errors/RacingDomainError';
describe('RaceTimeOfDay', () => {
it('should create valid time', () => {
const time = new RaceTimeOfDay(12, 30);
expect(time.hour).toBe(12);
expect(time.minute).toBe(30);
});
it('should throw on invalid hour', () => {
expect(() => new RaceTimeOfDay(24, 0)).toThrow(RacingDomainValidationError);
expect(() => new RaceTimeOfDay(-1, 0)).toThrow(RacingDomainValidationError);
expect(() => new RaceTimeOfDay(12.5, 0)).toThrow(RacingDomainValidationError);
});
it('should throw on invalid minute', () => {
expect(() => new RaceTimeOfDay(12, 60)).toThrow(RacingDomainValidationError);
expect(() => new RaceTimeOfDay(12, -1)).toThrow(RacingDomainValidationError);
expect(() => new RaceTimeOfDay(12, 30.5)).toThrow(RacingDomainValidationError);
});
it('should create from valid string', () => {
const time = RaceTimeOfDay.fromString('14:45');
expect(time.hour).toBe(14);
expect(time.minute).toBe(45);
});
it('should throw on invalid string format', () => {
expect(() => RaceTimeOfDay.fromString('14:45:00')).toThrow(RacingDomainValidationError);
expect(() => RaceTimeOfDay.fromString('1445')).toThrow(RacingDomainValidationError);
expect(() => RaceTimeOfDay.fromString('14-45')).toThrow(RacingDomainValidationError);
});
it('should throw on invalid hour in string', () => {
expect(() => RaceTimeOfDay.fromString('25:00')).toThrow(RacingDomainValidationError);
});
it('should throw on invalid minute in string', () => {
expect(() => RaceTimeOfDay.fromString('12:60')).toThrow(RacingDomainValidationError);
});
it('should convert to string', () => {
const time = new RaceTimeOfDay(9, 5);
expect(time.toString()).toBe('09:05');
});
it('should equal same time', () => {
const t1 = new RaceTimeOfDay(10, 20);
const t2 = new RaceTimeOfDay(10, 20);
expect(t1.equals(t2)).toBe(true);
});
it('should not equal different time', () => {
const t1 = new RaceTimeOfDay(10, 20);
const t2 = new RaceTimeOfDay(10, 21);
expect(t1.equals(t2)).toBe(false);
});
it('should return props', () => {
const time = new RaceTimeOfDay(15, 30);
expect(time.props).toEqual({ hour: 15, minute: 30 });
});
});