# 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.