#!/bin/bash # Emergency Service API Testing Script # Скрипт для тестирования всех endpoints Emergency Service API set -e # Остановка при ошибке # Конфигурация BASE_URL="http://127.0.0.1:8002" GATEWAY_URL="http://127.0.0.1:8000" USER_URL="http://127.0.0.1:8001" # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Функции для вывода success() { echo -e "${GREEN}✅ $1${NC}" } error() { echo -e "${RED}❌ $1${NC}" } info() { echo -e "${BLUE}ℹ️ $1${NC}" } warning() { echo -e "${YELLOW}⚠️ $1${NC}" } # Функция для создания пользователя и получения токена get_auth_token() { info "Получение токена авторизации..." # Создаем тестового пользователя local timestamp=$(date +%s) local test_username="testuser_${timestamp}" local test_email="testuser_${timestamp}@example.com" # Регистрируем пользователя local register_response=$(curl -s -X POST "${USER_URL}/api/v1/auth/register" \ -H "Content-Type: application/json" \ -d "{ \"username\": \"${test_username}\", \"email\": \"${test_email}\", \"password\": \"testpass123\", \"full_name\": \"Test User ${timestamp}\" }") if echo "$register_response" | grep -q '"id"'; then success "Пользователь зарегистрирован: ${test_username}" else error "Ошибка регистрации: $register_response" return 1 fi # Получаем токен local login_response=$(curl -s -X POST "${USER_URL}/api/v1/auth/login" \ -H "Content-Type: application/json" \ -d "{ \"username\": \"${test_username}\", \"password\": \"testpass123\" }") local token=$(echo "$login_response" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4) if [ -n "$token" ]; then success "Токен получен" echo "$token" else error "Ошибка получения токена: $login_response" return 1 fi } # Функция для выполнения HTTP запросов make_request() { local method="$1" local endpoint="$2" local data="$3" local token="$4" if [ -n "$data" ]; then curl -s -X "$method" "${BASE_URL}${endpoint}" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $token" \ -d "$data" else curl -s -X "$method" "${BASE_URL}${endpoint}" \ -H "Authorization: Bearer $token" fi } # Функция для проверки ответа check_response() { local response="$1" local test_name="$2" # Проверяем статус код и содержание ответа if [ -n "$response" ] && (echo "$response" | grep -q '"id"\\|"status":"healthy"\\|"message"\\|"access_token"\\|"uuid"' || [ "${response:0:1}" = "{" ]); then success "$test_name: Успешно" echo "$response" | jq . 2>/dev/null || echo "$response" return 0 else error "$test_name: Ошибка" echo "$response" return 1 fi } main() { info "🚀 Начало тестирования Emergency Service API" echo "==============================================" # 1. Проверка здоровья сервиса info "1. Проверка здоровья сервиса" local health_response=$(curl -s "${BASE_URL}/health") check_response "$health_response" "Health Check" echo "" # 2. Получение токена авторизации info "2. Получение токена авторизации" local auth_token auth_token=$(get_auth_token) if [ $? -ne 0 ]; then error "Не удалось получить токен авторизации. Завершение тестов." exit 1 fi echo "" # 3. Создание экстренного оповещения info "3. Создание экстренного оповещения" local alert_data='{ "latitude": 55.7558, "longitude": 37.6176, "alert_type": "general", "message": "Тестовое оповещение - нужна помощь", "address": "Красная площадь, Москва" }' local alert_response=$(make_request "POST" "/api/v1/alert" "$alert_data" "$auth_token") if check_response "$alert_response" "Create Alert"; then local alert_id=$(echo "$alert_response" | grep -o '"id":[0-9]*' | cut -d':' -f2) success "Alert ID: $alert_id" fi echo "" # 4. Получение статистики info "4. Получение статистики" local stats_response=$(make_request "GET" "/api/v1/stats" "" "$auth_token") check_response "$stats_response" "Get Statistics" echo "" # 5. Получение активных оповещений info "5. Получение активных оповещений" local active_response=$(make_request "GET" "/api/v1/alerts/active" "" "$auth_token") check_response "$active_response" "Get Active Alerts" echo "" # 6. Получение моих оповещений info "6. Получение моих оповещений" local my_alerts_response=$(make_request "GET" "/api/v1/alerts/my" "" "$auth_token") check_response "$my_alerts_response" "Get My Alerts" echo "" # 7. Получение ближайших оповещений info "7. Получение ближайших оповещений" local nearby_response=$(make_request "GET" "/api/v1/alerts/nearby?latitude=55.7558&longitude=37.6176&radius_km=10" "" "$auth_token") check_response "$nearby_response" "Get Nearby Alerts" echo "" # 8. Создание отчета о происшествии info "8. Создание отчета о происшествии" local report_data='{ "latitude": 55.7500, "longitude": 37.6200, "report_type": "harassment", "description": "Тестовый отчет о происшествии в районе метро", "address": "Тверская улица, Москва", "severity": 3, "is_anonymous": false }' local report_response=$(make_request "POST" "/api/v1/report" "$report_data" "$auth_token") check_response "$report_response" "Create Report" echo "" # 9. Получение отчетов info "9. Получение отчетов" local reports_response=$(make_request "GET" "/api/v1/reports" "" "$auth_token") check_response "$reports_response" "Get Reports" echo "" # 10. Создание отметки безопасности info "10. Создание отметки безопасности" local safety_data='{ "message": "Добрался домой, все хорошо", "location_latitude": 55.7600, "location_longitude": 37.6100 }' local safety_response=$(make_request "POST" "/api/v1/safety-check" "$safety_data" "$auth_token") check_response "$safety_response" "Create Safety Check" echo "" # 11. Получение отметок безопасности info "11. Получение отметок безопасности" local safety_checks_response=$(make_request "GET" "/api/v1/safety-checks" "" "$auth_token") check_response "$safety_checks_response" "Get Safety Checks" echo "" # 12. Тест отклика на оповещение (если есть активные оповещения) if [ -n "$alert_id" ] && [ "$alert_id" != "null" ]; then info "12. Создание второго пользователя для отклика" local second_token second_token=$(get_auth_token) if [ $? -eq 0 ]; then info "13. Отклик на оповещение" local response_data='{ "response_type": "help_on_way", "message": "Еду к вам, буду через 15 минут!", "eta_minutes": 15 }' local respond_response=$(make_request "POST" "/api/v1/alert/${alert_id}/respond" "$response_data" "$second_token") check_response "$respond_response" "Respond to Alert" echo "" # 14. Получение откликов на оповещение info "14. Получение откликов на оповещение" local responses_response=$(make_request "GET" "/api/v1/alert/${alert_id}/responses" "" "$auth_token") check_response "$responses_response" "Get Alert Responses" echo "" # 15. Обновление оповещения info "15. Обновление оповещения" local update_data='{ "message": "Обновленное описание ситуации" }' local update_response=$(make_request "PUT" "/api/v1/alert/${alert_id}" "$update_data" "$auth_token") check_response "$update_response" "Update Alert" echo "" # 16. Решение оповещения info "16. Решение оповещения" local resolve_response=$(make_request "PUT" "/api/v1/alert/${alert_id}/resolve" "" "$auth_token") check_response "$resolve_response" "Resolve Alert" echo "" fi fi info "✅ Тестирование Emergency Service API завершено" success "Все основные endpoints протестированы!" } # Запуск основной функции main "$@"