sdf
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-09-26 12:22:14 +09:00
parent ca32dc8867
commit 7c22664daf
33 changed files with 3267 additions and 1429 deletions

264
test_emergency_api.sh Executable file
View File

@@ -0,0 +1,264 @@
#!/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 "$@"