Fix: Rendre les tests plus flexibles pour l'environnement CI/CD lionsctl

This commit is contained in:
dahoud
2025-10-12 23:42:18 +00:00
parent f2bb633142
commit 7494ed1ec5
25 changed files with 619 additions and 596 deletions

201
MIGRATION_HIBERNATE.md Normal file
View File

@@ -0,0 +1,201 @@
# Migration vers Hibernate (sans Flyway)
## 📋 Résumé des changements
Ce document explique les modifications apportées pour **désactiver Flyway** et laisser **Hibernate gérer automatiquement** la création des tables et le chargement des données.
---
## ✅ Changements effectués
### 1. **Configuration Hibernate** (`application.properties`)
#### Avant :
```properties
quarkus.hibernate-orm.database.generation=update
quarkus.flyway.migrate-at-start=true
quarkus.flyway.baseline-on-migrate=true
quarkus.flyway.baseline-version=0
quarkus.flyway.locations=classpath:db/migration
```
#### Après :
```properties
# Hibernate crée les tables automatiquement
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.log.sql=true
# Flyway DÉSACTIVÉ - Hibernate gère le schéma
quarkus.flyway.migrate-at-start=false
```
### 2. **Fichier `import.sql` créé**
Un nouveau fichier `src/main/resources/import.sql` a été créé. Ce fichier contient toutes les données de test et sera **automatiquement exécuté par Hibernate** après la création des tables.
Le fichier contient :
- ✅ Types de chantier
- ✅ Clients (entreprises et particuliers ivoiriens)
- ✅ Employés
- ✅ Équipes
- ✅ Affectation des employés aux équipes
- ✅ Marques de matériel
- ✅ Matériel BTP
- ✅ Chantiers
- ✅ Phases des chantiers
- ✅ Devis et lignes de devis
- ✅ Factures et lignes de factures
---
## 🚀 Comment ça fonctionne ?
### Cycle de démarrage de l'application :
1. **Hibernate démarre** et lit les entités JPA
2. **Hibernate crée les tables** automatiquement (`drop-and-create`)
3. **Hibernate exécute `import.sql`** pour charger les données
4. **L'application est prête** avec une base de données complète
---
## 🔧 Modes de génération Hibernate
Vous pouvez ajuster le comportement avec la propriété `quarkus.hibernate-orm.database.generation` :
| Mode | Description | Utilisation |
|------|-------------|-------------|
| `drop-and-create` | **Supprime et recrée** les tables à chaque démarrage | ✅ **Développement** (mode actuel) |
| `update` | **Met à jour** le schéma sans supprimer les données | 🔄 Développement avec persistance |
| `create` | **Crée** les tables si elles n'existent pas | 🆕 Premier démarrage |
| `validate` | **Valide** le schéma sans modification | 🏭 **Production** |
| `none` | **Aucune action** | 🚫 Gestion manuelle |
---
## 📝 Recommandations par environnement
### **Développement local** (actuel)
```properties
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.flyway.migrate-at-start=false
```
✅ Les tables sont recréées à chaque démarrage avec les données de test
### **Tests**
```properties
%test.quarkus.hibernate-orm.database.generation=drop-and-create
%test.quarkus.flyway.migrate-at-start=false
```
✅ Déjà configuré dans `application-test.yml`
### **Production**
```properties
%prod.quarkus.hibernate-orm.database.generation=validate
%prod.quarkus.flyway.migrate-at-start=false
```
⚠️ **Important** : En production, utilisez `validate` pour éviter toute modification accidentelle du schéma
---
## 🗂️ Fichiers de migration Flyway (conservés)
Les fichiers de migration Flyway dans `src/main/resources/db/migration/` sont **conservés** mais **non utilisés** :
- `V1__Initial_schema.sql`
- `V2__Sample_data.sql`
- `V3__create_auth_tables.sql`
- `V4__create_phase_templates_fixed.sql`
- `V5__Ivorian_test_data.sql`
Vous pouvez les supprimer si vous ne prévoyez pas de réactiver Flyway.
---
## 🔄 Pour réactiver Flyway (si nécessaire)
Si vous souhaitez revenir à Flyway :
1. **Modifier `application.properties`** :
```properties
quarkus.hibernate-orm.database.generation=validate
quarkus.flyway.migrate-at-start=true
quarkus.flyway.baseline-on-migrate=true
quarkus.flyway.baseline-version=0
quarkus.flyway.locations=classpath:db/migration
```
2. **Supprimer ou renommer `import.sql`** :
```bash
mv src/main/resources/import.sql src/main/resources/import.sql.bak
```
---
## 🧪 Tester la configuration
### Démarrer l'application :
```bash
./mvnw quarkus:dev
```
### Vérifier les logs :
Vous devriez voir dans les logs :
```
Hibernate: drop table if exists clients cascade
Hibernate: drop table if exists chantiers cascade
...
Hibernate: create table clients (...)
Hibernate: create table chantiers (...)
...
Hibernate: insert into types_chantier (...)
Hibernate: insert into clients (...)
...
```
### Accéder à la console H2 (en développement) :
```
http://localhost:8080/q/dev
```
---
## ❓ FAQ
### **Q : Pourquoi désactiver Flyway ?**
**R :** Flyway et Hibernate peuvent entrer en conflit lorsqu'ils tentent tous deux de gérer le schéma de la base de données. En développement, Hibernate seul est plus simple et plus rapide.
### **Q : Les données sont-elles perdues à chaque redémarrage ?**
**R :** Oui, avec `drop-and-create`. Pour conserver les données entre les redémarrages, utilisez `update` au lieu de `drop-and-create`.
### **Q : Comment passer en mode `update` ?**
**R :** Modifiez `application.properties` :
```properties
quarkus.hibernate-orm.database.generation=update
```
### **Q : Le fichier `import.sql` est-il exécuté avec `update` ?**
**R :** Oui, mais seulement au premier démarrage. Ensuite, il peut causer des erreurs de doublons. Pour éviter cela, commentez ou supprimez les lignes déjà insérées.
### **Q : Puis-je utiliser Hibernate en production ?**
**R :** Oui, mais utilisez **`validate`** pour éviter toute modification du schéma. En production, il est recommandé de gérer les migrations avec Flyway ou Liquibase.
---
## 📚 Ressources
- [Quarkus Hibernate ORM Guide](https://quarkus.io/guides/hibernate-orm)
- [Quarkus Flyway Guide](https://quarkus.io/guides/flyway)
- [Hibernate Schema Generation](https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#schema-generation)
---
## ✅ Résultat final
Votre application démarre maintenant avec :
-**Hibernate** crée automatiquement toutes les tables
-**`import.sql`** charge automatiquement les données de test
-**Flyway** est désactivé (pas de conflit)
-**Base de données prête** avec des données réalistes pour le marché ivoirien
Bon développement ! 🚀