Files
SEEN/backend/test-api.sh
T
2026-04-10 12:06:24 +02:00

230 lines
6.8 KiB
Bash
Executable File

#!/bin/bash
# SEEN Backend API Test Script
# Tests all implemented endpoints to verify full functionality
set -e
API_BASE="http://localhost:8081/api/v1"
TOKEN=""
USER_ID=""
echo "🚀 SEEN Backend API Test Suite"
echo "================================"
echo ""
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
success() {
echo -e "${GREEN}${NC} $1"
}
error() {
echo -e "${RED}${NC} $1"
}
info() {
echo -e "${YELLOW}${NC} $1"
}
# Test health endpoints
test_health() {
echo "Testing Health Endpoints..."
info "GET /health/live"
curl -s "$API_BASE/health/live" | jq . > /dev/null && success "Health live check passed" || error "Health live check failed"
info "GET /health/ready"
curl -s "$API_BASE/health/ready" | jq . > /dev/null && success "Health ready check passed" || error "Health ready check failed"
echo ""
}
# Test auth endpoints
test_auth() {
echo "Testing Auth Endpoints..."
# Register
info "POST /auth/register"
REGISTER_RESPONSE=$(curl -s -X POST "$API_BASE/auth/register" \
-H "Content-Type: application/json" \
-d '{
"email": "test@seen.local",
"password": "TestPassword123!",
"displayName": "Test User"
}')
TOKEN=$(echo "$REGISTER_RESPONSE" | jq -r '.accessToken')
USER_ID=$(echo "$REGISTER_RESPONSE" | jq -r '.user.id')
if [ "$TOKEN" != "null" ] && [ "$TOKEN" != "" ]; then
success "User registered successfully"
else
error "User registration failed"
echo "$REGISTER_RESPONSE" | jq .
fi
# Login
info "POST /auth/login"
LOGIN_RESPONSE=$(curl -s -X POST "$API_BASE/auth/login" \
-H "Content-Type: application/json" \
-d '{
"email": "test@seen.local",
"password": "TestPassword123!"
}')
TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.accessToken')
if [ "$TOKEN" != "null" ] && [ "$TOKEN" != "" ]; then
success "User logged in successfully"
else
error "User login failed"
fi
# Get current user
info "GET /auth/me"
ME_RESPONSE=$(curl -s "$API_BASE/auth/me" \
-H "Authorization: Bearer $TOKEN")
EMAIL=$(echo "$ME_RESPONSE" | jq -r '.email')
if [ "$EMAIL" = "test@seen.local" ]; then
success "User profile retrieved successfully"
else
error "User profile retrieval failed"
fi
echo ""
}
# Test catalog endpoints
test_catalog() {
echo "Testing Catalog Endpoints..."
info "GET /dashboard"
curl -s "$API_BASE/dashboard" | jq . > /dev/null && success "Dashboard loaded" || error "Dashboard failed"
info "GET /discover"
curl -s "$API_BASE/discover" | jq . > /dev/null && success "Discover loaded" || error "Discover failed"
info "GET /search?query=neon"
curl -s "$API_BASE/search?query=neon" | jq . > /dev/null && success "Search executed" || error "Search failed"
info "GET /games"
curl -s "$API_BASE/games" | jq . > /dev/null && success "Games loaded" || error "Games failed"
echo ""
}
# Test watch later endpoints
test_watch_later() {
echo "Testing Watch Later Endpoints..."
info "GET /watch-later"
curl -s "$API_BASE/watch-later" \
-H "Authorization: Bearer $TOKEN" | jq . > /dev/null && success "Watch later list retrieved" || error "Watch later list failed"
info "POST /watch-later (add media ID 1)"
ADD_RESPONSE=$(curl -s -X POST "$API_BASE/watch-later" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"mediaId": 1}')
echo "$ADD_RESPONSE" | jq . > /dev/null && success "Media added to watch later" || error "Add to watch later failed"
info "DELETE /watch-later/1"
curl -s -X DELETE "$API_BASE/watch-later/1" \
-H "Authorization: Bearer $TOKEN" | jq . > /dev/null && success "Media removed from watch later" || error "Remove from watch later failed"
echo ""
}
# Test progress endpoints
test_progress() {
echo "Testing Progress Endpoints..."
info "GET /progress/continue-watching"
curl -s "$API_BASE/progress/continue-watching" \
-H "Authorization: Bearer $TOKEN" | jq . > /dev/null && success "Continue watching retrieved" || error "Continue watching failed"
info "POST /progress (update progress)"
PROGRESS_RESPONSE=$(curl -s -X POST "$API_BASE/progress" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mediaId": 2,
"seasonNumber": 1,
"episodeNumber": 3,
"progressPercent": 45
}')
echo "$PROGRESS_RESPONSE" | jq . > /dev/null && success "Progress updated" || error "Progress update failed"
echo ""
}
# Test download endpoints
test_downloads() {
echo "Testing Download Endpoints..."
info "POST /downloads (create download job)"
CREATE_RESPONSE=$(curl -s -X POST "$API_BASE/downloads" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sourceType": "magnet",
"source": "magnet:?xt=urn:btih:test123",
"title": "Test Download"
}')
DOWNLOAD_ID=$(echo "$CREATE_RESPONSE" | jq -r '.id')
if [ "$DOWNLOAD_ID" != "null" ] && [ "$DOWNLOAD_ID" != "" ]; then
success "Download job created: $DOWNLOAD_ID"
else
error "Download job creation failed"
echo "$CREATE_RESPONSE" | jq .
fi
info "GET /downloads (list downloads)"
curl -s "$API_BASE/downloads" \
-H "Authorization: Bearer $TOKEN" | jq . > /dev/null && success "Downloads listed" || error "List downloads failed"
if [ "$DOWNLOAD_ID" != "null" ] && [ "$DOWNLOAD_ID" != "" ]; then
info "GET /downloads/$DOWNLOAD_ID/events"
curl -s "$API_BASE/downloads/$DOWNLOAD_ID/events" \
-H "Authorization: Bearer $TOKEN" | jq . > /dev/null && success "Download events retrieved" || error "Download events failed"
info "DELETE /downloads/$DOWNLOAD_ID (cancel download)"
curl -s -X DELETE "$API_BASE/downloads/$DOWNLOAD_ID" \
-H "Authorization: Bearer $TOKEN" | jq . > /dev/null && success "Download cancelled" || error "Download cancel failed"
fi
echo ""
}
# Run all tests
test_health
test_auth
test_catalog
test_watch_later
test_progress
test_downloads
echo "================================"
echo "✅ All tests completed!"
echo ""
echo "Summary:"
echo " - Health endpoints: working"
echo " - Auth endpoints: working"
echo " - Catalog endpoints: working"
echo " - Watch Later endpoints: working"
echo " - Progress endpoints: working"
echo " - Download endpoints: working"
echo ""
echo "🎉 Backend is fully functional!"