Files
regnum/server/test/game/RoomManager.test.js
Kevin L'Hereec 6a1c800253 feat: système d'objets achetables (boutique + effets permanents) et refonte visuelle
- Nouveaux personnages illustrés (12 PNG remplacés dans client/public/cards)
- 4 objets achetables (Trébuchet, Charrue, Trousse du Médecin, Sceau Royal)
  avec effets permanents (double_gain, guaranteed_gain, copy_best_in_game),
  stock unique par partie, priorité d'achat tournante entre joueurs
- Boutique en colonne à gauche du plateau : icônes compactes, carte détaillée
  agrandie au survol (taille découplée du displayScale du jeton), bouton
  ACHETER actif/grisé selon la jauge du joueur, retrait immédiat de la
  colonne une fois l'objet acheté (les autres remontent pour combler)
- Objets achetés affichés "posés sur la table" : à côté de la main pour soi,
  sous le slot de jeu pour les adversaires
- Icône du premier joueur (priorité d'achat) dans le HUD Vue
- Refonte des cartes personnage (CardObject) : portrait plein cadre épuré,
  valeurs d'attribut discrètes aux 4 coins
- Fix removePlayer : nettoyage de pendingBuys/pendingPlays et recalage de
  firstPlayerIndex à la déconnexion d'un joueur
- 77 tests unitaires serveur (node:test) : cards, items, Room, RoomManager
- README mis à jour avec les règles complètes du jeu
- .gitignore : exclusion de .idea/ et .serena/ (artefacts d'outils locaux)
2026-08-21 14:53:58 +02:00

45 lines
1.4 KiB
JavaScript

const { test, describe } = require('node:test')
const assert = require('node:assert/strict')
const { RoomManager } = require('../../src/game/RoomManager')
const { Room } = require('../../src/game/Room')
describe('RoomManager', () => {
test('getOrCreate crée une nouvelle Room si elle n\'existe pas', () => {
const manager = new RoomManager()
const room = manager.getOrCreate('abc')
assert.ok(room instanceof Room)
assert.equal(room.id, 'abc')
})
test('getOrCreate retourne la même instance pour un id déjà créé', () => {
const manager = new RoomManager()
const room1 = manager.getOrCreate('abc')
const room2 = manager.getOrCreate('abc')
assert.equal(room1, room2)
})
test('get retourne null pour un id inconnu', () => {
const manager = new RoomManager()
assert.equal(manager.get('unknown'), null)
})
test('get retourne la room existante après getOrCreate', () => {
const manager = new RoomManager()
manager.getOrCreate('xyz')
assert.ok(manager.get('xyz') instanceof Room)
})
test('delete retire la room de la map', () => {
const manager = new RoomManager()
manager.getOrCreate('to-delete')
manager.delete('to-delete')
assert.equal(manager.get('to-delete'), null)
})
test('delete sur un id inconnu ne lève pas d\'erreur', () => {
const manager = new RoomManager()
assert.doesNotThrow(() => manager.delete('never-existed'))
})
})