const { test, describe } = require('node:test') const assert = require('node:assert/strict') const { EVENTS, getEventById, buildEventDeck, DRAW_COST } = require('../../src/game/events') describe('events.js', () => { test('expose exactement 6 événements', () => { assert.equal(EVENTS.length, 6) }) test('chaque événement a un id unique', () => { const ids = EVENTS.map(e => e.id) assert.equal(new Set(ids).size, ids.length) }) test('DRAW_COST demande 1 point dans chacune des 4 jauges', () => { assert.deepEqual(DRAW_COST, { food: 1, war: 1, health: 1, diplo: 1 }) }) test('chaque événement utilise DRAW_COST comme coût de pioche', () => { for (const e of EVENTS) { assert.deepEqual(e.cost, DRAW_COST) } }) describe('getEventById', () => { test('retourne l\'événement correspondant à un id existant', () => { const epidemic = getEventById('epidemic') assert.ok(epidemic) assert.equal(epidemic.name, 'Épidémie') }) test('retourne null pour un id inconnu', () => { assert.equal(getEventById('does-not-exist'), null) }) test('retourne null pour undefined/null', () => { assert.equal(getEventById(undefined), null) assert.equal(getEventById(null), null) }) }) describe('buildEventDeck', () => { test('contient exactement 18 cartes (3 exemplaires de chacun des 6 événements)', () => { const deck = buildEventDeck() assert.equal(deck.length, 18) }) test('contient exactement 3 exemplaires de chaque id', () => { const deck = buildEventDeck() const counts = {} deck.forEach(id => { counts[id] = (counts[id] ?? 0) + 1 }) EVENTS.forEach(e => assert.equal(counts[e.id], 3, `${e.id} devrait apparaître 3 fois`)) }) test('mélange le deck (l\'ordre n\'est pas systématiquement identique entre deux appels)', () => { const decks = Array.from({ length: 5 }, () => buildEventDeck().join(',')) assert.ok(new Set(decks).size > 1, 'les decks mélangés devraient différer entre les appels') }) }) })