# Tests Fonctionnels - Bubul

Ce dossier contient tous les tests fonctionnels de la plateforme Bubul.

## Exécution des tests

```bash
# Exécuter tous les tests
php bin/phpunit

# Exécuter un fichier de test spécifique
php bin/phpunit tests/Functional/Controller/AuthControllerTest.php

# Exécuter avec couverture de code
php bin/phpunit --coverage-html coverage/
```

## Structure des tests

```
tests/
├── Functional/
│   └── Controller/
│       ├── AdminTest.php
│       ├── AuthControllerTest.php
│       ├── AuthenticatedPagesTest.php
│       ├── BetaSignupTest.php
│       ├── DashboardTest.php
│       ├── ErrorPageTest.php
│       ├── FeedbackTest.php
│       ├── ImageUploadTest.php
│       ├── LandingControllerTest.php
│       ├── LoginFormTest.php
│       ├── LogoutTest.php
│       ├── MoodiaTest.php
│       ├── ProtectedRoutesTest.php
│       ├── SereniaTest.php
│       ├── SettingsTest.php
│       └── SlidiaTest.php
├── bootstrap.php
└── README.md
```

## Couverture des routes

### Routes publiques

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/` | GET/POST | LandingControllerTest, BetaSignupTest | Page d'accueil et inscription beta |
| `/login` | ANY | AuthControllerTest, LoginFormTest | Connexion |
| `/logout` | ANY | LogoutTest | Déconnexion |
| `/forgot-password` | ANY | AuthControllerTest | Mot de passe oublié |
| `/reset-password/{token}` | ANY | AuthControllerTest | Réinitialisation mot de passe |

### Routes Dashboard

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/dashboard` | ANY | DashboardTest | Tableau de bord utilisateur |
| `/dev/add-tokens` | POST | DashboardTest | Ajout de tokens (dev) |

### Routes Moodia

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/moodia` | ANY | MoodiaTest | Page principale Moodia |
| `/moodia/analyze` | POST | MoodiaTest | Analyse de document PDF |
| `/moodia/deploy` | POST | MoodiaTest | Déploiement vers Moodle |

### Routes Serenia

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/serenia` | ANY | SereniaTest | Page principale Serenia |
| `/serenia/chat/stream` | POST | SereniaTest | Chat streaming avec IA |
| `/serenia/upload` | POST | SereniaTest | Upload de fichiers |
| `/serenia/generate-image` | POST | SereniaTest | Génération d'images DALL-E |
| `/serenia/download-image` | POST | SereniaTest | Téléchargement d'images |
| `/serenia/cleanup/{sessionId}` | POST | SereniaTest | Nettoyage de session |

### Routes Slidia

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/slidia` | ANY | SlidiaTest | Page principale Slidia |
| `/slidia/generate` | POST | SlidiaTest | Génération de présentation |
| `/slidia/settings` | POST | SlidiaTest | Sauvegarde des paramètres |

### Routes Settings

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/settings` | ANY | SettingsTest | Page des paramètres |
| `/api/settings/sidebar-toggle` | POST | SettingsTest | Toggle sidebar |
| `/settings/download-plugin/{plugin}` | GET | SettingsTest | Téléchargement plugin Moodle |

### Routes Feedback

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/feedback/submit` | POST | FeedbackTest | Soumission de feedback |
| `/feedback/render-form` | GET | FeedbackTest | Affichage du formulaire |

### Routes API

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/api/upload/image` | POST | ImageUploadTest | Upload d'images génériques |

### Routes Admin

| Route | Méthode | Fichier de test | Description |
|-------|---------|-----------------|-------------|
| `/admin/beta` | GET | AdminTest | Liste des utilisateurs beta |
| `/admin/beta/{id}/accept` | POST | AdminTest | Accepter un utilisateur |
| `/admin/beta/{id}/refuse` | POST | AdminTest | Refuser un utilisateur |
| `/admin/beta/{id}/delete` | POST | AdminTest | Supprimer un utilisateur |
| `/admin/feedback` | GET | AdminTest | Liste des feedbacks |
| `/admin/feedback/{id}` | GET | AdminTest | Détail d'un feedback |
| `/admin/feedback/{id}/reward` | POST | AdminTest | Récompenser un feedback |
| `/admin/feedback/{id}/reject` | POST | AdminTest | Rejeter un feedback |

### Routes de développement (non testées)

Ces routes sont utilisées uniquement en développement et ne sont pas testées :

| Route | Description |
|-------|-------------|
| `/test` | Page de test |
| `/test/send-email` | Test d'envoi d'email |
| `/test/pdf-extract` | Test d'extraction PDF |
| `/test/slidia-layouts` | Test des layouts Slidia |
| `/test/pptx-workflow/*` | Test du workflow PPTX |

## Statistiques

- **Total** : 176 tests
- **Assertions** : 358
- **Fichiers de test** : 16

## Fixtures de test

Les tests utilisent les fixtures définies dans `src/DataFixtures/TestFixtures.php` :

| Email | Rôle | Statut |
|-------|------|--------|
| `test@bubul.app` | ROLE_USER | Actif |
| `contact@bubul.app` | ROLE_ADMIN | Actif |
| `inactive@bubul.app` | ROLE_USER | Inactif |

## Configuration

La base de données de test utilise SQLite en fichier (`var/data_test.db`).

Configuration dans `.env.test` :
```
APP_ENV=test
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data_test.db"
```

Le fichier `bootstrap.php` réinitialise la base de données avant chaque exécution des tests.
