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()