- 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
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
-
Ouvre le fichier HTML dans ton navigateur :
C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\scripts\kafka\test-websocket.html -
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
- Clique sur "📤 Envoyer Ping"
- Tu devrais recevoir un pong du serveur
🧪 Test 3 : Publier un Event Kafka → Vérifier Réception WebSocket
Étape 1 : Ouvrir 3 fenêtres
- Fenêtre 1 : Logs backend Quarkus (déjà ouverte)
- Fenêtre 2 : Navigateur avec
test-websocket.html(WebSocket connecté) - 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
- Mobile : Ouvre le Dashboard
- Backend : Publie un event via Swagger ou Kafka console
- Mobile : Le dashboard devrait se rafraîchir automatiquement !
🧪 Test 6 : End-to-End avec Swagger UI
Scénario : Approbation Finance
- Ouvre Swagger UI : http://localhost:8085/q/swagger-ui
- Trouve l'endpoint :
POST /api/v1/finance/approvals/{id}/approve - Exécute la requête avec un ID de test
- Vérifie les logs backend :
INFO KafkaEventProducer: Publishing approval event... INFO KafkaEventConsumer: Received finance approval event... INFO WebSocketBroadcastService: Broadcasting to X clients... - 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 !