- 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)
45 lines
1.4 KiB
JavaScript
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'))
|
|
})
|
|
})
|