#!/usr/bin/env python3 """Test script for Stability AI integration.""" import asyncio import os import sys from pathlib import Path # Add backend directory to path backend_dir = Path(__file__).parent sys.path.insert(0, str(backend_dir)) from dotenv import load_dotenv load_dotenv() # Test imports def test_imports(): """Test that all required modules can be imported.""" print("๐Ÿ” Testing imports...") try: from models.stability_models import ( StableImageUltraRequest, StableImageCoreRequest, StableSD3Request, OutputFormat, AspectRatio, StylePreset ) print("โœ… Stability models imported successfully") except ImportError as e: print(f"โŒ Failed to import stability models: {e}") return False try: from services.stability_service import StabilityAIService, get_stability_service print("โœ… Stability service imported successfully") except ImportError as e: print(f"โŒ Failed to import stability service: {e}") return False try: from routers.stability import router as stability_router from routers.stability_advanced import router as stability_advanced_router from routers.stability_admin import router as stability_admin_router print("โœ… Stability routers imported successfully") except ImportError as e: print(f"โŒ Failed to import stability routers: {e}") return False try: from middleware.stability_middleware import ( RateLimitMiddleware, MonitoringMiddleware, CachingMiddleware ) print("โœ… Stability middleware imported successfully") except ImportError as e: print(f"โŒ Failed to import stability middleware: {e}") return False try: from utils.stability_utils import ( ImageValidator, AudioValidator, PromptOptimizer ) print("โœ… Stability utilities imported successfully") except ImportError as e: print(f"โŒ Failed to import stability utilities: {e}") return False try: from config.stability_config import ( get_stability_config, MODEL_PRICING, IMAGE_LIMITS ) print("โœ… Stability config imported successfully") except ImportError as e: print(f"โŒ Failed to import stability config: {e}") return False return True def test_configuration(): """Test configuration setup.""" print("\n๐Ÿ”ง Testing configuration...") try: from config.stability_config import get_stability_config # Test with environment variable if os.getenv("STABILITY_API_KEY"): config = get_stability_config() print("โœ… Configuration loaded from environment") print(f" - API Key: {'Set' if config.api_key else 'Not set'}") print(f" - Base URL: {config.base_url}") print(f" - Timeout: {config.timeout}s") return True else: print("โš ๏ธ STABILITY_API_KEY not set in environment") print(" - This is expected if you haven't configured it yet") return True except Exception as e: print(f"โŒ Configuration test failed: {e}") return False def test_models(): """Test Pydantic model validation.""" print("\n๐Ÿ“‹ Testing Pydantic models...") try: from models.stability_models import ( StableImageUltraRequest, StableImageCoreRequest, OutpaintRequest, InpaintRequest ) # Test valid model creation ultra_request = StableImageUltraRequest( prompt="A beautiful landscape", aspect_ratio="16:9", seed=42 ) print("โœ… StableImageUltraRequest validation passed") # Test outpaint request outpaint_request = OutpaintRequest( left=100, right=200, output_format="webp" ) print("โœ… OutpaintRequest validation passed") # Test invalid model (should raise validation error) try: invalid_request = StableImageUltraRequest( prompt="", # Empty prompt should fail seed=5000000000 # Invalid seed ) print("โŒ Model validation failed - invalid data was accepted") return False except Exception: print("โœ… Model validation correctly rejected invalid data") return True except Exception as e: print(f"โŒ Model testing failed: {e}") return False async def test_service_creation(): """Test service creation and basic functionality.""" print("\n๐Ÿ”Œ Testing service creation...") try: from services.stability_service import StabilityAIService # Test service creation without API key (should fail) try: service = StabilityAIService() print("โŒ Service creation should have failed without API key") return False except ValueError: print("โœ… Service correctly requires API key") # Test service creation with API key service = StabilityAIService(api_key="test_key") print("โœ… Service created successfully with API key") # Test helper methods headers = service._get_headers() assert "Authorization" in headers print("โœ… Service helper methods work correctly") return True except Exception as e: print(f"โŒ Service creation test failed: {e}") return False def test_router_creation(): """Test router creation and endpoint registration.""" print("\n๐Ÿ›ฃ๏ธ Testing router creation...") try: from fastapi import FastAPI from routers.stability import router as stability_router from routers.stability_advanced import router as stability_advanced_router from routers.stability_admin import router as stability_admin_router # Create test app app = FastAPI() # Include routers app.include_router(stability_router) app.include_router(stability_advanced_router) app.include_router(stability_admin_router) print("โœ… Routers included successfully") # Check that routes are registered route_count = len(app.routes) print(f"โœ… {route_count} routes registered") # List some key routes stability_routes = [ route for route in app.routes if hasattr(route, 'path') and '/api/stability' in route.path ] print(f"โœ… {len(stability_routes)} Stability AI routes found") return True except Exception as e: print(f"โŒ Router creation test failed: {e}") return False def test_middleware(): """Test middleware functionality.""" print("\n๐Ÿ›ก๏ธ Testing middleware...") try: from middleware.stability_middleware import ( RateLimitMiddleware, MonitoringMiddleware, CachingMiddleware ) # Test middleware creation rate_limiter = RateLimitMiddleware() monitoring = MonitoringMiddleware() caching = CachingMiddleware() print("โœ… Middleware instances created successfully") # Test basic functionality stats = monitoring.get_stats() assert isinstance(stats, dict) print("โœ… Monitoring middleware functional") cache_stats = caching.get_cache_stats() assert isinstance(cache_stats, dict) print("โœ… Caching middleware functional") return True except Exception as e: print(f"โŒ Middleware test failed: {e}") return False async def run_all_tests(): """Run all tests.""" print("๐Ÿงช Running Stability AI Integration Tests") print("=" * 60) tests = [ ("Import Test", test_imports), ("Configuration Test", test_configuration), ("Model Validation Test", test_models), ("Service Creation Test", test_service_creation), ("Router Creation Test", test_router_creation), ("Middleware Test", test_middleware) ] results = {} for test_name, test_func in tests: try: if asyncio.iscoroutinefunction(test_func): result = await test_func() else: result = test_func() results[test_name] = result except Exception as e: print(f"โŒ {test_name} failed with exception: {e}") results[test_name] = False # Summary print("\n๐Ÿ“Š Test Summary:") print("=" * 30) passed = sum(results.values()) total = len(results) for test_name, result in results.items(): status = "โœ… PASSED" if result else "โŒ FAILED" print(f"{test_name}: {status}") print(f"\nOverall: {passed}/{total} tests passed") if passed == total: print("\n๐ŸŽ‰ All tests passed! Stability AI integration is ready.") print("\n๐Ÿ“š Documentation available at:") print(" - Integration Guide: backend/docs/STABILITY_AI_INTEGRATION.md") print(" - API Docs: http://localhost:8000/docs (when server is running)") print("\n๐Ÿš€ To start using:") print(" 1. Set your STABILITY_API_KEY in .env file") print(" 2. Run: python app.py") print(" 3. Visit: http://localhost:8000/docs") else: print(f"\nโš ๏ธ {total - passed} tests failed. Please address the issues above.") return False return True if __name__ == "__main__": success = asyncio.run(run_all_tests()) sys.exit(0 if success else 1)