dd-timer/tests/unit/domain/Race.test.ts
POL Mickaël 3e485fd09b chore: normalise fins de ligne CRLF → LF dans tout le repo
Applique .gitattributes sur tous les fichiers existants.
Élimine les différences fantômes entre WSL et Windows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 08:55:10 +02:00

61 lines
2.1 KiB
TypeScript
Executable File

import { describe, it, expect } from 'vitest';
import { RACE_GEN, GEN_COLORS, BREEDING_RECIPES, RACES_DATA, isBaseRace, generationOf, raceColor } from '@domain/value-objects/Race';
import { Gender } from '@domain/value-objects/Gender';
describe('Race', () => {
it('base races are gen 1', () => {
expect(generationOf('Rousse')).toBe(1);
expect(generationOf('Amande')).toBe(1);
expect(generationOf('Dorée')).toBe(1);
expect(isBaseRace('Rousse')).toBe(true);
});
it('gen 2 races are correctly mapped', () => {
expect(generationOf('Dorée et Rousse')).toBe(2);
expect(generationOf('Amande et Dorée')).toBe(2);
expect(generationOf('Amande et Rousse')).toBe(2);
expect(isBaseRace('Dorée et Rousse')).toBe(false);
});
it('GEN_COLORS has 10 entries', () => {
expect(Object.keys(GEN_COLORS)).toHaveLength(10);
});
it('BREEDING_RECIPES maps baby to parents', () => {
expect(BREEDING_RECIPES['Dorée et Rousse']).toEqual(['Rousse', 'Dorée']);
expect(BREEDING_RECIPES['Amande et Dorée']).toEqual(['Amande', 'Dorée']);
});
it('Ebène = Amande et Dorée + Dorée et Rousse (pas Amande et Rousse)', () => {
expect(BREEDING_RECIPES['Ebène']).toEqual(['Amande et Dorée', 'Dorée et Rousse']);
});
it('RACES_DATA has generations 2-10', () => {
for (let g = 2; g <= 10; g++) {
expect(RACES_DATA[g]).toBeDefined();
expect(RACES_DATA[g]!.length).toBeGreaterThan(0);
}
});
it('raceColor returns a color string', () => {
expect(raceColor('Rousse')).toBe('#c8622a');
expect(raceColor('Dorée')).toBe('#e8b820');
expect(raceColor('Unknown')).toBe('#888');
});
it('all breeding recipes have valid parents in RACE_GEN', () => {
for (const [baby, [pA, pB]] of Object.entries(BREEDING_RECIPES)) {
expect(RACE_GEN[baby]).toBeDefined();
expect(RACE_GEN[pA]).toBeDefined();
expect(RACE_GEN[pB]).toBeDefined();
}
});
});
describe('Gender', () => {
it('has male, female, neutral', () => {
const values: Gender[] = ['m', 'f', 'n'];
expect(values).toHaveLength(3);
});
});