# Diagnostic : tests et base de données
## Ce qui n’a pas changé
- **L’application** utilise toujours la base définie dans `.env` :
- `DB_CONNECTION=mysql`
- `DB_DATABASE=eventshbf` (ta base actuelle)
- `DB_USERNAME=root`, `DB_PASSWORD=...`, etc.
Aucune modification de ce comportement : l’app tourne bien sur ta base existante.
## Pourquoi les tests parlent de la base `testing`
Quand tu lances **PHPUnit** (`php artisan test` ou `./vendor/bin/phpunit`), Laravel charge la config de **`phpunit.xml`** avant les tests.
Dans `phpunit.xml` on a notamment :
```xml
```
Donc **pendant les tests uniquement** :
- `APP_ENV` devient `testing`
- `DB_DATABASE` est **écrasé** par `testing` (au lieu de lire `eventshbf` depuis `.env`)
Le reste (host, user, password, etc.) vient toujours de `.env`. Seul le **nom de la base** change pour la durée des tests.
C’est un choix volontaire de Laravel :
les tests utilisent une base dédiée pour ne pas toucher à la base de développement (`eventshbf`). Les tests qui utilisent `RefreshDatabase` recréent les tables à chaque fois ; si on pointait vers `eventshbf`, tu perdrais les données de dev à chaque exécution des tests.
## Résumé
| Contexte | Fichier de config | Base utilisée |
|-----------------------|---------------------|-----------------|
| Application (web, CLI)| `.env` | `eventshbf` |
| Tests PHPUnit | `.env` + `phpunit.xml` | `testing` (imposé par phpunit.xml) |
Rien n’a “changé” côté app : c’est le **même mécanisme** qu’avant. La base `testing` n’a sans doute jamais existé sur ta machine ; les tests n’avaient peut‑être pas été lancés, ou l’étaient dans un autre environnement (CI, autre poste) où `testing` existait déjà.
## Que faire si tu veux lancer les tests avec MySQL
Tu as trois options :
1. **Créer la base `testing`** (recommandé pour garder le comportement actuel)
- Même serveur / même user que `eventshbf`, une base nommée `testing`.
- Les tests continuent à utiliser `DB_DATABASE=testing` et ne touchent pas à `eventshbf`.
2. **Faire utiliser à PHPUnit la base de `.env`** (par ex. `eventshbf`)
- Retirer ou commenter la ligne `` dans `phpunit.xml`.
- Les tests utiliseront alors `DB_DATABASE` de `.env`.
- **Attention :** avec `RefreshDatabase`, les tests réinitialiseront cette base (migrations + seed) à chaque run. À réserver à une base dédiée au test, pas à ta base de dev principale.
3. **Utiliser SQLite en mémoire pour les tests**
- Dans `phpunit.xml`, ajouter par ex.
`DB_CONNECTION=sqlite` et `DB_DATABASE=:memory:`,
et ne plus imposer `DB_DATABASE=testing`.
- Les tests ne dépendent plus de MySQL ni d’une base `testing` à créer.
En résumé : l’application tourne toujours sur ta base ; ce qui “change” en lançant les tests, c’est uniquement le **nom de la base** imposé par `phpunit.xml` pour isoler les tests. Si tu veux, on peut détailler l’une des trois options (création de `testing`, utilisation de la base `.env`, ou passage en SQLite pour les tests).