import os import requests def _supabase_headers(): key = os.getenv('SERVICE_ROLE_KEY') or os.getenv('ANON_KEY') assert key, 'SERVICE_ROLE_KEY or ANON_KEY must be set for Supabase integration tests' return { 'apikey': key, 'Authorization': f'Bearer {key}', 'Prefer': 'count=exact', } def _rest_count(table: str) -> int: supabase_url = os.getenv('SUPABASE_URL') assert supabase_url, 'SUPABASE_URL must be set' response = requests.get( f'{supabase_url.rstrip("/")}/rest/v1/{table}', headers=_supabase_headers(), params={'select': 'id'}, timeout=15, ) assert response.status_code in (200, 206), response.text[:500] content_range = response.headers.get('content-range', '') assert '/' in content_range, f'missing exact content-range count for {table}: {content_range!r}' return int(content_range.rsplit('/', 1)[1]) def test_dev_environment_points_at_dev_supabase(): assert os.getenv('SUPABASE_URL') == 'http://192.168.0.94:8000' def test_dev_api_health_endpoint_is_healthy(): health_url = os.getenv('API_HEALTH_URL', 'http://192.168.0.64:18000/health') response = requests.get(health_url, timeout=15) assert response.status_code == 200 payload = response.json() assert payload['status'] == 'healthy' assert payload['services']['supabase']['status'] == 'healthy' assert payload['services']['redis']['status'] == 'healthy' def test_supabase_dev_seed_core_counts(): assert _rest_count('profiles') == 21 assert _rest_count('institute_memberships') == 21 assert _rest_count('institutes') == 2 def test_supabase_dev_seed_timetable_counts(): assert _rest_count('classes') == 17 assert _rest_count('taught_lessons') == 1462