Files
nfoguard/test_end_to_end.py
T
2025-09-09 08:50:21 -04:00

150 lines
5.3 KiB
Python

#!/usr/bin/env python3
"""
End-to-end testing script for NFOGuard workflow
Tests the complete flow: Database -> Manual Scan -> NFO Creation
"""
import os
import sys
import requests
import time
from pathlib import Path
def test_server_health():
"""Test if the server is running and healthy"""
try:
response = requests.get("http://localhost:8080/health", timeout=10)
if response.status_code == 200:
health_data = response.json()
print(f"✅ Server is healthy: {health_data['status']}")
print(f" Version: {health_data['version']}")
print(f" Database: {health_data['database_status']}")
if health_data.get('radarr_database'):
radarr_status = health_data['radarr_database']['status']
print(f" Radarr DB: {radarr_status}")
return True
else:
print(f"❌ Server health check failed: {response.status_code}")
return False
except Exception as e:
print(f"❌ Cannot connect to server: {e}")
return False
def test_database_performance():
"""Test the database performance endpoint"""
try:
response = requests.get("http://localhost:8080/debug/movie/tt1674782", timeout=10)
if response.status_code == 200:
debug_data = response.json()
if debug_data.get('detected_import_date'):
print(f"✅ Database query works: {debug_data['detected_import_date']}")
print(f" Source: {debug_data['import_source']}")
return True
else:
print(f"❌ No import date found for test movie")
return False
else:
print(f"❌ Debug endpoint failed: {response.status_code}")
return False
except Exception as e:
print(f"❌ Database test failed: {e}")
return False
def test_manual_scan():
"""Test the manual scan functionality"""
try:
print("🔍 Starting manual movie scan...")
response = requests.post(
"http://localhost:8080/manual/scan?scan_type=movies",
timeout=30
)
if response.status_code == 200:
scan_data = response.json()
print(f"✅ Manual scan started: {scan_data['message']}")
# Wait a bit for processing
print("⏳ Waiting for scan to process...")
time.sleep(10)
# Check batch status
batch_response = requests.get("http://localhost:8080/batch/status", timeout=10)
if batch_response.status_code == 200:
batch_data = batch_response.json()
print(f" Pending items: {batch_data['pending_count']}")
print(f" Processing items: {batch_data['processing_count']}")
return True
else:
print(f"❌ Manual scan failed: {response.status_code}")
return False
except Exception as e:
print(f"❌ Manual scan test failed: {e}")
return False
def test_stats_endpoint():
"""Test database stats"""
try:
response = requests.get("http://localhost:8080/stats", timeout=10)
if response.status_code == 200:
stats = response.json()
print(f"✅ Database stats:")
print(f" Movies: {stats.get('movie_count', 0)}")
print(f" TV Series: {stats.get('series_count', 0)}")
print(f" Episodes: {stats.get('episode_count', 0)}")
return True
else:
print(f"❌ Stats endpoint failed: {response.status_code}")
return False
except Exception as e:
print(f"❌ Stats test failed: {e}")
return False
def run_end_to_end_test():
"""Run complete end-to-end test suite"""
print("🎯 NFOGuard End-to-End Testing")
print("=" * 50)
tests = [
("Server Health", test_server_health),
("Database Performance", test_database_performance),
("Manual Scan", test_manual_scan),
("Database Stats", test_stats_endpoint)
]
passed = 0
failed = 0
for test_name, test_func in tests:
print(f"\n🧪 Running: {test_name}")
try:
if test_func():
passed += 1
print(f"{test_name} passed")
else:
failed += 1
print(f"{test_name} failed")
except Exception as e:
failed += 1
print(f"{test_name} crashed: {e}")
print(f"\n📊 Test Results:")
print(f" ✅ Passed: {passed}")
print(f" ❌ Failed: {failed}")
print(f" 📈 Success Rate: {passed}/{passed+failed} ({100*passed/(passed+failed):.1f}%)")
return failed == 0
if __name__ == "__main__":
success = run_end_to_end_test()
if success:
print("\n🎉 All end-to-end tests passed!")
print("\n📋 Next Steps:")
print("1. Run bulk update: python3 bulk_update_movies.py")
print("2. Test with real movie: curl http://localhost:8080/debug/movie/tt1674782")
print("3. Check NFO file creation in /media/Movies/movies/")
print("4. Verify file timestamps match import dates")
else:
print("\n💥 Some tests failed - check the logs above")
sys.exit(1)