Files
chat/tests/test_emergency_api.sh
Andrew K. Choi 64171196b6
All checks were successful
continuous-integration/drone/push Build is passing
calendar features
2025-09-26 14:45:00 +09:00

264 lines
9.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

#!/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 "$@"