dd-timer/tests/unit/domain/ReapproCalculator.test.ts
POL Mickaël 203c423f19 test: 302 tests unitaires + 20 E2E Playwright (couverture 94%)
- Unit : domain (GaugeCalculator, Enclos, Dragodinde, XpTable, Race, Tier...)
- Unit : application (commands, queries, CommandBus)
- Fonctionnel : breeding-workflow, enclos-management, timer-workflow
- Régression : gauge-tier, gauge-recharge, xp-timer, level-target, breeding
- E2E Playwright + Electron : navigation, timer, recharge jauge,
  accouplement, persistance des données

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 05:43:29 +02:00

50 lines
1.9 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { ReapproCalculator } from '@domain/services/ReapproCalculator';
describe('ReapproCalculator', () => {
const calc = new ReapproCalculator();
it('empty target returns empty', () => {
const r = calc.compute({ target: '', qty: 1, repro: {}, inverted: {} });
expect(r.steps).toHaveLength(0);
expect(r.gen1Needs).toHaveLength(0);
});
it('unknown target returns empty', () => {
const r = calc.compute({ target: 'Unknown', qty: 1, repro: {}, inverted: {} });
expect(r.steps).toHaveLength(0);
});
it('gen2 race needs 2 gen1 parents', () => {
const r = calc.compute({ target: 'Dorée et Rousse', qty: 4, repro: {}, inverted: {} });
expect(r.steps).toHaveLength(1);
expect(r.steps[0]!.parentA).toBe('Rousse');
expect(r.steps[0]!.parentB).toBe('Dorée');
expect(r.steps[0]!.couples).toBe(4);
expect(r.gen1Needs).toHaveLength(2);
expect(r.totalGen1).toBe(8); // 4 Rousse + 4 Dorée
});
it('gender inversion swaps parents', () => {
const r = calc.compute({ target: 'Dorée et Rousse', qty: 4, repro: {}, inverted: { 'Dorée et Rousse': true } });
expect(r.steps[0]!.parentA).toBe('Dorée');
expect(r.steps[0]!.parentB).toBe('Rousse');
});
it('breeders reduce couple count', () => {
const r = calc.compute({ target: 'Dorée et Rousse', qty: 4, repro: { 'Dorée et Rousse': 2 }, inverted: {} });
expect(r.steps[0]!.couples).toBe(2);
});
it('gen1 needs include male/female split', () => {
const r = calc.compute({ target: 'Dorée et Rousse', qty: 2, repro: {}, inverted: {} });
const rousse = r.gen1Needs.find(n => n.name === 'Rousse');
const doree = r.gen1Needs.find(n => n.name === 'Dorée');
expect(rousse).toBeDefined();
expect(doree).toBeDefined();
// Default: parentA (Rousse) = male, parentB (Dorée) = female
expect(rousse!.m).toBe(2);
expect(doree!.f).toBe(2);
});
});