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