201 lines
6.0 KiB
Bash
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 ""
|