fix: corrections générateur PNJ Traveller et tests Jest

- validateOptions : remplit les champs manquants et corrige les clés invalides
  (détection précédemment inopérante car getXByKey renvoie l'objet par défaut)
- generateCharacteristics : ne mélange plus le tableau avant affectation,
  la priorité des caractéristiques (high → medium → low) est respectée
- Exports manquants : convertSkillToMgt2eFormat, popRandomItems, ERROR_CODES,
  TravellerNpcError
- Tests : import des globals via @jest/globals (obligatoire en ESM),
  suppression de l'import obsolète buildMgt2eBaseActorSystem,
  attente corrigée pilot.smallCraft, test des doublons aligné sur le
  dédoublonnage réel (noms complets, spécialisations conservées)
- AGENTS.md : section Testing mise à jour
- README.md : ajouté
This commit is contained in:
2026-08-03 21:02:35 +02:00
parent f4ba85bcb9
commit 1c55484bf7
5 changed files with 188 additions and 20 deletions
+9 -6
View File
@@ -8,6 +8,9 @@
* un framework de test similaire.
*/
// Import explicite des globals Jest (obligatoire en ESM)
import { jest, describe, it, expect, beforeEach } from '@jest/globals';
// Mock des dépendances Foundry pour l'environnement de test
const mockFoundry = {
utils: {
@@ -85,7 +88,6 @@ import {
convertSkillToMgt2eFormat,
buildMgt2eCharacteristics,
buildMgt2eSkills,
buildMgt2eBaseActorSystem,
getMgt2eBaseActorSystem,
toHex,
calculateDm,
@@ -579,13 +581,14 @@ describe('generateSkills', () => {
expect(eliteLevel3).toBeGreaterThanOrEqual(regularLevel3);
});
it('devrait supprimer les doublons basés sur la compétence de base', () => {
it('devrait supprimer les doublons exacts de compétence', () => {
const skills = generateSkills('pilot', 'regular');
const skillNames = skills.map(s => s.name);
const uniqueBases = new Set(skillNames.map(n => n.split('-')[0]));
const uniqueNames = new Set(skillNames);
// Chaque nom de base devrait apparaître une seule fois
expect(skillNames.length).toBe(uniqueBases.size);
// Le générateur dédoublonne les noms complets mais conserve
// les spécialisations (Pilot-Spacecraft, Pilot-Small Craft, ...)
expect(skillNames.length).toBe(uniqueNames.size);
});
it('devrait générer des compétences avec le rôle par défaut pour un rôle invalide', () => {
@@ -624,7 +627,7 @@ describe('convertSkillToMgt2eFormat', () => {
});
it('devrait gérer les tirets', () => {
expect(convertSkillToMgt2eFormat('Pilot-Small Craft')).toBe('pilot.smallcraft');
expect(convertSkillToMgt2eFormat('Pilot-Small Craft')).toBe('pilot.smallCraft');
});
});