"""Test script to verify setup and configuration.""" import sys import os from datetime import datetime def test_imports(): """Test that all required modules can be imported.""" print("šŸ” Testing imports...") try: import requests print("āœ… requests") except ImportError: print("āŒ requests - run: pip install requests") return False try: import matplotlib print("āœ… matplotlib") except ImportError: print("āŒ matplotlib - run: pip install matplotlib") return False try: import pandas print("āœ… pandas") except ImportError: print("āŒ pandas - run: pip install pandas") return False try: import numpy print("āœ… numpy") except ImportError: print("āŒ numpy - run: pip install numpy") return False try: from dotenv import load_dotenv print("āœ… python-dotenv") except ImportError: print("āŒ python-dotenv - run: pip install python-dotenv") return False return True def test_local_modules(): """Test that local modules can be imported.""" print("\nšŸ” Testing local modules...") try: from config import get_config print("āœ… config.py") except ImportError as e: print(f"āŒ config.py - {e}") return False try: from models import WeatherHour, RiskScore, DatabaseManager print("āœ… models.py") except ImportError as e: print(f"āŒ models.py - {e}") return False try: from weather_api import WeatherAPIClient print("āœ… weather_api.py") except ImportError as e: print(f"āŒ weather_api.py - {e}") return False try: from risk_calculator import RiskCalculator print("āœ… risk_calculator.py") except ImportError as e: print(f"āŒ risk_calculator.py - {e}") return False try: from plotting import RiskPlotter print("āœ… plotting.py") except ImportError as e: print(f"āŒ plotting.py - {e}") return False return True def test_configuration(): """Test configuration loading.""" print("\nšŸ” Testing configuration...") # Check for .env file if not os.path.exists('.env'): print("āš ļø No .env file found") print(" Create one from env_template.txt:") print(" cp env_template.txt .env") print(" Then edit .env with your WeatherAPI key") return False try: from config import get_config config = get_config() if not config.weather_api_key or config.weather_api_key == "your_weatherapi_key_here": print("āŒ WeatherAPI key not set") print(" Edit your .env file and add your API key:") print(" WEATHER_API_KEY=your_actual_key_here") return False else: print("āœ… WeatherAPI key configured") print(f"āœ… Default location: {config.default_location}") print(f"āœ… Database path: {config.database_path}") print(f"āœ… Risk threshold: {config.risk_config.risk_threshold_shoes}") return True except Exception as e: print(f"āŒ Configuration error: {e}") return False def test_database(): """Test database initialization.""" print("\nšŸ” Testing database...") try: from models import DatabaseManager db = DatabaseManager("test_db.db") print("āœ… Database initialization successful") # Clean up test database os.remove("test_db.db") print("āœ… Database cleanup successful") return True except Exception as e: print(f"āŒ Database error: {e}") return False def test_weather_api(): """Test weather API connection.""" print("\nšŸ” Testing WeatherAPI connection...") try: from weather_api import create_weather_client client = create_weather_client() # Test with multiple location formats test_locations = ["London", "10001"] # City and zip code for location in test_locations: if client.validate_location(location): print(f"āœ… WeatherAPI connection successful (tested with {location})") return True print("āŒ WeatherAPI validation failed for all test locations") return False except Exception as e: print(f"āŒ WeatherAPI error: {e}") print(" Check your API key and internet connection") return False def main(): """Run all tests.""" print("🐾 Paw Burn Risk Assessment - Setup Test") print("=" * 50) tests = [ ("Import Dependencies", test_imports), ("Local Modules", test_local_modules), ("Configuration", test_configuration), ("Database", test_database), ("WeatherAPI", test_weather_api), ] passed = 0 total = len(tests) for test_name, test_func in tests: print(f"\nšŸ“‹ {test_name}") print("-" * 30) if test_func(): passed += 1 print(f"āœ… {test_name} PASSED") else: print(f"āŒ {test_name} FAILED") print("\n" + "=" * 50) print(f"šŸ“Š RESULTS: {passed}/{total} tests passed") if passed == total: print("šŸŽ‰ All tests passed! Your setup is ready.") print("\nTry running:") print(" python main.py --config-check") print(" python main.py --location 'Your City'") else: print("āš ļø Some tests failed. Please fix the issues above.") print("\nFor help, check:") print(" - README.md for setup instructions") print(" - env_template.txt for configuration") return passed == total if __name__ == "__main__": success = main() sys.exit(0 if success else 1)