xpeditis2.0/apps/backend/test-booking-creation.sh
2025-12-05 13:55:40 +01:00

201 lines
6.0 KiB
Bash

#!/bin/bash
# Test script to create a CSV booking and identify errors
set -e
echo "=========================================="
echo "🧪 Test de création de CSV Booking"
echo "=========================================="
echo ""
# Configuration
API_URL="http://localhost:4000/api/v1"
BACKEND_LOG="/tmp/backend-startup.log"
# Couleurs
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Étape 1: Login pour obtenir le JWT token
echo -e "${BLUE}📋 Étape 1: Connexion (obtention du token JWT)${NC}"
echo "----------------------------------------------"
# Utiliser des credentials admin ou de test
LOGIN_RESPONSE=$(curl -s -X POST "${API_URL}/auth/login" \
-H "Content-Type: application/json" \
-d '{
"email": "admin@xpeditis.com",
"password": "Admin123!"
}' 2>&1)
echo "Response: ${LOGIN_RESPONSE:0:200}..."
# Extraire le token
TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"accessToken":"[^"]*"' | cut -d'"' -f4)
if [ -z "$TOKEN" ]; then
echo -e "${RED}❌ Échec de connexion${NC}"
echo "Essayez avec d'autres credentials ou créez un utilisateur de test."
echo "Full response: $LOGIN_RESPONSE"
exit 1
fi
echo -e "${GREEN}✅ Token obtenu: ${TOKEN:0:30}...${NC}"
echo ""
# Étape 2: Créer un fichier de test
echo -e "${BLUE}📋 Étape 2: Création d'un fichier de test${NC}"
echo "----------------------------------------------"
TEST_FILE="/tmp/test-booking-doc.txt"
cat > "$TEST_FILE" << EOF
BILL OF LADING - TEST DOCUMENT
================================
Booking ID: TEST-$(date +%s)
Origin: NLRTM (Rotterdam)
Destination: USNYC (New York)
Date: $(date)
This is a test document for CSV booking creation.
Weight: 1500 kg
Volume: 2.88 CBM
Pallets: 3
Test completed successfully.
EOF
echo -e "${GREEN}✅ Fichier créé: $TEST_FILE${NC}"
echo ""
# Étape 3: Vérifier le bucket S3/MinIO
echo -e "${BLUE}📋 Étape 3: Vérification du bucket MinIO${NC}"
echo "----------------------------------------------"
# Check if MinIO is running
if docker ps | grep -q "xpeditis-minio"; then
echo -e "${GREEN}✅ MinIO container is running${NC}"
else
echo -e "${RED}❌ MinIO container is NOT running${NC}"
echo "Start it with: docker-compose up -d"
exit 1
fi
# Check if bucket exists (via MinIO API)
echo "Checking if bucket 'xpeditis-documents' exists..."
BUCKET_CHECK=$(curl -s -I "http://localhost:9000/xpeditis-documents/" \
-H "Authorization: AWS4-HMAC-SHA256 Credential=minioadmin/20231201/us-east-1/s3/aws4_request" 2>&1 | head -1)
if echo "$BUCKET_CHECK" | grep -q "200 OK"; then
echo -e "${GREEN}✅ Bucket 'xpeditis-documents' exists${NC}"
elif echo "$BUCKET_CHECK" | grep -q "404"; then
echo -e "${YELLOW}⚠️ Bucket 'xpeditis-documents' does NOT exist${NC}"
echo "The backend will try to create it automatically, or it may fail."
else
echo -e "${YELLOW}⚠️ Cannot verify bucket (MinIO might require auth)${NC}"
fi
echo ""
# Étape 4: Envoyer la requête de création de booking
echo -e "${BLUE}📋 Étape 4: Création du CSV booking${NC}"
echo "----------------------------------------------"
# Clear previous backend logs
echo "" > "$BACKEND_LOG.tail"
# Start tailing logs in background
tail -f "$BACKEND_LOG" > "$BACKEND_LOG.tail" &
TAIL_PID=$!
# Wait a second
sleep 1
echo "Sending POST request to /api/v1/csv-bookings..."
echo ""
# Send the booking request
BOOKING_RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X POST "${API_URL}/csv-bookings" \
-H "Authorization: Bearer ${TOKEN}" \
-F "carrierName=Test Maritime Express" \
-F "carrierEmail=carrier@test.com" \
-F "origin=NLRTM" \
-F "destination=USNYC" \
-F "volumeCBM=2.88" \
-F "weightKG=1500" \
-F "palletCount=3" \
-F "priceUSD=4834.44" \
-F "priceEUR=4834.44" \
-F "primaryCurrency=USD" \
-F "transitDays=22" \
-F "containerType=LCL" \
-F "notes=Test booking via script" \
-F "documents=@${TEST_FILE}" 2>&1)
# Extract HTTP status
HTTP_STATUS=$(echo "$BOOKING_RESPONSE" | grep "HTTP_STATUS" | cut -d':' -f2)
RESPONSE_BODY=$(echo "$BOOKING_RESPONSE" | sed '/HTTP_STATUS/d')
echo "HTTP Status: $HTTP_STATUS"
echo ""
echo "Response Body:"
echo "$RESPONSE_BODY" | head -50
echo ""
# Stop tailing
kill $TAIL_PID 2>/dev/null || true
# Wait a bit for logs to flush
sleep 2
# Étape 5: Analyser les logs backend
echo -e "${BLUE}📋 Étape 5: Analyse des logs backend${NC}"
echo "----------------------------------------------"
echo "Recent backend logs (CSV/Booking/Error related):"
tail -100 "$BACKEND_LOG" | grep -i "csv\|booking\|error\|email\|upload\|s3" | tail -30
echo ""
# Étape 6: Vérifier le résultat
echo "=========================================="
if [ "$HTTP_STATUS" = "201" ] || [ "$HTTP_STATUS" = "200" ]; then
echo -e "${GREEN}✅ SUCCESS: Booking created successfully!${NC}"
# Extract booking ID
BOOKING_ID=$(echo "$RESPONSE_BODY" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
echo "Booking ID: $BOOKING_ID"
echo ""
echo "Check:"
echo "1. Mailtrap inbox: https://mailtrap.io/inboxes"
echo "2. Frontend bookings page: http://localhost:3000/dashboard/bookings"
elif [ "$HTTP_STATUS" = "400" ]; then
echo -e "${RED}❌ FAILED: Bad Request (400)${NC}"
echo "Possible issues:"
echo " - Missing required fields"
echo " - Invalid data format"
echo " - Document validation failed"
elif [ "$HTTP_STATUS" = "401" ]; then
echo -e "${RED}❌ FAILED: Unauthorized (401)${NC}"
echo "Possible issues:"
echo " - JWT token expired"
echo " - Invalid credentials"
elif [ "$HTTP_STATUS" = "500" ]; then
echo -e "${RED}❌ FAILED: Internal Server Error (500)${NC}"
echo "Possible issues:"
echo " - S3/MinIO connection failed"
echo " - Database error"
echo " - Email sending failed (check backend logs)"
else
echo -e "${RED}❌ FAILED: Unknown error (HTTP $HTTP_STATUS)${NC}"
fi
echo "=========================================="
echo ""
echo "📄 Full backend logs available at: $BACKEND_LOG"
echo ""