Major fixes and new features
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-09-25 15:51:48 +09:00
parent dd7349bb4c
commit ddce9f5125
5586 changed files with 1470941 additions and 0 deletions

250
tests/test_endpoints.sh Executable file
View File

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