4.5 KiB
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 :
@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É)
@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 :
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 :
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 :
- Tests de migration Flyway - Vérifier que V6 s'exécute sans erreur
- Tests manuels via Swagger UI - Vérifier que les endpoints fonctionnent
- 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:devet 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
- Exécuter
-
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
- Démarrer Quarkus dev:
-
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
# 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)