Major Changes: - Moved legacy system to Legacy/ folder for archival - Built new modular architecture with strict separation of concerns - Created core system: Module, EventBus, ModuleLoader, Router - Added Application bootstrap with auto-start functionality - Implemented development server with ES6 modules support - Created comprehensive documentation and project context - Converted SBS-7-8 content to JSON format - Copied all legacy games and content to new structure New Architecture Features: - Sealed modules with WeakMap private data - Strict dependency injection system - Event-driven communication only - Inviolable responsibility patterns - Auto-initialization without commands - Component-based UI foundation ready Technical Stack: - Vanilla JS/HTML/CSS only - ES6 modules with proper imports/exports - HTTP development server (no file:// protocol) - Modular CSS with component scoping - Comprehensive error handling and debugging Ready for Phase 2: Converting legacy modules to new architecture 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
230 lines
7.2 KiB
Markdown
230 lines
7.2 KiB
Markdown
# Tests - Class Generator
|
|
|
|
Suite complète de tests unitaires (TU) et tests d'intégration (TI) pour l'application Class Generator.
|
|
|
|
## 📁 Structure
|
|
|
|
```
|
|
tests/
|
|
├── unit/ # Tests unitaires
|
|
│ ├── env-config.test.js # Tests pour EnvConfig
|
|
│ ├── content-scanner.test.js # Tests pour ContentScanner
|
|
│ └── game-loader.test.js # Tests pour GameLoader
|
|
├── integration/ # Tests d'intégration
|
|
│ ├── proxy-digitalocean.test.js # Tests du proxy DigitalOcean
|
|
│ ├── content-loading-flow.test.js # Tests du flux de chargement
|
|
│ └── navigation-system.test.js # Tests du système de navigation
|
|
├── fixtures/ # Données de test
|
|
│ └── content-samples.js # Échantillons de contenu
|
|
├── utils/ # Utilitaires de test
|
|
│ └── test-helpers.js # Helpers et mocks
|
|
├── run-tests.js # Script principal de lancement
|
|
├── package.json # Configuration npm pour les tests
|
|
└── README.md # Cette documentation
|
|
```
|
|
|
|
## 🚀 Lancement des Tests
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
cd tests/
|
|
npm install # (optionnel, pour jsdom si nécessaire)
|
|
```
|
|
|
|
### Commandes Principales
|
|
|
|
```bash
|
|
# Tous les tests
|
|
node run-tests.js
|
|
|
|
# Tests unitaires seulement
|
|
node run-tests.js --unit-only
|
|
|
|
# Tests d'intégration seulement
|
|
node run-tests.js --integration-only
|
|
|
|
# Mode verbose (affichage détaillé)
|
|
node run-tests.js --verbose
|
|
|
|
# Avec couverture de code
|
|
node run-tests.js --coverage
|
|
|
|
# Tests spécifiques
|
|
node run-tests.js --pattern=content
|
|
|
|
# Arrêt au premier échec
|
|
node run-tests.js --bail
|
|
```
|
|
|
|
### Via NPM (depuis le dossier tests/)
|
|
|
|
```bash
|
|
npm test # Tous les tests
|
|
npm run test:unit # Tests unitaires
|
|
npm run test:integration # Tests d'intégration
|
|
```
|
|
|
|
## 📋 Tests Unitaires (TU)
|
|
|
|
### EnvConfig (`env-config.test.js`)
|
|
- ✅ Construction et configuration
|
|
- ✅ Méthodes utilitaires (isRemoteContentEnabled, etc.)
|
|
- ✅ Test de connectivité avec timeouts
|
|
- ✅ Configuration dynamique
|
|
- ✅ Génération de signatures AWS
|
|
- ✅ Diagnostics
|
|
|
|
### ContentScanner (`content-scanner.test.js`)
|
|
- ✅ Initialisation et découverte de contenu
|
|
- ✅ Conversion de noms de modules JSON → JS
|
|
- ✅ Chargement de contenu JSON distant/local
|
|
- ✅ Scan de fichiers de contenu (.js et .json)
|
|
- ✅ Gestion des erreurs et logs
|
|
- ✅ Discovery de fichiers communs
|
|
|
|
### GameLoader (`game-loader.test.js`)
|
|
- ✅ Chargement et création d'instances de jeu
|
|
- ✅ Conversion de noms (game types → class names)
|
|
- ✅ Cycle de vie des jeux (start, destroy, restart)
|
|
- ✅ Validation de contenu pour les jeux
|
|
- ✅ Gestion des erreurs de construction
|
|
- ✅ État et informations du jeu actuel
|
|
|
|
## 🔗 Tests d'Intégration (TI)
|
|
|
|
### Proxy DigitalOcean (`proxy-digitalocean.test.js`)
|
|
- ✅ Endpoints du proxy (`/do-proxy/filename.json`)
|
|
- ✅ Support des méthodes GET et HEAD
|
|
- ✅ Headers CORS et authentification
|
|
- ✅ Listing des fichiers (`/do-proxy/_list`)
|
|
- ✅ Performance et requêtes simultanées
|
|
- ✅ Gestion des erreurs 403/404
|
|
- ✅ Intégration DigitalOcean Spaces réelle
|
|
|
|
### Flux de Chargement (`content-loading-flow.test.js`)
|
|
- ✅ Flux complet: Scan → Load → Game
|
|
- ✅ Fallback local si distant échoue
|
|
- ✅ Respect des priorités de configuration
|
|
- ✅ Gestion des erreurs en cascade
|
|
- ✅ Performance et cache
|
|
- ✅ Validation d'intégrité des données
|
|
|
|
### Système de Navigation (`navigation-system.test.js`)
|
|
- ✅ Parsing d'URL et paramètres
|
|
- ✅ Navigation et routage entre pages
|
|
- ✅ Gestion de l'historique de navigation
|
|
- ✅ Validation de routes et paramètres
|
|
- ✅ État de connectivité réseau
|
|
- ✅ Intégration avec GameLoader
|
|
- ✅ Gestion des erreurs de navigation
|
|
|
|
## 🛠️ Utilitaires de Test
|
|
|
|
### Test Helpers (`utils/test-helpers.js`)
|
|
- `createMockDOM()` - Environnement DOM simulé
|
|
- `createMockFetch()` - Mock pour requêtes réseau
|
|
- `createLogCapture()` - Capture des logs pour vérification
|
|
- `createTimerMock()` - Mock des timers/setTimeout
|
|
- `loadModuleForTest()` - Chargement de modules pour tests
|
|
- Assertions personnalisées
|
|
|
|
### Fixtures (`fixtures/content-samples.js`)
|
|
- Échantillons de contenu JSON et JS
|
|
- Données de test pour compatibilité des jeux
|
|
- Réponses réseau mockées
|
|
- Cas de test pour validation
|
|
|
|
## 📊 Coverage et Métriques
|
|
|
|
Les tests couvrent:
|
|
|
|
### Modules Core (Couverture ~90%+)
|
|
- **EnvConfig**: Configuration, connectivité, AWS auth
|
|
- **ContentScanner**: Discovery, chargement JSON/JS, fallbacks
|
|
- **GameLoader**: Instantiation, validation, cycle de vie
|
|
|
|
### Flux d'Intégration (Couverture ~85%+)
|
|
- **Proxy DigitalOcean**: Authentification, CORS, performance
|
|
- **Chargement de Contenu**: Priorités, fallbacks, validation
|
|
- **Navigation**: Routage, historique, état réseau
|
|
|
|
### Points Non Couverts
|
|
- Interface utilisateur (événements DOM complexes)
|
|
- Jeux individuels (logique métier spécifique)
|
|
- WebSocket logger en temps réel
|
|
- Fonctionnalités futures (IA, chinois)
|
|
|
|
## 🚨 Contraintes et Limitations
|
|
|
|
### Environnement de Test
|
|
- Node.js 18+ requis (support natif `--test`)
|
|
- Pas de navigateur réel (simulation DOM)
|
|
- Pas d'accès fichier système complet
|
|
- Réseau mockée pour la plupart des tests
|
|
|
|
### Tests d'Intégration
|
|
- Nécessitent serveurs actifs (proxy sur 8083)
|
|
- Dépendent de la connectivité DigitalOcean
|
|
- Peuvent échouer si clés d'API invalides
|
|
- Timeouts pour éviter blocages
|
|
|
|
### Performance
|
|
- Tests rapides (~30s max pour suite complète)
|
|
- Parallélisation des TU mais pas des TI
|
|
- Mocks utilisés pour éviter latence réseau
|
|
|
|
## 🔧 Debugging et Maintenance
|
|
|
|
### Logs de Debug
|
|
```bash
|
|
# Mode verbose avec tous les logs
|
|
node run-tests.js --verbose
|
|
|
|
# Tests spécifiques avec debug
|
|
TEST_VERBOSE=1 node --test tests/unit/content-scanner.test.js
|
|
```
|
|
|
|
### Ajout de Nouveaux Tests
|
|
|
|
1. **Tests Unitaires**: Créer `tests/unit/nouveau-module.test.js`
|
|
2. **Tests d'Intégration**: Créer `tests/integration/nouveau-flux.test.js`
|
|
3. **Fixtures**: Ajouter données dans `tests/fixtures/`
|
|
4. **Helpers**: Étendre `tests/utils/test-helpers.js`
|
|
|
|
### Résolution de Problèmes Courants
|
|
|
|
| Problème | Solution |
|
|
|----------|----------|
|
|
| Tests timeout | Augmenter timeout dans `run-tests.js` |
|
|
| Proxy inaccessible | Vérifier que websocket-server.js est démarré |
|
|
| Erreurs DigitalOcean | Vérifier clés d'accès dans env-config.js |
|
|
| Modules non trouvés | Vérifier paths relatifs dans test helpers |
|
|
| DOM errors | Compléter mocks DOM dans createMockDOM() |
|
|
|
|
## 📈 Intégration Continue
|
|
|
|
Les tests peuvent être intégrés dans des pipelines CI/CD:
|
|
|
|
```yaml
|
|
# Exemple GitHub Actions
|
|
- name: Run Tests
|
|
run: |
|
|
cd tests
|
|
node run-tests.js --bail --coverage
|
|
```
|
|
|
|
## 🎯 Objectifs de Qualité
|
|
|
|
- **Couverture**: 85%+ pour modules core
|
|
- **Performance**: <30s pour suite complète
|
|
- **Fiabilité**: Pas de tests flaky
|
|
- **Maintenance**: Tests lisibles et bien documentés
|
|
|
|
---
|
|
|
|
💡 **Tip**: Utilisez `--pattern=` pour ne lancer que les tests spécifiques lors du développement.
|
|
|
|
🔍 **Debug**: Activez `--verbose` pour voir les détails d'exécution et les logs.
|
|
|
|
🚀 **CI/CD**: Les tests sont conçus pour s'intégrer facilement dans vos pipelines d'automatisation. |