#!/bin/bash echo "🧪 Test complet de l'API d'inventaire industriel" echo "================================================" # URL de base BASE_URL="http://localhost:3000/api" # Couleurs pour l'affichage GREEN='\033[0;32m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonction pour afficher les résultats print_result() { if [ $1 -eq 0 ]; then echo -e "${GREEN}✅ $2${NC}" else echo -e "${RED}❌ $2${NC}" fi } echo -e "${BLUE}1. Test des Sites${NC}" echo "-------------------" # Créer un site SITE_RESPONSE=$(curl -s -X POST $BASE_URL/sites \ -H "Content-Type: application/json" \ -d '{ "name": "Usine de Production B", "description": "Site secondaire de production" }') if echo "$SITE_RESPONSE" | grep -q '"id"'; then SITE_ID=$(echo $SITE_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Site créé avec ID: $SITE_ID" else print_result 1 "Échec création site" echo "$SITE_RESPONSE" fi # Lister tous les sites SITES_LIST=$(curl -s -X GET $BASE_URL/sites) if echo "$SITES_LIST" | grep -q '"id"'; then print_result 0 "Liste des sites récupérée" else print_result 1 "Échec récupération sites" fi echo -e "\n${BLUE}2. Test des Types${NC}" echo "----------------" # Créer un type de machine TYPE_MACHINE_RESPONSE=$(curl -s -X POST $BASE_URL/types/machines \ -H "Content-Type: application/json" \ -d '{ "name": "Convoyeur à Bande", "description": "Système de transport de matériaux" }') if echo "$TYPE_MACHINE_RESPONSE" | grep -q '"id"'; then TYPE_MACHINE_ID=$(echo $TYPE_MACHINE_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Type machine créé avec ID: $TYPE_MACHINE_ID" else print_result 1 "Échec création type machine" echo "$TYPE_MACHINE_RESPONSE" fi # Créer un type de composant TYPE_COMPOSANT_RESPONSE=$(curl -s -X POST $BASE_URL/types/composants \ -H "Content-Type: application/json" \ -d '{ "name": "Moteur Électrique", "description": "Moteur pour entraînement mécanique" }') if echo "$TYPE_COMPOSANT_RESPONSE" | grep -q '"id"'; then TYPE_COMPOSANT_ID=$(echo $TYPE_COMPOSANT_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Type composant créé avec ID: $TYPE_COMPOSANT_ID" else print_result 1 "Échec création type composant" echo "$TYPE_COMPOSANT_RESPONSE" fi # Créer un type de pièce TYPE_PIECE_RESPONSE=$(curl -s -X POST $BASE_URL/types/pieces \ -H "Content-Type: application/json" \ -d '{ "name": "Roulement à Billes", "description": "Roulement pour rotation fluide" }') if echo "$TYPE_PIECE_RESPONSE" | grep -q '"id"'; then TYPE_PIECE_ID=$(echo $TYPE_PIECE_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Type pièce créé avec ID: $TYPE_PIECE_ID" else print_result 1 "Échec création type pièce" echo "$TYPE_PIECE_RESPONSE" fi echo -e "\n${BLUE}3. Test des Machines${NC}" echo "---------------------" # Créer une machine MACHINE_RESPONSE=$(curl -s -X POST $BASE_URL/machines \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Convoyeur CB-500\", \"siteId\": \"$SITE_ID\", \"reference\": \"CB-500-001\", \"constructeur\": \"TransportTech\", \"prix\": \"75000.00\", \"emplacement\": \"Zone B - Secteur 1\", \"typeMachineId\": \"$TYPE_MACHINE_ID\" }") if echo "$MACHINE_RESPONSE" | grep -q '"id"'; then MACHINE_ID=$(echo $MACHINE_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Machine créée avec ID: $MACHINE_ID" else print_result 1 "Échec création machine" echo "$MACHINE_RESPONSE" fi echo -e "\n${BLUE}4. Test des Composants${NC}" echo "----------------------" # Créer un composant principal COMPOSANT_RESPONSE=$(curl -s -X POST $BASE_URL/composants \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Moteur Principal\", \"machineId\": \"$MACHINE_ID\", \"reference\": \"MP-001\", \"constructeur\": \"MotorTech\", \"prix\": \"15000.00\", \"emplacement\": \"Zone moteur\", \"typeComposantId\": \"$TYPE_COMPOSANT_ID\" }") if echo "$COMPOSANT_RESPONSE" | grep -q '"id"'; then COMPOSANT_ID=$(echo $COMPOSANT_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Composant créé avec ID: $COMPOSANT_ID" else print_result 1 "Échec création composant" echo "$COMPOSANT_RESPONSE" fi # Créer un sous-composant SOUS_COMPOSANT_RESPONSE=$(curl -s -X POST $BASE_URL/composants \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Réducteur de Vitesse\", \"machineId\": \"$MACHINE_ID\", \"parentComposantId\": \"$COMPOSANT_ID\", \"reference\": \"RV-001\", \"constructeur\": \"GearTech\", \"prix\": \"8000.00\", \"emplacement\": \"Zone réducteur\", \"typeComposantId\": \"$TYPE_COMPOSANT_ID\" }") if echo "$SOUS_COMPOSANT_RESPONSE" | grep -q '"id"'; then SOUS_COMPOSANT_ID=$(echo $SOUS_COMPOSANT_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Sous-composant créé avec ID: $SOUS_COMPOSANT_ID" else print_result 1 "Échec création sous-composant" echo "$SOUS_COMPOSANT_RESPONSE" fi # Tester la hiérarchie des composants HIERARCHY_RESPONSE=$(curl -s -X GET $BASE_URL/composants/hierarchy/$MACHINE_ID) if echo "$HIERARCHY_RESPONSE" | grep -q '"id"'; then print_result 0 "Hiérarchie des composants récupérée" else print_result 1 "Échec récupération hiérarchie" fi echo -e "\n${BLUE}5. Test des Pièces${NC}" echo "----------------" # Créer une pièce attachée à la machine PIECE_MACHINE_RESPONSE=$(curl -s -X POST $BASE_URL/pieces \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Bande Transporteuse\", \"machineId\": \"$MACHINE_ID\", \"reference\": \"BT-001\", \"constructeur\": \"BeltTech\", \"prix\": \"5000.00\", \"emplacement\": \"Zone bande\", \"typePieceId\": \"$TYPE_PIECE_ID\" }") if echo "$PIECE_MACHINE_RESPONSE" | grep -q '"id"'; then PIECE_MACHINE_ID=$(echo $PIECE_MACHINE_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Pièce machine créée avec ID: $PIECE_MACHINE_ID" else print_result 1 "Échec création pièce machine" echo "$PIECE_MACHINE_RESPONSE" fi # Créer une pièce attachée au composant PIECE_COMPOSANT_RESPONSE=$(curl -s -X POST $BASE_URL/pieces \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Roulement Moteur\", \"composantId\": \"$COMPOSANT_ID\", \"reference\": \"RM-001\", \"constructeur\": \"BearingTech\", \"prix\": \"500.00\", \"emplacement\": \"Zone roulement\", \"typePieceId\": \"$TYPE_PIECE_ID\" }") if echo "$PIECE_COMPOSANT_RESPONSE" | grep -q '"id"'; then PIECE_COMPOSANT_ID=$(echo $PIECE_COMPOSANT_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Pièce composant créée avec ID: $PIECE_COMPOSANT_ID" else print_result 1 "Échec création pièce composant" echo "$PIECE_COMPOSANT_RESPONSE" fi echo -e "\n${BLUE}6. Test des Documents${NC}" echo "---------------------" # Créer un document pour la machine DOCUMENT_MACHINE_RESPONSE=$(curl -s -X POST $BASE_URL/documents \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Manuel d'utilisation\", \"filename\": \"manuel_convoyeur.pdf\", \"path\": \"/documents/manuel_convoyeur.pdf\", \"mimeType\": \"application/pdf\", \"size\": 2048576, \"machineId\": \"$MACHINE_ID\" }") if echo "$DOCUMENT_MACHINE_RESPONSE" | grep -q '"id"'; then DOCUMENT_MACHINE_ID=$(echo $DOCUMENT_MACHINE_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Document machine créé avec ID: $DOCUMENT_MACHINE_ID" else print_result 1 "Échec création document machine" echo "$DOCUMENT_MACHINE_RESPONSE" fi # Créer un document pour le composant DOCUMENT_COMPOSANT_RESPONSE=$(curl -s -X POST $BASE_URL/documents \ -H "Content-Type: application/json" \ -d "{ \"name\": \"Schéma électrique\", \"filename\": \"schema_moteur.pdf\", \"path\": \"/documents/schema_moteur.pdf\", \"mimeType\": \"application/pdf\", \"size\": 1048576, \"composantId\": \"$COMPOSANT_ID\" }") if echo "$DOCUMENT_COMPOSANT_RESPONSE" | grep -q '"id"'; then DOCUMENT_COMPOSANT_ID=$(echo $DOCUMENT_COMPOSANT_RESPONSE | grep -o '"id":"[^"]*"' | cut -d'"' -f4) print_result 0 "Document composant créé avec ID: $DOCUMENT_COMPOSANT_ID" else print_result 1 "Échec création document composant" echo "$DOCUMENT_COMPOSANT_RESPONSE" fi echo -e "\n${BLUE}7. Test des Requêtes Spécialisées${NC}" echo "--------------------------------" # Tester la récupération de la hiérarchie complète FULL_HIERARCHY=$(curl -s -X GET $BASE_URL/sites) if echo "$FULL_HIERARCHY" | grep -q '"machines"'; then print_result 0 "Hiérarchie complète récupérée" else print_result 1 "Échec récupération hiérarchie complète" fi # Tester la récupération des pièces par machine PIECES_MACHINE=$(curl -s -X GET $BASE_URL/pieces/machine/$MACHINE_ID) if echo "$PIECES_MACHINE" | grep -q '"id"'; then print_result 0 "Pièces de la machine récupérées" else print_result 1 "Échec récupération pièces machine" fi # Tester la récupération des documents par machine DOCUMENTS_MACHINE=$(curl -s -X GET $BASE_URL/documents/machine/$MACHINE_ID) if echo "$DOCUMENTS_MACHINE" | grep -q '"id"'; then print_result 0 "Documents de la machine récupérés" else print_result 1 "Échec récupération documents machine" fi echo -e "\n${BLUE}8. Résumé des Tests${NC}" echo "-------------------" echo "📊 Statistiques des tests :" echo "• Sites créés : 1" echo "• Types créés : 3 (machine, composant, pièce)" echo "• Machines créées : 1" echo "• Composants créés : 2 (avec hiérarchie)" echo "• Pièces créées : 2 (machine + composant)" echo "• Documents créés : 2 (machine + composant)" echo -e "\n🎯 Endpoints testés :" echo "✅ POST /api/sites" echo "✅ GET /api/sites" echo "✅ POST /api/types/machines" echo "✅ POST /api/types/composants" echo "✅ POST /api/types/pieces" echo "✅ POST /api/machines" echo "✅ POST /api/composants" echo "✅ GET /api/composants/hierarchy/:machineId" echo "✅ POST /api/pieces" echo "✅ GET /api/pieces/machine/:machineId" echo "✅ POST /api/documents" echo "✅ GET /api/documents/machine/:machineId" echo -e "\n🚀 API prête pour le développement frontend !" echo "📋 URL de base : $BASE_URL" echo "🔗 Documentation : http://localhost:3000/api (à implémenter avec Swagger)"