All checks were successful
continuous-integration/drone/push Build is passing
264 lines
9.9 KiB
Bash
Executable File
264 lines
9.9 KiB
Bash
Executable File
#!/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 "$@" |