veza/test_user_journey.sh
senke 0e7b6fede1 [T0-002] fix(rust): Corriger erreurs compilation Rust
- Conflit SQLx résolu (alignement sur version 0.7)
- build.rs configurés pour protoc dans chat/stream servers
- API Prometheus migrée vers HistogramOpts
- Traits Display/Debug corrigés (String au lieu de &dyn Display)
- API TOTP corrigée (totp-rs 5.4 avec Secret::Encoded)
- Layers tracing-subscriber corrigés (types conditionnels)
- VezaError/VezaResult exportés dans lib.rs
- TransactionProvider simplifié (retour void au lieu de Box<dyn>)
- VezaConfig contraint Serialize pour to_json()

Files: veza-common/Cargo.toml, veza-common/src/*.rs, veza-chat-server/Cargo.toml, veza-chat-server/build.rs, veza-stream-server/Cargo.toml, veza-stream-server/build.rs, VEZA_ROADMAP.json
Hours: 8 estimated, 3 actual
2026-01-04 01:44:20 +01:00

208 lines
7.5 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Test Parcours Utilisateur Complet - Veza Publication Readiness
# Ce script teste tous les parcours utilisateur critiques
set -e
API="http://localhost:8080/api/v1"
TS=$(date +%s)
EMAIL="user${TS}@test.com"
USERNAME="user${TS}"
PASSWORD='Xk9$mP2#vL7@nQ4!wR8'
echo "=== TEST PARCOURS UTILISATEUR COMPLET ==="
echo "📧 Email: $EMAIL"
echo "👤 Username: $USERNAME"
echo ""
# Variables pour le rapport
REG_SUCCESS=false
LOGIN_SUCCESS=false
TOKEN=""
ME_SUCCESS=false
TRACK_CREATE_SUCCESS=false
TRACK_ID=""
TRACKS_LIST_SUCCESS=false
PLAYLIST_CREATE_SUCCESS=false
PLAYLIST_ID=""
PLAYLISTS_LIST_SUCCESS=false
SEARCH_SUCCESS=false
LOGOUT_SUCCESS=false
# 1. INSCRIPTION
echo "1⃣ INSCRIPTION"
REG=$(curl -s -X POST "$API/auth/register" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$EMAIL\",\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\",\"password_confirm\":\"$PASSWORD\"}")
REG_SUCCESS_VAL=$(echo "$REG" | jq -r '.success // .data.success // false' 2>/dev/null || echo "false")
if [ "$REG_SUCCESS_VAL" = "true" ]; then
REG_SUCCESS=true
echo "✅ Inscription réussie"
else
REG_ERROR=$(echo "$REG" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$REG")
echo "❌ Échec inscription: $REG_ERROR"
fi
echo ""
# 2. CONNEXION
echo "2⃣ CONNEXION"
LOGIN=$(curl -s -X POST "$API/auth/login" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$EMAIL\",\"password\":\"$PASSWORD\"}")
TOKEN=$(echo "$LOGIN" | jq -r '.data.token.access_token // .data.access_token // .token.access_token // empty' 2>/dev/null || echo "")
if [ -n "$TOKEN" ] && [ "$TOKEN" != "null" ]; then
LOGIN_SUCCESS=true
echo "✅ Token obtenu"
else
LOGIN_ERROR=$(echo "$LOGIN" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$LOGIN")
echo "❌ Échec connexion: $LOGIN_ERROR"
echo "Réponse complète: $LOGIN"
fi
echo ""
if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then
echo "❌ ÉCHEC CRITIQUE: Impossible d'obtenir un token"
echo "=== RÉSUMÉ PARTIEL ==="
echo "✅ Inscription: $REG_SUCCESS"
echo "✅ Login: false"
exit 1
fi
# 3. PROFIL UTILISATEUR
echo "3⃣ PROFIL UTILISATEUR"
ME=$(curl -s "$API/auth/me" -H "Authorization: Bearer $TOKEN")
ME_SUCCESS_VAL=$(echo "$ME" | jq -r '.success // .data.email // false' 2>/dev/null || echo "false")
if [ "$ME_SUCCESS_VAL" != "false" ] && [ -n "$(echo "$ME" | jq -r '.data.email // .email // empty' 2>/dev/null)" ]; then
ME_SUCCESS=true
ME_EMAIL=$(echo "$ME" | jq -r '.data.email // .email // "N/A"' 2>/dev/null || echo "N/A")
echo "✅ Profil récupéré: $ME_EMAIL"
else
ME_ERROR=$(echo "$ME" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$ME")
echo "❌ Échec récupération profil: $ME_ERROR"
fi
echo ""
# 4. CRÉER UN TRACK
echo "4⃣ CRÉER UN TRACK"
TRACK=$(curl -s -X POST "$API/tracks" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Ma Première Chanson","genre":"Pop","description":"Test track"}')
TRACK_ID=$(echo "$TRACK" | jq -r '.data.id // .id // empty' 2>/dev/null || echo "")
if [ -n "$TRACK_ID" ] && [ "$TRACK_ID" != "null" ]; then
TRACK_CREATE_SUCCESS=true
echo "✅ Track créé: ID=$TRACK_ID"
else
TRACK_ERROR=$(echo "$TRACK" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$TRACK")
echo "❌ Échec création track: $TRACK_ERROR"
fi
echo ""
# 5. LISTER LES TRACKS
echo "5⃣ LISTER LES TRACKS"
TRACKS=$(curl -s "$API/tracks" -H "Authorization: Bearer $TOKEN")
TRACKS_COUNT=$(echo "$TRACKS" | jq -r '.data | length // . | length // 0' 2>/dev/null || echo "0")
if [ "$TRACKS_COUNT" -ge 0 ]; then
TRACKS_LIST_SUCCESS=true
echo "✅ Nombre de tracks: $TRACKS_COUNT"
else
TRACKS_ERROR=$(echo "$TRACKS" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$TRACKS")
echo "❌ Échec liste tracks: $TRACKS_ERROR"
fi
echo ""
# 6. CRÉER UNE PLAYLIST
echo "6⃣ CRÉER UNE PLAYLIST"
PLAYLIST=$(curl -s -X POST "$API/playlists" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Ma Playlist","description":"Mes favoris","visibility":"private"}')
PLAYLIST_ID=$(echo "$PLAYLIST" | jq -r '.data.id // .id // empty' 2>/dev/null || echo "")
if [ -n "$PLAYLIST_ID" ] && [ "$PLAYLIST_ID" != "null" ]; then
PLAYLIST_CREATE_SUCCESS=true
echo "✅ Playlist créée: ID=$PLAYLIST_ID"
else
PLAYLIST_ERROR=$(echo "$PLAYLIST" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$PLAYLIST")
echo "❌ Échec création playlist: $PLAYLIST_ERROR"
fi
echo ""
# 7. LISTER LES PLAYLISTS
echo "7⃣ LISTER LES PLAYLISTS"
PLAYLISTS=$(curl -s "$API/playlists" -H "Authorization: Bearer $TOKEN")
PLAYLISTS_COUNT=$(echo "$PLAYLISTS" | jq -r '.data | length // . | length // 0' 2>/dev/null || echo "0")
if [ "$PLAYLISTS_COUNT" -ge 0 ]; then
PLAYLISTS_LIST_SUCCESS=true
echo "✅ Nombre de playlists: $PLAYLISTS_COUNT"
else
PLAYLISTS_ERROR=$(echo "$PLAYLISTS" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$PLAYLISTS")
echo "❌ Échec liste playlists: $PLAYLISTS_ERROR"
fi
echo ""
# 8. RECHERCHE
echo "8⃣ RECHERCHE"
SEARCH=$(curl -s "$API/tracks/search?q=chanson" -H "Authorization: Bearer $TOKEN" 2>/dev/null || echo '{"error":"endpoint_not_found"}')
SEARCH_COUNT=$(echo "$SEARCH" | jq -r '.data | length // . | length // 0' 2>/dev/null || echo "0")
if echo "$SEARCH" | jq -e '.data' >/dev/null 2>&1 || [ "$SEARCH_COUNT" -ge 0 ]; then
SEARCH_SUCCESS=true
echo "✅ Résultats recherche 'chanson': $SEARCH_COUNT"
else
echo "⚠️ Recherche: endpoint non disponible ou erreur"
fi
echo ""
# 9. DÉCONNEXION
echo "9⃣ DÉCONNEXION"
REFRESH=$(echo "$LOGIN" | jq -r '.data.token.refresh_token // .data.refresh_token // .refresh_token // empty' 2>/dev/null || echo "")
if [ -n "$REFRESH" ] && [ "$REFRESH" != "null" ]; then
LOGOUT=$(curl -s -X POST "$API/auth/logout" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"refresh_token\":\"$REFRESH\"}")
LOGOUT_SUCCESS_VAL=$(echo "$LOGOUT" | jq -r '.success // false' 2>/dev/null || echo "false")
if [ "$LOGOUT_SUCCESS_VAL" = "true" ]; then
LOGOUT_SUCCESS=true
echo "✅ Déconnexion réussie"
else
LOGOUT_ERROR=$(echo "$LOGOUT" | jq -r '.error.message // .message // .error // .' 2>/dev/null || echo "$LOGOUT")
echo "❌ Échec déconnexion: $LOGOUT_ERROR"
fi
else
echo "⚠️ Refresh token non disponible, test de déconnexion ignoré"
fi
echo ""
# 10. VÉRIFIER QUE LA SESSION EST INVALIDE (si logout réussi)
if [ "$LOGOUT_SUCCESS" = true ]; then
echo "🔟 VÉRIFIER SESSION INVALIDE"
VERIFY=$(curl -s "$API/auth/me" -H "Authorization: Bearer $TOKEN")
VERIFY_ERROR=$(echo "$VERIFY" | jq -r '.error.message // .message // .error // empty' 2>/dev/null || echo "")
if [ -n "$VERIFY_ERROR" ]; then
echo "✅ Session invalidée correctement"
else
echo "⚠️ Session toujours valide après logout"
fi
echo ""
fi
# RÉSUMÉ
echo "=== RÉSUMÉ ==="
echo "✅ Inscription: $REG_SUCCESS"
echo "✅ Login: $LOGIN_SUCCESS"
echo "✅ Profil: $ME_SUCCESS"
echo "✅ Créer track: $TRACK_CREATE_SUCCESS"
echo "✅ Lister tracks: $TRACKS_LIST_SUCCESS"
echo "✅ Créer playlist: $PLAYLIST_CREATE_SUCCESS"
echo "✅ Lister playlists: $PLAYLISTS_LIST_SUCCESS"
echo "✅ Recherche: $SEARCH_SUCCESS"
echo "✅ Logout: $LOGOUT_SUCCESS"
# Export pour utilisation dans le script principal
export REG_SUCCESS LOGIN_SUCCESS ME_SUCCESS TRACK_CREATE_SUCCESS TRACKS_LIST_SUCCESS \
PLAYLIST_CREATE_SUCCESS PLAYLISTS_LIST_SUCCESS SEARCH_SUCCESS LOGOUT_SUCCESS