Files
chat/tests/test_mobile_endpoints copy.py
Andrey K. Choi 3050e084fa
All checks were successful
continuous-integration/drone/push Build is passing
main functions commit
2025-10-19 19:50:00 +09:00

164 lines
6.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()