Files
unionflow-server-impl-quarkus/FINANCE_WORKFLOW_TESTS.md

4.6 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 :

  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

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