#!/bin/bash # Script de test de l'API 4NK IA Backend # Usage: ./scripts/test-api.sh set -e # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuration API_BASE_URL="http://localhost:8000" TEST_FILE="test-document.pdf" # Fonction pour afficher les messages log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # Compteur de tests TESTS_PASSED=0 TESTS_FAILED=0 # Fonction pour exécuter un test run_test() { local test_name="$1" local test_command="$2" log_info "Test: $test_name" if eval "$test_command" > /dev/null 2>&1; then log_success "✅ $test_name" ((TESTS_PASSED++)) else log_error "❌ $test_name" ((TESTS_FAILED++)) fi } # Fonction pour tester la santé de l'API test_health() { log_info "=== Test de santé de l'API ===" run_test "Endpoint /api/health accessible" "curl -f $API_BASE_URL/api/health" run_test "Endpoint / accessible" "curl -f $API_BASE_URL/" run_test "Documentation API accessible" "curl -f $API_BASE_URL/api-docs" } # Fonction pour tester l'upload de document test_upload() { log_info "=== Test d'upload de document ===" # Créer un fichier de test si nécessaire if [ ! -f "$TEST_FILE" ]; then log_info "Création d'un fichier de test..." echo "Ceci est un document de test pour l'API 4NK IA Backend." > "$TEST_FILE" fi # Test d'upload local upload_response=$(curl -s -X POST "$API_BASE_URL/api/notary/upload" \ -F "file=@$TEST_FILE" \ -F "id_dossier=TEST-001" \ -F "etude_id=ETUDE-001" \ -F "utilisateur_id=USER-001") if echo "$upload_response" | grep -q "document_id"; then log_success "✅ Upload de document réussi" ((TESTS_PASSED++)) # Extraire l'ID du document local document_id=$(echo "$upload_response" | grep -o '"document_id":"[^"]*"' | cut -d'"' -f4) echo "$document_id" > /tmp/test_document_id else log_error "❌ Upload de document échoué" ((TESTS_FAILED++)) fi } # Fonction pour tester l'extraction de données test_extraction() { log_info "=== Test d'extraction de données ===" if [ -f /tmp/test_document_id ]; then local document_id=$(cat /tmp/test_document_id) run_test "Extraction de données accessible" "curl -f $API_BASE_URL/api/documents/$document_id/extract" run_test "Analyse de document accessible" "curl -f $API_BASE_URL/api/documents/$document_id/analyze" run_test "Contexte de document accessible" "curl -f $API_BASE_URL/api/documents/$document_id/context" run_test "Conseil de document accessible" "curl -f $API_BASE_URL/api/documents/$document_id/conseil" else log_warning "Aucun document de test disponible pour l'extraction" fi } # Fonction pour tester la liste des documents test_documents_list() { log_info "=== Test de liste des documents ===" run_test "Liste des documents accessible" "curl -f $API_BASE_URL/api/notary/documents" } # Fonction pour tester les performances test_performance() { log_info "=== Test de performance ===" local start_time=$(date +%s) curl -s "$API_BASE_URL/api/health" > /dev/null local end_time=$(date +%s) local response_time=$((end_time - start_time)) if [ $response_time -lt 5 ]; then log_success "✅ Temps de réponse acceptable: ${response_time}s" ((TESTS_PASSED++)) else log_warning "⚠️ Temps de réponse lent: ${response_time}s" ((TESTS_FAILED++)) fi } # Fonction pour tester la sécurité test_security() { log_info "=== Test de sécurité ===" # Test des headers de sécurité local headers=$(curl -s -I "$API_BASE_URL/api/health") if echo "$headers" | grep -q "CORS"; then log_success "✅ Headers CORS présents" ((TESTS_PASSED++)) else log_warning "⚠️ Headers CORS manquants" ((TESTS_FAILED++)) fi } # Fonction pour nettoyer les fichiers de test cleanup() { log_info "Nettoyage des fichiers de test..." rm -f "$TEST_FILE" /tmp/test_document_id } # Fonction pour afficher le résumé show_summary() { echo "" log_info "=== Résumé des tests API ===" echo "" echo "Tests réussis: $TESTS_PASSED" echo "Tests échoués: $TESTS_FAILED" echo "Total: $((TESTS_PASSED + TESTS_FAILED))" echo "" if [ $TESTS_FAILED -eq 0 ]; then log_success "🎉 Tous les tests API sont passés !" else log_error "❌ Certains tests API ont échoué." fi } # Fonction principale main() { echo "🧪 Test de l'API 4NK IA Backend" echo "" # Vérifier que l'API est accessible if ! curl -f "$API_BASE_URL/api/health" > /dev/null 2>&1; then log_error "L'API n'est pas accessible sur $API_BASE_URL" log_info "Veuillez démarrer les services avec: ./scripts/quick-start.sh" exit 1 fi test_health test_upload test_extraction test_documents_list test_performance test_security cleanup show_summary } # Gestion des signaux pour le nettoyage trap cleanup EXIT # Exécution main "$@"