Files
unionflow-server-api/unionflow/scripts/kafka/GUIDE_TESTS.md
dahoud e8ad874015 feat: WebSocket temps réel + Finance Workflow + corrections
- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics)
  * Backend: KafkaEventProducer, KafkaEventConsumer
  * Mobile: WebSocketService (reconnection, heartbeat, typed events)
  * DashboardBloc: Auto-refresh depuis WebSocket events

- Finance Workflow: approbations + budgets (backend + mobile)
  * Backend: entities, services, resources, migrations Flyway V6
  * Mobile: features finance_workflow complète avec BLoC

- Corrections DI: interfaces IRepository partout
  * IProfileRepository, IOrganizationRepository, IMembreRepository
  * GetIt configuré avec @injectable

- Spec-Kit: constitution + templates mis à jour
  * .specify/memory/constitution.md enrichie
  * Templates agent, plan, spec, tasks, checklist

- Nettoyage: fichiers temporaires supprimés

Signed-off-by: lions dev Team
2026-03-15 02:12:17 +00:00

5.6 KiB

🧪 Guide de Tests - Kafka + WebSocket UnionFlow

Statut Actuel

Backend démarré avec succès :

  • 5 Producers Kafka connectés
  • 5 Consumers Kafka connectés (group: unionflow-websocket-server)
  • WebSocket endpoint actif sur /ws/dashboard
  • Aucune erreur UNKNOWN_TOPIC_OR_PARTITION

🧪 Test 1 : Swagger UI

Action

Ouvre ton navigateur : http://localhost:8085/q/swagger-ui

Résultat attendu

  • Page Swagger UI affichée
  • Liste de tous les endpoints REST
  • Section "Schemas" avec les DTOs

🧪 Test 2 : WebSocket - Test HTML

Action

  1. Ouvre le fichier HTML dans ton navigateur :

    C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\scripts\kafka\test-websocket.html
    
  2. Clique sur le bouton "🔗 Connecter"

Résultat attendu

Status change vers " Connecté" Message dans la console : "Connexion WebSocket établie avec succès !" Dans les logs backend : Tu devrais voir :

INFO  WebSocket connection opened from ...

Test Ping/Pong

  1. Clique sur "📤 Envoyer Ping"
  2. Tu devrais recevoir un pong du serveur

🧪 Test 3 : Publier un Event Kafka → Vérifier Réception WebSocket

Étape 1 : Ouvrir 3 fenêtres

  1. Fenêtre 1 : Logs backend Quarkus (déjà ouverte)
  2. Fenêtre 2 : Navigateur avec test-websocket.html (WebSocket connecté)
  3. Fenêtre 3 : PowerShell pour publier l'event

Étape 2 : Publier un Event de Test

Dans PowerShell (Fenêtre 3) :

cd C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\scripts\kafka
.\test-event.bat

Ou manuellement :

echo {"eventType":"APPROVAL_APPROVED","timestamp":"2026-03-14T19:30:00Z","organizationId":"test-org-123","data":{"id":"test-1","amount":50000}} | docker exec -i kafka /opt/kafka/bin/kafka-console-producer.sh --topic unionflow.finance.approvals --bootstrap-server localhost:9092

Résultat attendu

Dans les logs backend (Fenêtre 1) :

INFO  [dev.lions.unionflow.server.messaging.KafkaEventConsumer] (smallrye-kafka-consumer-thread-1)
      Received finance approval event: key=..., value={"eventType":"APPROVAL_APPROVED",...}

Dans le WebSocket HTML (Fenêtre 2) :

[19:30:15] RECEIVED: APPROVAL_APPROVED
{
  "eventType": "APPROVAL_APPROVED",
  "timestamp": "2026-03-14T19:30:00Z",
  "organizationId": "test-org-123",
  "data": { "id": "test-1", "amount": 50000 }
}

Si tu vois l'event dans le WebSocket HTML → SUCCÈS COMPLET !


🧪 Test 4 : Vérifier les Topics Kafka

Lister tous les messages d'un topic

docker exec kafka /opt/kafka/bin/kafka-console-consumer.sh --topic unionflow.finance.approvals --bootstrap-server localhost:9092 --from-beginning

Appuie sur Ctrl+C pour arrêter.

Compter les messages

docker exec kafka /opt/kafka/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic unionflow.finance.approvals

🧪 Test 5 : Application Mobile Flutter

Lancer l'app mobile

cd C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\unionflow-mobile-apps
flutter run --dart-define=ENV=dev

Résultat attendu dans la console mobile

I/flutter (12345): ✅ WebSocket connecté
I/flutter (12345): DashboardBloc: WebSocket initialisé
I/flutter (12345): DashboardBloc: WebSocket connecté - Temps réel actif

Test complet Mobile + Backend

  1. Mobile : Ouvre le Dashboard
  2. Backend : Publie un event via Swagger ou Kafka console
  3. Mobile : Le dashboard devrait se rafraîchir automatiquement !

🧪 Test 6 : End-to-End avec Swagger UI

Scénario : Approbation Finance

  1. Ouvre Swagger UI : http://localhost:8085/q/swagger-ui
  2. Trouve l'endpoint : POST /api/v1/finance/approvals/{id}/approve
  3. Exécute la requête avec un ID de test
  4. Vérifie les logs backend :
    INFO  KafkaEventProducer: Publishing approval event...
    INFO  KafkaEventConsumer: Received finance approval event...
    INFO  WebSocketBroadcastService: Broadcasting to X clients...
    
  5. Vérifie le WebSocket HTML : L'event devrait apparaître !

📊 Résumé des Tests

Test Objectif Status
1. Swagger UI Accès API REST À tester
2. WebSocket HTML Connexion WebSocket À tester
3. Kafka → WebSocket Flux complet À tester
4. Kafka Topics Vérification messages À tester
5. Mobile Flutter WebSocket mobile À tester
6. End-to-End Swagger Workflow complet À tester

🐛 Troubleshooting

WebSocket ne se connecte pas

Vérifier :

netstat -an | findstr 8085

Doit afficher : 0.0.0.0:8085 ... LISTENING

Events Kafka non reçus

Vérifier les consumers :

docker exec kafka /opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group unionflow-websocket-server

Doit afficher :

  • LAG = 0 (tous les messages consommés)
  • 5 topics assignés au group

Backend logs

Augmenter le niveau de log dans application.properties :

quarkus.log.category."dev.lions.unionflow.server.messaging".level=DEBUG

Succès Final

Quand tous ces tests passent :

  • Backend publie events dans Kafka
  • Consumers consomment events
  • WebSocket broadcast aux clients
  • Mobile reçoit events en temps réel
  • Dashboard auto-refresh

→ Architecture Event-Driven 100% FONCTIONNELLE ! 🎉


Commence par le Test 2 (WebSocket HTML) - c'est le plus visuel et le plus rapide pour vérifier que tout fonctionne !