Spaces:
Running
Running
File size: 4,839 Bytes
f331d5d 8de4931 f331d5d 8de4931 f331d5d 8de4931 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
import pytest
import os
import sys
import asyncio
from datetime import datetime
# Add src to path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from src.supabase_integration import AdvancedSupabaseIntegration
from src.security_system import AdvancedSecuritySystem
from src.monitoring_system import ComprehensiveMonitor
from src.ai_system import SaemsTunesAISystem
def pytest_configure(config):
"""Configure pytest with production settings"""
# Set production testing flags
os.environ['PYTEST_CURRENT_TEST'] = 'production'
# Verify required environment variables are set
required_env_vars = ['SUPABASE_URL', 'SUPABASE_ANON_KEY']
missing_vars = [var for var in required_env_vars if not os.getenv(var)]
if missing_vars:
pytest.exit(f"Missing required environment variables: {', '.join(missing_vars)}")
@pytest.fixture(scope="session")
def real_supabase_connection():
"""Real Supabase connection fixture for production testing"""
supabase_url = os.environ['SUPABASE_URL']
supabase_key = os.environ['SUPABASE_ANON_KEY']
# Create real Supabase integration
supabase = AdvancedSupabaseIntegration(
supabase_url=supabase_url,
supabase_key=supabase_key
)
# Verify connection
if not supabase.is_connected():
pytest.fail("Cannot establish connection to production Supabase database")
yield supabase
# Cleanup
supabase.clear_cache()
@pytest.fixture(scope="session")
def real_security_system():
"""Real security system fixture for production testing"""
security = AdvancedSecuritySystem()
yield security
# Cleanup security logs
security.security_log.clear()
@pytest.fixture(scope="session")
def real_monitoring_system():
"""Real monitoring system fixture for production testing"""
monitor = ComprehensiveMonitor(prometheus_port=8003)
yield monitor
# Stop monitoring
monitor.stop_monitoring()
@pytest.fixture(scope="session")
def real_ai_system(real_supabase_connection, real_security_system, real_monitoring_system):
"""Real AI system fixture with production dependencies"""
ai_system = SaemsTunesAISystem(
supabase_integration=real_supabase_connection,
security_system=real_security_system,
monitor=real_monitoring_system,
model_name="microsoft/Phi-3.5-mini-instruct",
model_repo="Thetima4/Phi-3.5-mini-instruct-Q4_K_M-GGUF",
model_file="Phi-3.5-mini-instruct-q4_k_m.gguf",
max_response_length=400,
temperature=0.7
)
yield ai_system
# Cleanup
ai_system.clear_cache()
@pytest.fixture(scope="function")
def production_test_user():
"""Fixture providing test user data for production tests"""
return {
"user_id": f"test_user_{datetime.now().strftime('%Y%m%d_%H%M%S')}",
"ip_address": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
@pytest.fixture(scope="function")
def sample_queries():
"""Fixture providing sample queries for testing"""
return [
"How do I create a playlist?",
"What music courses do you offer?",
"How can I upload my music?",
"Tell me about guitar lessons",
"What's included in premium?",
"How do I find new artists?",
"Can I download music for offline?",
"What music genres are available?",
"How do music recommendations work?",
"Can I collaborate with other artists?"
]
@pytest.fixture(scope="session", autouse=True)
def verify_production_environment():
"""Verify we're configured for production testing"""
# Check for production environment indicators
supabase_url = os.getenv('SUPABASE_URL', '')
if 'supabase.co' not in supabase_url:
pytest.fail("Not configured for production Supabase instance")
# Verify we have proper credentials
supabase_key = os.getenv('SUPABASE_ANON_KEY', '')
if not supabase_key.startswith('eyJ'):
pytest.fail("Invalid Supabase key format")
print("\n" + "="*60)
print("PRODUCTION TEST ENVIRONMENT VERIFIED")
print(f"Supabase URL: {supabase_url}")
print(f"Test Timestamp: {datetime.now().isoformat()}")
print("="*60 + "\n")
@pytest.fixture(scope="function")
def performance_thresholds():
"""Fixture defining performance thresholds for production tests"""
return {
"supabase_connection_ms": 1000,
"context_generation_ms": 3000,
"ai_response_ms": 10000,
"security_check_ms": 100,
"cache_response_ms": 50
}
@pytest.fixture(scope="session")
def event_loop():
"""Create event loop for async tests"""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close() |