This commit is contained in:
186
tests/test_emergency_event_details.py
Normal file
186
tests/test_emergency_event_details.py
Normal file
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Тест для нового эндпоинта получения детальной информации о событии
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
# Конфигурация
|
||||
API_BASE = "http://localhost:8002" # Emergency service
|
||||
USER_SERVICE_BASE = "http://localhost:8001" # User service
|
||||
|
||||
def authenticate_user(username="testuser", password="testpass"):
|
||||
"""Получаем JWT токен для авторизации"""
|
||||
try:
|
||||
auth_data = {
|
||||
"username": username,
|
||||
"password": password
|
||||
}
|
||||
response = requests.post(f"{USER_SERVICE_BASE}/auth/login", data=auth_data)
|
||||
|
||||
if response.status_code == 200:
|
||||
token_data = response.json()
|
||||
return token_data.get("access_token")
|
||||
else:
|
||||
print(f"Authentication failed: {response.status_code}")
|
||||
print("Response:", response.text)
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
print(f"Authentication error: {e}")
|
||||
return None
|
||||
|
||||
def create_test_emergency():
|
||||
"""Создаем тестовое событие для проверки"""
|
||||
token = authenticate_user()
|
||||
if not token:
|
||||
return None
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
emergency_data = {
|
||||
"latitude": 55.7558,
|
||||
"longitude": 37.6176,
|
||||
"alert_type": "general",
|
||||
"message": "Test emergency for event details API",
|
||||
"address": "Test Address, Moscow",
|
||||
"contact_emergency_services": True,
|
||||
"notify_emergency_contacts": True
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
f"{API_BASE}/api/v1/emergency/alerts",
|
||||
headers=headers,
|
||||
json=emergency_data
|
||||
)
|
||||
|
||||
if response.status_code == 201:
|
||||
alert = response.json()
|
||||
event_id = alert.get("id")
|
||||
print(f"✅ Created test emergency event with ID: {event_id}")
|
||||
return event_id, token
|
||||
else:
|
||||
print(f"❌ Failed to create emergency: {response.status_code}")
|
||||
print("Response:", response.text)
|
||||
return None, None
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error creating emergency: {e}")
|
||||
return None, None
|
||||
|
||||
def test_event_details(event_id, token):
|
||||
"""Тестируем получение детальной информации о событии"""
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
print(f"\n🔍 Testing event details for event_id: {event_id}")
|
||||
|
||||
try:
|
||||
# Тестируем полную детальную информацию
|
||||
response = requests.get(
|
||||
f"{API_BASE}/api/v1/emergency/events/{event_id}",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
event_details = response.json()
|
||||
print("✅ Full event details retrieved successfully!")
|
||||
print(f"Event ID: {event_details.get('id')}")
|
||||
print(f"Alert Type: {event_details.get('alert_type')}")
|
||||
print(f"Status: {event_details.get('status')}")
|
||||
print(f"Message: {event_details.get('message')}")
|
||||
print(f"Address: {event_details.get('address')}")
|
||||
print(f"User: {event_details.get('user', {}).get('username')}")
|
||||
print(f"Responses count: {len(event_details.get('responses', []))}")
|
||||
print(f"Notifications sent: {event_details.get('notifications_sent', 0)}")
|
||||
|
||||
else:
|
||||
print(f"❌ Failed to get event details: {response.status_code}")
|
||||
print("Response:", response.text)
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error getting event details: {e}")
|
||||
|
||||
try:
|
||||
# Тестируем краткую информацию
|
||||
response = requests.get(
|
||||
f"{API_BASE}/api/v1/emergency/events/{event_id}/brief",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
brief_info = response.json()
|
||||
print("\n✅ Brief event info retrieved successfully!")
|
||||
print(f"Event ID: {brief_info.get('id')}")
|
||||
print(f"Alert Type: {brief_info.get('alert_type')}")
|
||||
print(f"Status: {brief_info.get('status')}")
|
||||
|
||||
else:
|
||||
print(f"\n❌ Failed to get brief event info: {response.status_code}")
|
||||
print("Response:", response.text)
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ Error getting brief event info: {e}")
|
||||
|
||||
def respond_to_emergency(event_id, token):
|
||||
"""Добавляем ответ к событию для проверки responses"""
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
response_data = {
|
||||
"response_type": "help_on_way",
|
||||
"message": "Test response from API test",
|
||||
"eta_minutes": 10
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
f"{API_BASE}/api/v1/emergency/events/{event_id}/respond",
|
||||
headers=headers,
|
||||
json=response_data
|
||||
)
|
||||
|
||||
if response.status_code == 201:
|
||||
print(f"✅ Added response to event {event_id}")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ Failed to add response: {response.status_code}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error adding response: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
print("🚨 Testing Emergency Event Details API")
|
||||
print("=" * 50)
|
||||
|
||||
# Создаем тестовое событие
|
||||
event_id, token = create_test_emergency()
|
||||
if not event_id or not token:
|
||||
print("❌ Failed to create test emergency. Exiting.")
|
||||
return
|
||||
|
||||
# Добавляем ответ к событию
|
||||
respond_to_emergency(event_id, token)
|
||||
|
||||
# Тестируем получение детальной информации
|
||||
test_event_details(event_id, token)
|
||||
|
||||
print("\n" + "=" * 50)
|
||||
print("🎯 Test completed!")
|
||||
print(f"Event ID for manual testing: {event_id}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user