150 lines
4.4 KiB
Bash
150 lines
4.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
echo "========================================="
|
||
|
|
echo "DEEP DEBUGGING - TechZone Admin Dashboard"
|
||
|
|
echo "========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 1: Backend health
|
||
|
|
echo "1. Backend Health Check..."
|
||
|
|
HEALTH=$(curl -s http://localhost:8181/api/)
|
||
|
|
if echo "$HEALTH" | grep -q "TechZone API is running"; then
|
||
|
|
echo "✅ Backend is responding"
|
||
|
|
else
|
||
|
|
echo "❌ Backend health check failed"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 2: Admin authentication
|
||
|
|
echo "2. Testing Admin Authentication..."
|
||
|
|
LOGIN=$(curl -s -X POST http://localhost:8181/api/auth/login \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"email":"admin@techzone.com","password":"admin123"}')
|
||
|
|
|
||
|
|
if echo "$LOGIN" | grep -q "access_token"; then
|
||
|
|
echo "✅ Admin login successful"
|
||
|
|
TOKEN=$(echo $LOGIN | python3 -c "import sys, json; print(json.load(sys.stdin)['access_token'])")
|
||
|
|
else
|
||
|
|
echo "❌ Admin login failed"
|
||
|
|
echo "Response: $LOGIN"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 3: Dashboard API call
|
||
|
|
echo "3. Testing Dashboard Endpoint..."
|
||
|
|
DASHBOARD=$(curl -s -w "\nHTTP_CODE:%{http_code}" \
|
||
|
|
http://localhost:8181/api/admin/dashboard \
|
||
|
|
-H "Authorization: Bearer $TOKEN")
|
||
|
|
|
||
|
|
HTTP_CODE=$(echo "$DASHBOARD" | grep "HTTP_CODE:" | cut -d: -f2)
|
||
|
|
RESPONSE=$(echo "$DASHBOARD" | sed '/HTTP_CODE:/d')
|
||
|
|
|
||
|
|
echo "HTTP Status: $HTTP_CODE"
|
||
|
|
|
||
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
||
|
|
echo "✅ Dashboard API returned 200 OK"
|
||
|
|
|
||
|
|
# Validate response structure
|
||
|
|
echo "$RESPONSE" | python3 << 'PYEOF'
|
||
|
|
import sys, json
|
||
|
|
|
||
|
|
try:
|
||
|
|
data = json.load(sys.stdin)
|
||
|
|
|
||
|
|
# Check required fields
|
||
|
|
assert "stats" in data, "Missing 'stats' field"
|
||
|
|
assert "low_stock_products" in data, "Missing 'low_stock_products' field"
|
||
|
|
assert "recent_orders" in data, "Missing 'recent_orders' field"
|
||
|
|
|
||
|
|
# Check stats structure
|
||
|
|
stats = data["stats"]
|
||
|
|
required_stats = [
|
||
|
|
"total_products", "total_services", "total_users", "total_orders",
|
||
|
|
"total_revenue", "monthly_revenue", "today_orders", "today_revenue",
|
||
|
|
"pending_bookings"
|
||
|
|
]
|
||
|
|
|
||
|
|
for stat in required_stats:
|
||
|
|
assert stat in stats, f"Missing stat: {stat}"
|
||
|
|
assert isinstance(stats[stat], (int, float)), f"Invalid type for {stat}"
|
||
|
|
|
||
|
|
print("✅ Response structure is valid")
|
||
|
|
print(f" Stats fields: {len(stats)}")
|
||
|
|
print(f" Low stock products: {len(data['low_stock_products'])}")
|
||
|
|
print(f" Recent orders: {len(data['recent_orders'])}")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"❌ Response validation failed: {e}")
|
||
|
|
sys.exit(1)
|
||
|
|
PYEOF
|
||
|
|
|
||
|
|
else
|
||
|
|
echo "❌ Dashboard API failed with status $HTTP_CODE"
|
||
|
|
echo "Response: $RESPONSE"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 4: CORS headers
|
||
|
|
echo "4. Testing CORS Headers..."
|
||
|
|
CORS=$(curl -s -I -H "Origin: http://localhost:5300" \
|
||
|
|
-H "Authorization: Bearer $TOKEN" \
|
||
|
|
http://localhost:8181/api/admin/dashboard | grep -i "access-control")
|
||
|
|
|
||
|
|
if [ -n "$CORS" ]; then
|
||
|
|
echo "✅ CORS headers present:"
|
||
|
|
echo "$CORS"
|
||
|
|
else
|
||
|
|
echo "⚠️ No CORS headers found (may cause browser issues)"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 5: Frontend connectivity
|
||
|
|
echo "5. Testing Frontend Server..."
|
||
|
|
FRONTEND=$(curl -s -I http://localhost:5300 | head -1)
|
||
|
|
if echo "$FRONTEND" | grep -q "200 OK"; then
|
||
|
|
echo "✅ Frontend is serving"
|
||
|
|
else
|
||
|
|
echo "❌ Frontend not responding properly"
|
||
|
|
echo "Response: $FRONTEND"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 6: Token expiry check
|
||
|
|
echo "6. Checking Token Validity..."
|
||
|
|
TOKEN_INFO=$(echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null)
|
||
|
|
if [ $? -eq 0 ]; then
|
||
|
|
echo "✅ Token is properly formatted JWT"
|
||
|
|
echo "$TOKEN_INFO" | python3 -c "
|
||
|
|
import sys, json
|
||
|
|
try:
|
||
|
|
data = json.load(sys.stdin)
|
||
|
|
exp = data.get('exp', 'N/A')
|
||
|
|
sub = data.get('sub', 'N/A')
|
||
|
|
print(f' Subject: {sub}')
|
||
|
|
print(f' Expires: {exp}')
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
" 2>/dev/null || echo " (Token payload details unavailable)"
|
||
|
|
else
|
||
|
|
echo "⚠️ Token format check failed"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Test 7: Database connectivity
|
||
|
|
echo "7. Testing Database Operations..."
|
||
|
|
PRODUCTS=$(curl -s http://localhost:8181/api/products -H "Authorization: Bearer $TOKEN")
|
||
|
|
if echo "$PRODUCTS" | python3 -c "import sys, json; len(json.load(sys.stdin))" >/dev/null 2>&1; then
|
||
|
|
PRODUCT_COUNT=$(echo "$PRODUCTS" | python3 -c "import sys, json; print(len(json.load(sys.stdin)))")
|
||
|
|
echo "✅ Database queries working (${PRODUCT_COUNT} products)"
|
||
|
|
else
|
||
|
|
echo "❌ Database query failed"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "========================================="
|
||
|
|
echo "✅ DEEP DEBUG COMPLETE - No critical issues found"
|
||
|
|
echo "========================================="
|