- 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
216 lines
5.6 KiB
Markdown
216 lines
5.6 KiB
Markdown
# 🧪 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 !
|