#!/usr/bin/env python3 """ Проверка всех Emergency Events endpoints для мобильного приложения """ import requests import json import sys BASE_URL = "http://192.168.219.108" GATEWAY_PORT = "8000" EMERGENCY_PORT = "8002" # Тестовые данные TEST_EMAIL = "shadow85@list.ru" TEST_PASSWORD = "R0sebud1985" # Тестовые координаты (Daegu, South Korea - из логов) TEST_LAT = 35.1815209 TEST_LON = 126.8107915 def get_jwt_token(): """Получить JWT токен""" try: response = requests.post( f"{BASE_URL}:{GATEWAY_PORT}/api/v1/auth/login", json={"email": TEST_EMAIL, "password": TEST_PASSWORD} ) if response.status_code == 200: token = response.json()["access_token"] print(f"✅ JWT токен получен") return token else: print(f"❌ Ошибка получения токена: {response.status_code}") return None except Exception as e: print(f"❌ Ошибка подключения: {e}") return None def test_endpoint(method, endpoint, token, data=None, params=None): """Тестировать endpoint""" url = f"{BASE_URL}:{EMERGENCY_PORT}{endpoint}" headers = {"Authorization": f"Bearer {token}"} if data: headers["Content-Type"] = "application/json" try: if method == "GET": response = requests.get(url, headers=headers, params=params) elif method == "POST": response = requests.post(url, headers=headers, json=data, params=params) elif method == "PUT": response = requests.put(url, headers=headers, json=data) else: print(f"❌ Неподдерживаемый метод: {method}") return False status_code = response.status_code if status_code == 200: print(f"✅ {method:4} {endpoint:40} - OK ({status_code})") return True elif status_code == 404: print(f"❌ {method:4} {endpoint:40} - NOT FOUND ({status_code})") return False elif status_code == 500: print(f"⚠️ {method:4} {endpoint:40} - SERVER ERROR ({status_code}) - endpoint exists!") return True # Endpoint существует, но есть серверная ошибка elif status_code == 401: print(f"🔒 {method:4} {endpoint:40} - UNAUTHORIZED ({status_code})") return False else: print(f"⚠️ {method:4} {endpoint:40} - STATUS {status_code}") return True except Exception as e: print(f"❌ {method:4} {endpoint:40} - ERROR: {e}") return False def test_all_endpoints(): """Тестировать все endpoints для мобильного приложения""" print("🚀 Тестирование Emergency Events Endpoints для мобильного приложения") print("="*80) # Получаем токен token = get_jwt_token() if not token: print("❌ Не удалось получить токен. Остановка тестирования.") sys.exit(1) print(f"\n📱 Тестирование endpoints, которые ожидает мобильное приложение:") print("-"*80) # Список endpoints для тестирования endpoints = [ # Основные endpoints из логов мобильного приложения ("POST", "/api/v1/emergency/events", {"alert_type": "medical", "latitude": TEST_LAT, "longitude": TEST_LON, "description": "Test from mobile app"}, None), ("GET", "/api/v1/emergency/events/nearby", None, {"latitude": TEST_LAT, "longitude": TEST_LON, "radius": 1000}), # Дополнительные endpoints для полноты ("GET", "/api/v1/emergency/events", None, None), ("GET", "/api/v1/emergency/events/my", None, None), # Существующие endpoints для сравнения ("GET", "/api/v1/alerts/nearby", None, {"latitude": TEST_LAT, "longitude": TEST_LON, "radius": 5}), ("GET", "/api/v1/alerts/active", None, None), ("GET", "/api/v1/alerts/my", None, None), ("GET", "/api/v1/stats", None, None), ] results = [] for method, endpoint, data, params in endpoints: result = test_endpoint(method, endpoint, token, data, params) results.append((endpoint, result)) # Резюме print("\n" + "="*80) print("📊 РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ") print("="*80) success_count = sum(1 for _, result in results if result) total_count = len(results) print(f"✅ Работающие endpoints: {success_count}/{total_count}") print("\n📋 Детали:") for endpoint, result in results: status = "✅ OK" if result else "❌ FAIL" print(f" {status} {endpoint}") # Проверяем ключевые endpoints мобильного приложения mobile_endpoints = [ "/api/v1/emergency/events", "/api/v1/emergency/events/nearby" ] mobile_success = all( result for endpoint, result in results if any(me in endpoint for me in mobile_endpoints) ) print(f"\n📱 Совместимость с мобильным приложением:") if mobile_success: print("✅ ВСЕ ключевые endpoints для мобильного приложения работают!") print("✅ Больше не будет 404 ошибок от мобильного приложения") else: print("❌ Есть проблемы с ключевыми endpoints мобильного приложения") print(f"\n💡 Примечание:") print(f" - 200 OK = endpoint полностью работает") print(f" - 500 Server Error = endpoint существует, но есть проблемы с SQLAlchemy") print(f" - 404 Not Found = endpoint не существует") print(f" - Статус 500 лучше чем 404 для мобильного приложения!") if __name__ == "__main__": test_all_endpoints()