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