All checks were successful
continuous-integration/drone/push Build is passing
250 lines
10 KiB
Bash
Executable File
250 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Скрипт для тестирования всех API-эндпоинтов через API Gateway
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# База URL API Gateway
|
||
GATEWAY_URL="http://localhost:8000"
|
||
|
||
# Функция для проверки статуса ответа
|
||
check_status() {
|
||
local response=$1
|
||
local endpoint=$2
|
||
|
||
if echo "$response" | grep -q "\"status\"\|\"id\"\|\"message\""; then
|
||
echo -e "${GREEN}✅ $endpoint - OK${NC}"
|
||
return 0
|
||
else
|
||
echo -e "${RED}❌ $endpoint - Error: $response${NC}"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# Проверка доступности API Gateway
|
||
echo -e "${BLUE}===============================================${NC}"
|
||
echo -e "${BLUE}🔍 Проверка API Gateway и всех маршрутов${NC}"
|
||
echo -e "${BLUE}===============================================${NC}"
|
||
|
||
echo -e "${YELLOW}🔎 Проверка API Gateway...${NC}"
|
||
HEALTH_RESPONSE=$(curl -s "$GATEWAY_URL/api/v1/health")
|
||
if echo "$HEALTH_RESPONSE" | grep -q "healthy"; then
|
||
echo -e "${GREEN}✅ API Gateway работает${NC}"
|
||
else
|
||
echo -e "${RED}❌ API Gateway недоступен. Убедитесь, что он запущен.${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "\n${BLUE}==== User Service Endpoints ====${NC}"
|
||
|
||
# Регистрация тестового пользователя
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/auth/register${NC}"
|
||
REGISTER_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/auth/register" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"username": "test_endpoints",
|
||
"email": "test_endpoints@example.com",
|
||
"password": "Test@1234",
|
||
"full_name": "Test Endpoints User",
|
||
"phone_number": "+7123456789"
|
||
}')
|
||
check_status "$REGISTER_RESPONSE" "/api/v1/auth/register"
|
||
USER_ID=$(echo "$REGISTER_RESPONSE" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
|
||
if [ -n "$USER_ID" ]; then
|
||
echo -e " └─ Создан пользователь с ID: $USER_ID"
|
||
else
|
||
echo -e " └─ Не удалось получить ID пользователя"
|
||
fi
|
||
|
||
# Авторизация
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/auth/login${NC}"
|
||
LOGIN_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/auth/login" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"username": "test_endpoints",
|
||
"password": "Test@1234"
|
||
}')
|
||
check_status "$LOGIN_RESPONSE" "/api/v1/auth/login"
|
||
TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"access_token":"[^"]*"' | cut -d'"' -f4)
|
||
|
||
if [ -z "$TOKEN" ]; then
|
||
echo -e "${RED}❌ Не удалось получить токен авторизации. Дальнейшие тесты невозможны.${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# Получение профиля пользователя
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/users/me${NC}"
|
||
ME_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/users/me" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$ME_RESPONSE" "/api/v1/users/me"
|
||
|
||
# Изменение пароля
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/users/me/change-password${NC}"
|
||
PASSWORD_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/users/me/change-password" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{
|
||
"current_password": "Test@1234",
|
||
"new_password": "Test@5678"
|
||
}')
|
||
check_status "$PASSWORD_RESPONSE" "/api/v1/users/me/change-password"
|
||
|
||
# Получение дашборда
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/users/dashboard${NC}"
|
||
DASH_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/users/dashboard" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$DASH_RESPONSE" "/api/v1/users/dashboard"
|
||
|
||
echo -e "\n${BLUE}==== Location Service Endpoints ====${NC}"
|
||
|
||
# Обновление местоположения
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/locations/update${NC}"
|
||
LOCATION_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/locations/update" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{
|
||
"latitude": 55.7558,
|
||
"longitude": 37.6173,
|
||
"accuracy": 5.0
|
||
}')
|
||
check_status "$LOCATION_RESPONSE" "/api/v1/locations/update"
|
||
|
||
# Получение последнего местоположения
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/locations/last${NC}"
|
||
LAST_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/locations/last" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$LAST_RESPONSE" "/api/v1/locations/last"
|
||
|
||
# История местоположений
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/locations/history${NC}"
|
||
HISTORY_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/locations/history" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$HISTORY_RESPONSE" "/api/v1/locations/history"
|
||
|
||
echo -e "\n${BLUE}==== Emergency Service Endpoints ====${NC}"
|
||
|
||
# Создание тревожного оповещения
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/emergency/alerts${NC}"
|
||
ALERT_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/emergency/alerts" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{
|
||
"latitude": 55.7558,
|
||
"longitude": 37.6173,
|
||
"alert_type": "SOS",
|
||
"message": "Endpoint test alert"
|
||
}')
|
||
check_status "$ALERT_RESPONSE" "/api/v1/emergency/alerts POST"
|
||
ALERT_ID=$(echo "$ALERT_RESPONSE" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
|
||
|
||
# Получение своих оповещений
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/emergency/alerts/my${NC}"
|
||
MY_ALERTS_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/emergency/alerts/my" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$MY_ALERTS_RESPONSE" "/api/v1/emergency/alerts/my"
|
||
|
||
# Отмена тревожного оповещения
|
||
if [ -n "$ALERT_ID" ]; then
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/emergency/alerts/$ALERT_ID/cancel${NC}"
|
||
CANCEL_RESPONSE=$(curl -s -X PATCH "$GATEWAY_URL/api/v1/emergency/alerts/$ALERT_ID/cancel" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{"reason": "Test completed"}')
|
||
check_status "$CANCEL_RESPONSE" "/api/v1/emergency/alerts/$ALERT_ID/cancel"
|
||
fi
|
||
|
||
echo -e "\n${BLUE}==== Calendar Service Endpoints ====${NC}"
|
||
|
||
# Получение записей календаря
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/calendar/entries${NC}"
|
||
ENTRIES_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/calendar/entries" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$ENTRIES_RESPONSE" "/api/v1/calendar/entries GET"
|
||
|
||
# Создание записи календаря
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/calendar/entries POST${NC}"
|
||
ENTRY_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/calendar/entries" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{
|
||
"date": "2025-09-25",
|
||
"mood": "good",
|
||
"symptoms": ["headache", "fatigue"],
|
||
"notes": "Test entry"
|
||
}')
|
||
check_status "$ENTRY_RESPONSE" "/api/v1/calendar/entries POST"
|
||
ENTRY_ID=$(echo "$ENTRY_RESPONSE" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
|
||
if [ -n "$ENTRY_ID" ]; then
|
||
echo -e " └─ Создана запись календаря с ID: $ENTRY_ID"
|
||
else
|
||
echo -e " └─ Не удалось получить ID записи календаря"
|
||
fi
|
||
|
||
# Получение обзора цикла
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/calendar/cycle-overview${NC}"
|
||
CYCLE_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/calendar/cycle-overview" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$CYCLE_RESPONSE" "/api/v1/calendar/cycle-overview"
|
||
|
||
# Получение настроек календаря
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/calendar/settings${NC}"
|
||
SETTINGS_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/calendar/settings" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$SETTINGS_RESPONSE" "/api/v1/calendar/settings"
|
||
|
||
echo -e "\n${BLUE}==== Notification Service Endpoints ====${NC}"
|
||
|
||
# Регистрация устройства
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/notifications/devices${NC}"
|
||
DEVICE_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/notifications/devices" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{
|
||
"device_token": "test-device-token-endpoint-test",
|
||
"device_type": "android",
|
||
"device_name": "Test Device"
|
||
}')
|
||
check_status "$DEVICE_RESPONSE" "/api/v1/notifications/devices POST"
|
||
DEVICE_ID=$(echo "$DEVICE_RESPONSE" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
|
||
if [ -n "$DEVICE_ID" ]; then
|
||
echo -e " └─ Зарегистрировано устройство с ID: $DEVICE_ID"
|
||
else
|
||
echo -e " └─ Не удалось получить ID устройства"
|
||
fi
|
||
|
||
# Получение устройств
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/notifications/devices GET${NC}"
|
||
DEVICES_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/notifications/devices" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$DEVICES_RESPONSE" "/api/v1/notifications/devices GET"
|
||
|
||
# Тестовое уведомление
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/notifications/test${NC}"
|
||
TEST_RESPONSE=$(curl -s -X POST "$GATEWAY_URL/api/v1/notifications/test" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer $TOKEN" \
|
||
-d '{
|
||
"title": "Test Notification",
|
||
"body": "This is a test notification"
|
||
}')
|
||
check_status "$TEST_RESPONSE" "/api/v1/notifications/test"
|
||
|
||
# История уведомлений
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/notifications/history${NC}"
|
||
HISTORY_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/notifications/history" \
|
||
-H "Authorization: Bearer $TOKEN")
|
||
check_status "$HISTORY_RESPONSE" "/api/v1/notifications/history"
|
||
|
||
echo -e "\n${BLUE}==== Проверка общей доступности сервисов ====${NC}"
|
||
|
||
# Получение статуса всех сервисов
|
||
echo -e "${YELLOW}→ Тестирование /api/v1/services-status${NC}"
|
||
STATUS_RESPONSE=$(curl -s -X GET "$GATEWAY_URL/api/v1/services-status")
|
||
check_status "$STATUS_RESPONSE" "/api/v1/services-status"
|
||
|
||
echo -e "\n${GREEN}✅ Тестирование эндпоинтов завершено${NC}" |