import { describe, it, expect } from 'vitest'; import { RaceName } from './RaceName'; describe('RaceName', () => { it('creates a valid name and exposes stable value/toString', () => { const name = RaceName.fromString('Valid Race Name'); expect(name.value).toBe('Valid Race Name'); expect(name.toString()).toBe('Valid Race Name'); }); it('trims leading/trailing whitespace', () => { const name = RaceName.fromString(' Valid Race Name '); expect(name.value).toBe('Valid Race Name'); }); it('rejects empty/blank values', () => { expect(() => RaceName.fromString('')).toThrow('Race name cannot be empty'); expect(() => RaceName.fromString(' ')).toThrow('Race name cannot be empty'); }); it('rejects names shorter than 3 characters (after trim)', () => { expect(() => RaceName.fromString('ab')).toThrow('Race name must be at least 3 characters long'); expect(() => RaceName.fromString(' ab ')).toThrow('Race name must be at least 3 characters long'); }); it('rejects names longer than 100 characters (after trim)', () => { expect(() => RaceName.fromString('a'.repeat(101))).toThrow('Race name must not exceed 100 characters'); expect(() => RaceName.fromString(` ${'a'.repeat(101)} `)).toThrow('Race name must not exceed 100 characters'); }); it('equals compares by normalized value', () => { const a = RaceName.fromString(' Test Race '); const b = RaceName.fromString('Test Race'); const c = RaceName.fromString('Different'); expect(a.equals(b)).toBe(true); expect(a.equals(c)).toBe(false); }); });