dd-timer/tests/unit/domain/XpCalculator.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

42 lines
1.6 KiB
TypeScript
Executable File

import { describe, it, expect } from 'vitest';
import { XpCalculator } from '@domain/services/XpCalculator';
describe('XpCalculator', () => {
const calc = new XpCalculator();
it('null target → not done, 0 seconds', () => {
const r = calc.computeEta({ currentLevel: 1, target: null, gaugeLevels: {}, activeGauges: [] });
expect(r.done).toBe(false);
expect(r.seconds).toBe(0);
});
it('level already reached → done', () => {
const r = calc.computeEta({ currentLevel: 100, target: 100, gaugeLevels: { mangeoire: 50000 }, activeGauges: ['mangeoire'] });
expect(r.done).toBe(true);
});
it('level above target → done', () => {
const r = calc.computeEta({ currentLevel: 150, target: 100, gaugeLevels: { mangeoire: 50000 }, activeGauges: ['mangeoire'] });
expect(r.done).toBe(true);
});
it('needs mangeoire gauge', () => {
const r = calc.computeEta({ currentLevel: 1, target: 100, gaugeLevels: {}, activeGauges: [] });
expect(r.needsGauge).toBe('mangeoire');
expect(r.seconds).toBe(Infinity);
});
it('computes seconds to level up', () => {
const r = calc.computeEta({ currentLevel: 1, target: 10, gaugeLevels: { mangeoire: 50000 }, activeGauges: ['mangeoire'] });
expect(r.done).toBe(false);
expect(r.seconds).toBeGreaterThan(0);
expect(r.seconds).toBeLessThan(Infinity);
});
it('regression: should NOT show ~23h for short XP gain', () => {
// Bug v1.1.4: timer displayed ~23h instead of real time
const r = calc.computeEta({ currentLevel: 1, target: 5, gaugeLevels: { mangeoire: 50000 }, activeGauges: ['mangeoire'] });
expect(r.seconds).toBeLessThan(3600); // Must be under 1h
});
});