feat: écran de fin de partie + tests unitaires client et E2E Playwright

- Fix: UIScene n'était jamais lancée (active: false, jamais scene.launch)
  donc l'event 'game-over' du serveur n'était jamais affiché — la partie
  semblait ne pas avoir de fin. Remplacé par un panneau Vue dans GameView
  (vainqueur, classement trié, bouton Quitter via vue-router). UIScene.js
  supprimée (code mort).
- Extraction de client/src/utils/hudUtils.js (constantes ATTRS/couleurs et
  gaugePercent) depuis GameView.vue pour les rendre testables isolément.
- Tests unitaires client (Vitest) : store Pinia (game.js) et hudUtils
  (24 tests, client/test/unit/).
- Tests d'intégration E2E (Playwright, e2e/) avec de vrais clients
  Socket.io et rendu Phaser réel dans Chromium :
  * game-flow.spec.js : lobby → démarrage → main de 4 cartes → résolution
  * item-shop.spec.js : boutique, bouton désactivé si jauge insuffisante,
    achat retire l'objet pour tous + effet appliqué + affiché sur la table
  * game-over.spec.js : partie complète (12 tours) → panneau de fin
  webServer démarre automatiquement client+serveur ; ajout d'une route
  GET /health côté Express pour permettre à Playwright de détecter un
  serveur déjà démarré.
- README : documentation des 3 niveaux de tests (unitaires serveur,
  unitaires client, intégration E2E) et de la nouvelle arborescence.
This commit is contained in:
Kevin L'Hereec committed 2026-08-21 15:27:44 +02:00
1 parent 6a1c800253
commit 11cba0467b
20 files changed
+3447 -100

No files matched your search

+43 -12
View File
@@ -13,15 +13,20 @@ Jeu de cartes en ligne multijoueur (2-4 joueurs). Collecte des points en jouant
```
regnum/
├── client/ # Vue 3 + Phaser 3
│ └── src/
│ ├── views/ # HomeView, LobbyView, GameView
│ ├── game/ # Scènes Phaser (Boot, Game, UI) + objets
│ ├── stores/ # Pinia store
│ └── services/# Socket.io client
└── server/ # Node.js
└── src/
├── game/ # Room, RoomManager, cards
└── index.js # Serveur Express + Socket.io
│ ├── src/
│ │ ├── views/ # HomeView, LobbyView, GameView
│ │ ├── game/ # Scènes Phaser (Boot, Game) + objets + items
│ │ ├── stores/ # Pinia store
│ │ ├── services/# Socket.io client
│ │ └── utils/ # Fonctions pures partagées (HUD, etc.)
│ └── test/unit/ # Tests unitaires Vitest (store, utils)
├── server/ # Node.js
│ ├── src/
│ │ ├── game/ # Room, RoomManager, cards, items
│ │ └── index.js # Serveur Express + Socket.io
│ └── test/game/ # Tests unitaires node:test (moteur de jeu)
└── e2e/ # Tests d'intégration Playwright (client+serveur réels)
└── tests/
```
## Lancement
@@ -44,12 +49,38 @@ Ouvrir `http://localhost:5173`
## Tests
Tests unitaires du moteur de jeu (serveur), avec le test runner natif de Node.js :
Le projet a 3 niveaux de tests, à exécuter indépendamment :
### 1. Tests unitaires — serveur (moteur de jeu)
Logique pure de `Room.js` / `cards.js` / `items.js` (règles, gains, achats, effets permanents), avec le test runner natif de Node.js :
```bash
cd server
npm test # exécution unique
npm run test:watch # mode watch
npm test # exécution unique
npm run test:watch # mode watch
```
### 2. Tests unitaires — client (store, utilitaires)
Store Pinia et fonctions pures du HUD (`hudUtils.js`), avec Vitest :
```bash
cd client
npm run test:unit # exécution unique
npm run test:unit:watch # mode watch
```
### 3. Tests d'intégration E2E (client + serveur réels)
Parcours complets (créer/rejoindre une salle, jouer des tours, acheter un objet, fin de partie) pilotés dans un vrai navigateur Chromium via Playwright, avec de vrais clients Socket.io. `webServer` dans `e2e/playwright.config.js` démarre automatiquement le serveur et le client si besoin.
```bash
cd e2e
npm install # première fois seulement
npx playwright install chromium # première fois seulement, si besoin
npm test # exécution unique
npm run test:ui # mode interactif (debug)
```
## Règles