# 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)