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
This commit is contained in:
215
unionflow/scripts/kafka/GUIDE_TESTS.md
Normal file
215
unionflow/scripts/kafka/GUIDE_TESTS.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# 🧪 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) :
|
||||
|
||||
```powershell
|
||||
cd C:\Users\dadyo\PersonalProjects\lions-workspace\unionflow\scripts\kafka
|
||||
.\test-event.bat
|
||||
```
|
||||
|
||||
**Ou manuellement** :
|
||||
|
||||
```cmd
|
||||
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
|
||||
|
||||
```cmd
|
||||
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
|
||||
|
||||
```cmd
|
||||
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
|
||||
|
||||
```bash
|
||||
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** :
|
||||
```cmd
|
||||
netstat -an | findstr 8085
|
||||
```
|
||||
|
||||
Doit afficher : `0.0.0.0:8085 ... LISTENING`
|
||||
|
||||
### Events Kafka non reçus
|
||||
|
||||
**Vérifier les consumers** :
|
||||
```cmd
|
||||
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` :
|
||||
```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 !
|
||||
Reference in New Issue
Block a user