chore(quarkus-327): bump to Quarkus 3.27.3 LTS, make pom autonomous, fix 3 tests (NPE guard, equalsHashCode with shared refs), rename deprecated config keys
This commit is contained in:
@@ -1,152 +1,152 @@
|
||||
# Finance Workflow - Tests
|
||||
|
||||
**Date:** 2026-03-14
|
||||
**Status:** EN COURS
|
||||
|
||||
## Tests unitaires - Limitation JWT
|
||||
|
||||
### Problème identifié
|
||||
|
||||
Les services `ApprovalService` et `BudgetService` injectent directement `JsonWebToken` via `@Inject`, ce qui rend difficile les tests unitaires purs avec Mockito :
|
||||
|
||||
```java
|
||||
@ApplicationScoped
|
||||
public class ApprovalService {
|
||||
@Inject
|
||||
JsonWebToken jwt; // Injection directe, difficile à mocker
|
||||
|
||||
public TransactionApprovalResponse approveTransaction(UUID approvalId, ApproveTransactionRequest request) {
|
||||
String userEmail = jwt.getClaim("email"); // Dépendance JWT
|
||||
UUID userId = UUID.fromString(jwt.getClaim("sub"));
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Solutions possibles
|
||||
|
||||
**Option 1: Tests d'intégration avec @QuarkusTest** (RECOMMANDÉ)
|
||||
```java
|
||||
@QuarkusTest
|
||||
@TestSecurity(user = "admin@test.com", roles = {"ORG_ADMIN"})
|
||||
class ApprovalServiceIntegrationTest {
|
||||
@Inject
|
||||
ApprovalService service;
|
||||
|
||||
@Test
|
||||
void testApprove() {
|
||||
// Tests with real JWT injection
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Option 2: Refactoring pour dependency injection explicite**
|
||||
|
||||
Modifier les services pour accepter userId en paramètre :
|
||||
```java
|
||||
public TransactionApprovalResponse approveTransaction(
|
||||
UUID approvalId,
|
||||
ApproveTransactionRequest request,
|
||||
UUID userId, // Explicit parameter
|
||||
String userEmail
|
||||
) {
|
||||
// No JWT dependency
|
||||
}
|
||||
```
|
||||
|
||||
Puis les Resources extraient le JWT et passent les paramètres.
|
||||
|
||||
**Option 3: Tests via REST endpoints**
|
||||
|
||||
Tester les fonctionnalités via les endpoints REST avec RestAssured :
|
||||
```java
|
||||
given()
|
||||
.auth().oauth2(token)
|
||||
.contentType(ContentType.JSON)
|
||||
.body(request)
|
||||
.when()
|
||||
.post("/api/finance/approvals/{id}/approve", approvalId)
|
||||
.then()
|
||||
.statusCode(200);
|
||||
```
|
||||
|
||||
### Décision actuelle
|
||||
|
||||
Pour l'instant, on procède avec :
|
||||
1. **Tests de migration Flyway** - Vérifier que V6 s'exécute sans erreur
|
||||
2. **Tests manuels via Swagger UI** - Vérifier que les endpoints fonctionnent
|
||||
3. **Tests d'intégration REST** (P1) - À créer après validation initiale
|
||||
|
||||
Les tests unitaires purs des services seront ajoutés en P1 après refactoring si nécessaire.
|
||||
|
||||
## Tests à effectuer
|
||||
|
||||
### ✅ P0 - Production Blockers
|
||||
|
||||
- [ ] **Migration Flyway V6**
|
||||
- Exécuter `mvn quarkus:dev` et vérifier les logs Flyway
|
||||
- Vérifier que les 4 tables sont créées : transaction_approvals, approver_actions, budgets, budget_lines
|
||||
- Vérifier les contraintes CHECK, foreign keys, et indexes
|
||||
|
||||
- [ ] **Endpoints REST - Swagger UI**
|
||||
- Démarrer Quarkus dev: `mvn quarkus:dev`
|
||||
- Accéder à http://localhost:8085/q/swagger-ui
|
||||
- Tester GET /api/finance/approvals/pending
|
||||
- Tester POST /api/finance/approvals (approve/reject)
|
||||
- Tester GET /api/finance/budgets
|
||||
- Tester POST /api/finance/budgets (create)
|
||||
- Tester GET /api/finance/budgets/{id}/tracking
|
||||
|
||||
- [ ] **Intégration mobile-backend**
|
||||
- Lancer le backend (port 8085)
|
||||
- Lancer l'app mobile Flutter en dev
|
||||
- Naviguer vers Finance Workflow
|
||||
- Vérifier que les approbations se chargent
|
||||
- Vérifier que les budgets se chargent
|
||||
- Tester une approbation end-to-end
|
||||
- Tester la création d'un budget
|
||||
|
||||
### P1 - Post-Production
|
||||
|
||||
- [ ] **Tests d'intégration RestAssured**
|
||||
- ApprovalResourceIntegrationTest (E2E workflow)
|
||||
- BudgetResourceIntegrationTest (CRUD complet)
|
||||
|
||||
- [ ] **Tests unitaires entités**
|
||||
- TransactionApprovalTest (méthodes métier: hasAllApprovals, isExpired, countApprovals)
|
||||
- BudgetTest (méthodes métier: recalculateTotals, getRealizationRate, isOverBudget)
|
||||
|
||||
- [ ] **Tests repositories**
|
||||
- TransactionApprovalRepositoryTest (requêtes personnalisées)
|
||||
- BudgetRepositoryTest (filtres, recherches)
|
||||
|
||||
### P2 - Couverture complète
|
||||
|
||||
- [ ] Refactoring services pour faciliter tests unitaires
|
||||
- [ ] Tests unitaires services (après refactoring)
|
||||
- [ ] Tests de charge (performance)
|
||||
- [ ] Tests de sécurité (autorisations)
|
||||
|
||||
## Commandes utiles
|
||||
|
||||
```bash
|
||||
# Démarrer Quarkus en mode dev
|
||||
cd unionflow/unionflow-server-impl-quarkus
|
||||
mvn quarkus:dev
|
||||
|
||||
# Vérifier migration Flyway
|
||||
tail -f target/quarkus.log | grep Flyway
|
||||
|
||||
# Exécuter tests d'intégration (quand créés)
|
||||
mvn test -Dtest=ApprovalResourceIntegrationTest
|
||||
|
||||
# Générer rapport de couverture
|
||||
mvn clean verify
|
||||
# Rapport: target/site/jacoco/index.html
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Les fichiers de tests créés (`ApprovalServiceTest.java`, `BudgetServiceTest.java`) ne compilent pas actuellement à cause des dépendances JWT
|
||||
- Ils peuvent servir de base pour des tests d'intégration futurs
|
||||
- La priorité P0 est de valider que le backend fonctionne (migration + endpoints)
|
||||
# Finance Workflow - Tests
|
||||
|
||||
**Date:** 2026-03-14
|
||||
**Status:** EN COURS
|
||||
|
||||
## Tests unitaires - Limitation JWT
|
||||
|
||||
### Problème identifié
|
||||
|
||||
Les services `ApprovalService` et `BudgetService` injectent directement `JsonWebToken` via `@Inject`, ce qui rend difficile les tests unitaires purs avec Mockito :
|
||||
|
||||
```java
|
||||
@ApplicationScoped
|
||||
public class ApprovalService {
|
||||
@Inject
|
||||
JsonWebToken jwt; // Injection directe, difficile à mocker
|
||||
|
||||
public TransactionApprovalResponse approveTransaction(UUID approvalId, ApproveTransactionRequest request) {
|
||||
String userEmail = jwt.getClaim("email"); // Dépendance JWT
|
||||
UUID userId = UUID.fromString(jwt.getClaim("sub"));
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Solutions possibles
|
||||
|
||||
**Option 1: Tests d'intégration avec @QuarkusTest** (RECOMMANDÉ)
|
||||
```java
|
||||
@QuarkusTest
|
||||
@TestSecurity(user = "admin@test.com", roles = {"ORG_ADMIN"})
|
||||
class ApprovalServiceIntegrationTest {
|
||||
@Inject
|
||||
ApprovalService service;
|
||||
|
||||
@Test
|
||||
void testApprove() {
|
||||
// Tests with real JWT injection
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Option 2: Refactoring pour dependency injection explicite**
|
||||
|
||||
Modifier les services pour accepter userId en paramètre :
|
||||
```java
|
||||
public TransactionApprovalResponse approveTransaction(
|
||||
UUID approvalId,
|
||||
ApproveTransactionRequest request,
|
||||
UUID userId, // Explicit parameter
|
||||
String userEmail
|
||||
) {
|
||||
// No JWT dependency
|
||||
}
|
||||
```
|
||||
|
||||
Puis les Resources extraient le JWT et passent les paramètres.
|
||||
|
||||
**Option 3: Tests via REST endpoints**
|
||||
|
||||
Tester les fonctionnalités via les endpoints REST avec RestAssured :
|
||||
```java
|
||||
given()
|
||||
.auth().oauth2(token)
|
||||
.contentType(ContentType.JSON)
|
||||
.body(request)
|
||||
.when()
|
||||
.post("/api/finance/approvals/{id}/approve", approvalId)
|
||||
.then()
|
||||
.statusCode(200);
|
||||
```
|
||||
|
||||
### Décision actuelle
|
||||
|
||||
Pour l'instant, on procède avec :
|
||||
1. **Tests de migration Flyway** - Vérifier que V6 s'exécute sans erreur
|
||||
2. **Tests manuels via Swagger UI** - Vérifier que les endpoints fonctionnent
|
||||
3. **Tests d'intégration REST** (P1) - À créer après validation initiale
|
||||
|
||||
Les tests unitaires purs des services seront ajoutés en P1 après refactoring si nécessaire.
|
||||
|
||||
## Tests à effectuer
|
||||
|
||||
### ✅ P0 - Production Blockers
|
||||
|
||||
- [ ] **Migration Flyway V6**
|
||||
- Exécuter `mvn quarkus:dev` et vérifier les logs Flyway
|
||||
- Vérifier que les 4 tables sont créées : transaction_approvals, approver_actions, budgets, budget_lines
|
||||
- Vérifier les contraintes CHECK, foreign keys, et indexes
|
||||
|
||||
- [ ] **Endpoints REST - Swagger UI**
|
||||
- Démarrer Quarkus dev: `mvn quarkus:dev`
|
||||
- Accéder à http://localhost:8085/q/swagger-ui
|
||||
- Tester GET /api/finance/approvals/pending
|
||||
- Tester POST /api/finance/approvals (approve/reject)
|
||||
- Tester GET /api/finance/budgets
|
||||
- Tester POST /api/finance/budgets (create)
|
||||
- Tester GET /api/finance/budgets/{id}/tracking
|
||||
|
||||
- [ ] **Intégration mobile-backend**
|
||||
- Lancer le backend (port 8085)
|
||||
- Lancer l'app mobile Flutter en dev
|
||||
- Naviguer vers Finance Workflow
|
||||
- Vérifier que les approbations se chargent
|
||||
- Vérifier que les budgets se chargent
|
||||
- Tester une approbation end-to-end
|
||||
- Tester la création d'un budget
|
||||
|
||||
### P1 - Post-Production
|
||||
|
||||
- [ ] **Tests d'intégration RestAssured**
|
||||
- ApprovalResourceIntegrationTest (E2E workflow)
|
||||
- BudgetResourceIntegrationTest (CRUD complet)
|
||||
|
||||
- [ ] **Tests unitaires entités**
|
||||
- TransactionApprovalTest (méthodes métier: hasAllApprovals, isExpired, countApprovals)
|
||||
- BudgetTest (méthodes métier: recalculateTotals, getRealizationRate, isOverBudget)
|
||||
|
||||
- [ ] **Tests repositories**
|
||||
- TransactionApprovalRepositoryTest (requêtes personnalisées)
|
||||
- BudgetRepositoryTest (filtres, recherches)
|
||||
|
||||
### P2 - Couverture complète
|
||||
|
||||
- [ ] Refactoring services pour faciliter tests unitaires
|
||||
- [ ] Tests unitaires services (après refactoring)
|
||||
- [ ] Tests de charge (performance)
|
||||
- [ ] Tests de sécurité (autorisations)
|
||||
|
||||
## Commandes utiles
|
||||
|
||||
```bash
|
||||
# Démarrer Quarkus en mode dev
|
||||
cd unionflow/unionflow-server-impl-quarkus
|
||||
mvn quarkus:dev
|
||||
|
||||
# Vérifier migration Flyway
|
||||
tail -f target/quarkus.log | grep Flyway
|
||||
|
||||
# Exécuter tests d'intégration (quand créés)
|
||||
mvn test -Dtest=ApprovalResourceIntegrationTest
|
||||
|
||||
# Générer rapport de couverture
|
||||
mvn clean verify
|
||||
# Rapport: target/site/jacoco/index.html
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Les fichiers de tests créés (`ApprovalServiceTest.java`, `BudgetServiceTest.java`) ne compilent pas actuellement à cause des dépendances JWT
|
||||
- Ils peuvent servir de base pour des tests d'intégration futurs
|
||||
- La priorité P0 est de valider que le backend fonctionne (migration + endpoints)
|
||||
|
||||
Reference in New Issue
Block a user