Files
chat/tests/test_mobile_endpoints.py
Andrew K. Choi 537e7b363f
All checks were successful
continuous-integration/drone/push Build is passing
main commit
2025-10-16 16:30:25 +09:00

171 lines
6.8 KiB
Python
Raw 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 python
import json
import requests
import sys
import traceback
from datetime import date
# API Gateway endpoint
BASE_URL = "http://localhost:8004"
# Токен для аутентификации - замените на действующий токен
AUTH_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyOSIsImVtYWlsIjoidGVzdDJAZXhhbXBsZS5jb20iLCJleHAiOjE3NTg4NjY5ODJ9._AXkBLeMI4zxC9shFUS3744miuyO8CDnJD1X1AqbLsw"
def test_health():
"""Проверка доступности сервиса"""
try:
response = requests.get(f"{BASE_URL}/health")
print(f"Статус сервиса: {response.status_code}")
print(f"Ответ: {response.text}")
return response.status_code == 200
except Exception as e:
print(f"Ошибка при проверке сервиса: {e}")
return False
def test_authenticated_endpoint():
"""Тестирование аутентифицированного эндпоинта для мобильного приложения"""
print("\n=== Тестирование аутентифицированного эндпоинта ===")
# Данные в формате мобильного приложения
mobile_data = {
"date": date.today().isoformat(),
"type": "MENSTRUATION",
"flow_intensity": 3,
"symptoms": ["CRAMPS", "HEADACHE"],
"mood": "NORMAL",
"notes": "Запись из мобильного приложения через аутентифицированный эндпоинт"
}
print(f"Отправляемые данные: {json.dumps(mobile_data, indent=2)}")
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {AUTH_TOKEN}"
}
try:
response = requests.post(
f"{BASE_URL}/api/v1/calendar/entries/mobile",
headers=headers,
json=mobile_data,
timeout=10
)
print(f"Статус ответа: {response.status_code}")
if response.status_code >= 200 and response.status_code < 300:
print(f"Тело успешного ответа: {json.dumps(response.json(), indent=2)}")
return True
else:
print("Ошибка при создании записи через аутентифицированный эндпоинт")
try:
print(f"Тело ответа с ошибкой: {json.dumps(response.json(), indent=2)}")
except:
print(f"Тело ответа не является JSON: {response.text}")
return False
except Exception as e:
print(f"Ошибка при выполнении запроса: {e}")
traceback.print_exc()
return False
def test_debug_endpoint():
"""Тестирование отладочного эндпоинта для мобильного приложения (без аутентификации)"""
print("\n=== Тестирование отладочного эндпоинта (без аутентификации) ===")
# Данные в формате мобильного приложения
mobile_data = {
"date": date.today().isoformat(),
"type": "MENSTRUATION",
"flow_intensity": 4,
"symptoms": ["BACKACHE", "BLOATING"],
"mood": "HAPPY",
"notes": "Запись из мобильного приложения через отладочный эндпоинт"
}
print(f"Отправляемые данные: {json.dumps(mobile_data, indent=2)}")
headers = {
"Content-Type": "application/json"
}
try:
response = requests.post(
f"{BASE_URL}/debug/mobile-entry",
headers=headers,
json=mobile_data,
timeout=10
)
print(f"Статус ответа: {response.status_code}")
if response.status_code >= 200 and response.status_code < 300:
print(f"Тело успешного ответа: {json.dumps(response.json(), indent=2)}")
return True
else:
print("Ошибка при создании записи через отладочный эндпоинт")
try:
print(f"Тело ответа с ошибкой: {json.dumps(response.json(), indent=2)}")
except:
print(f"Тело ответа не является JSON: {response.text}")
return False
except Exception as e:
print(f"Ошибка при выполнении запроса: {e}")
traceback.print_exc()
return False
def verify_entries_created():
"""Проверка, что записи были созданы в БД"""
print("\n=== Проверка созданных записей ===")
try:
response = requests.get(f"{BASE_URL}/debug/entries")
print(f"Статус ответа: {response.status_code}")
if response.status_code == 200:
entries = response.json()
print(f"Количество записей в БД: {len(entries)}")
print("Последние 2 записи:")
for entry in entries[-2:]:
print(json.dumps(entry, indent=2))
return True
else:
print(f"Ошибка при получении записей: {response.status_code}")
return False
except Exception as e:
print(f"Ошибка при проверке записей: {e}")
traceback.print_exc()
return False
def main():
print("=== Тестирование мобильных эндпоинтов календарного сервиса ===")
if not test_health():
print("Сервис недоступен. Завершение тестирования.")
return 1
debug_result = test_debug_endpoint()
auth_result = test_authenticated_endpoint()
if debug_result and auth_result:
print("\nВсе тесты успешно пройдены!")
verify_entries_created()
return 0
else:
print("\nНекоторые тесты не пройдены.")
if debug_result:
print("✓ Отладочный эндпоинт работает")
else:
print("✗ Отладочный эндпоинт не работает")
if auth_result:
print("✓ Аутентифицированный эндпоинт работает")
else:
print("✗ Аутентифицированный эндпоинт не работает")
verify_entries_created()
return 1
if __name__ == "__main__":
sys.exit(main())