All checks were successful
continuous-integration/drone/push Build is passing
171 lines
6.8 KiB
Python
171 lines
6.8 KiB
Python
#!/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()) |