#!/bin/bash # Простой тест Emergency Service API # Тестирование только работающих endpoints # Цвета для вывода GREEN='\033[0;32m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' success() { echo -e "${GREEN}✅ $1${NC}"; } error() { echo -e "${RED}❌ $1${NC}"; } info() { echo -e "${BLUE}ℹ️ $1${NC}"; } BASE_URL="http://127.0.0.1:8002" USER_URL="http://127.0.0.1:8001" # Получение токена info "1. Получение токена авторизации..." LOGIN_RESPONSE=$(curl -s -X POST "${USER_URL}/api/v1/auth/login" \ -H "Content-Type: application/json" \ -d '{"username":"apitestuser","password":"testpass123"}') TOKEN=$(echo "$LOGIN_RESPONSE" | python3 -c "import sys,json; data=json.load(sys.stdin); print(data['access_token'])" 2>/dev/null) if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then error "Ошибка получения токена" echo "$LOGIN_RESPONSE" exit 1 fi success "Токен получен: ${TOKEN:0:20}..." # Тест 1: Health Check info "2. Проверка работы сервиса..." HEALTH_RESPONSE=$(curl -s "${BASE_URL}/health") if echo "$HEALTH_RESPONSE" | grep -q "healthy"; then success "Health Check прошел" else error "Health Check не прошел: $HEALTH_RESPONSE" fi # Тест 2: Создание оповещения info "3. Создание экстренного оповещения..." ALERT_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/v1/alert" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{ "latitude": 55.7558, "longitude": 37.6176, "alert_type": "general", "message": "API тест - экстренное оповещение" }') ALERT_ID=$(echo "$ALERT_RESPONSE" | python3 -c "import sys,json; data=json.load(sys.stdin); print(data['id'])" 2>/dev/null) if [ -n "$ALERT_ID" ] && [ "$ALERT_ID" != "null" ]; then success "Оповещение создано с ID: $ALERT_ID" else error "Ошибка создания оповещения: $ALERT_RESPONSE" fi # Тест 3: Получение статистики info "4. Получение статистики..." STATS_RESPONSE=$(curl -s -X GET "${BASE_URL}/api/v1/stats" \ -H "Authorization: Bearer $TOKEN") if echo "$STATS_RESPONSE" | grep -q "total_alerts"; then success "Статистика получена" echo "$STATS_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$STATS_RESPONSE" else error "Ошибка получения статистики: $STATS_RESPONSE" fi # Тест 4: Поиск ближайших оповещений info "5. Поиск ближайших оповещений..." NEARBY_RESPONSE=$(curl -s -X GET "${BASE_URL}/api/v1/alerts/nearby?latitude=55.7558&longitude=37.6176&radius_km=10" \ -H "Authorization: Bearer $TOKEN") if echo "$NEARBY_RESPONSE" | grep -q "distance_km"; then success "Ближайшие оповещения найдены" echo "$NEARBY_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$NEARBY_RESPONSE" else error "Ошибка поиска ближайших оповещений: $NEARBY_RESPONSE" fi # Тест 5: Отклик на оповещение (если есть ID) if [ -n "$ALERT_ID" ] && [ "$ALERT_ID" != "null" ]; then info "6. Создание отклика на оповещение..." RESPONSE_DATA=$(curl -s -X POST "${BASE_URL}/api/v1/alert/${ALERT_ID}/respond" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{ "response_type": "help_on_way", "message": "Еду на помощь!", "eta_minutes": 10 }') if echo "$RESPONSE_DATA" | grep -q "response_type"; then success "Отклик на оповещение создан" echo "$RESPONSE_DATA" | python3 -m json.tool 2>/dev/null || echo "$RESPONSE_DATA" else error "Ошибка создания отклика: $RESPONSE_DATA" fi fi info "Тестирование завершено!"