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>
87 lines
2.7 KiB
TypeScript
Executable File
87 lines
2.7 KiB
TypeScript
Executable File
import { describe, it, expect } from 'vitest';
|
|
import { createEnclos, addDragodinde, removeDragodinde, MAX_DD, MAX_ENCLOS, MAX_GAUGES } from '@domain/entities/Enclos';
|
|
import { createDragodinde } from '@domain/entities/Dragodinde';
|
|
import { createAccouplement } from '@domain/entities/Accouplement';
|
|
|
|
describe('Enclos', () => {
|
|
it('creates with defaults', () => {
|
|
const enc = createEnclos(1);
|
|
expect(enc.id).toBe(1);
|
|
expect(enc.name).toBe('Enclos 1');
|
|
expect(enc.dragodindes).toHaveLength(0);
|
|
expect(enc.activeGauges).toHaveLength(0);
|
|
expect(enc.timer.running).toBe(false);
|
|
expect(enc.gaugeLevels.baffeur).toBe(0);
|
|
});
|
|
|
|
it('adds a dragodinde', () => {
|
|
let enc = createEnclos(1);
|
|
enc = addDragodinde(enc);
|
|
expect(enc.dragodindes).toHaveLength(1);
|
|
expect(enc.dragodindes[0]!.name).toBe('Dragodinde 1');
|
|
expect(enc.nextDdId).toBe(2);
|
|
});
|
|
|
|
it('increments DD id', () => {
|
|
let enc = createEnclos(1);
|
|
enc = addDragodinde(enc);
|
|
enc = addDragodinde(enc);
|
|
expect(enc.dragodindes[1]!.id).toBe(2);
|
|
expect(enc.dragodindes[1]!.name).toBe('Dragodinde 2');
|
|
});
|
|
|
|
it('limits to MAX_DD', () => {
|
|
let enc = createEnclos(1);
|
|
for (let i = 0; i < MAX_DD + 2; i++) enc = addDragodinde(enc);
|
|
expect(enc.dragodindes).toHaveLength(MAX_DD);
|
|
});
|
|
|
|
it('removes a dragodinde', () => {
|
|
let enc = createEnclos(1);
|
|
enc = addDragodinde(enc);
|
|
const ddId = enc.dragodindes[0]!.id;
|
|
enc = removeDragodinde(enc, ddId);
|
|
expect(enc.dragodindes).toHaveLength(0);
|
|
});
|
|
|
|
it('remove non-existent DD is no-op', () => {
|
|
let enc = createEnclos(1);
|
|
enc = addDragodinde(enc);
|
|
enc = removeDragodinde(enc, 999);
|
|
expect(enc.dragodindes).toHaveLength(1);
|
|
});
|
|
|
|
it('constants are correct', () => {
|
|
expect(MAX_DD).toBe(10);
|
|
expect(MAX_ENCLOS).toBe(6);
|
|
expect(MAX_GAUGES).toBe(2);
|
|
});
|
|
});
|
|
|
|
describe('Dragodinde', () => {
|
|
it('creates with defaults', () => {
|
|
const dd = createDragodinde(1);
|
|
expect(dd.id).toBe(1);
|
|
expect(dd.name).toBe('Dragodinde 1');
|
|
expect(dd.gender).toBe('n');
|
|
expect(dd.stats.serenite).toBe(0);
|
|
expect(dd.stats.xp).toBe(1);
|
|
expect(dd.targets.baffeur).toBe(-5000);
|
|
expect(dd.sereniteTarget).toBeNull();
|
|
expect(dd.levelTarget).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe('Accouplement', () => {
|
|
it('creates with all fields', () => {
|
|
const a = createAccouplement('Rousse', 'Dorée', 'Dorée et Rousse', 2, 5, 3);
|
|
expect(a.parentA).toBe('Rousse');
|
|
expect(a.parentB).toBe('Dorée');
|
|
expect(a.baby).toBe('Dorée et Rousse');
|
|
expect(a.gen).toBe(2);
|
|
expect(a.couples).toBe(5);
|
|
expect(a.babiesObtained).toBe(3);
|
|
expect(a.date).toBeTruthy();
|
|
});
|
|
});
|