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

This commit is contained in:
2025-10-16 16:30:25 +09:00
parent 91c7e04474
commit 537e7b363f
1146 changed files with 45926 additions and 77196 deletions

189
tests/test_nutrition_service.sh Executable file
View File

@@ -0,0 +1,189 @@
#!/bin/bash
# Скрипт для тестирования API сервиса питания через cURL
# Настройки
API_BASE_URL="http://localhost:8006/api/v1/nutrition"
AUTH_URL="http://localhost:8001/api/v1/auth"
TODAY=$(date +"%Y-%m-%d")
TEST_USERNAME="test_nutrition_user"
TEST_PASSWORD="Test123!"
# Цветной вывод
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
echo -e "${BLUE}🚀 Запуск тестов для Nutrition Service API${NC}"
echo "---------------------------------------------"
# Шаг 1: Авторизация и получение токена
echo -e "${BLUE}📝 Шаг 1: Получение токена авторизации${NC}"
# Попытка входа
login_response=$(curl -s -X POST "${AUTH_URL}/login" \
-H "Content-Type: application/json" \
-d '{
"username": "'"${TEST_USERNAME}"'",
"password": "'"${TEST_PASSWORD}"'"
}')
# Проверяем, успешен ли вход
if [[ $login_response == *"access_token"* ]]; then
TOKEN=$(echo $login_response | grep -o '"access_token":"[^"]*' | sed 's/"access_token":"//')
echo -e "${GREEN}✅ Вход успешен!${NC}"
else
echo -e "${YELLOW}⚠️ Вход не удался, пробуем регистрацию...${NC}"
# Пробуем зарегистрировать пользователя
curl -s -X POST "${AUTH_URL}/register" \
-H "Content-Type: application/json" \
-d '{
"email": "'"${TEST_USERNAME}@example.com"'",
"username": "'"${TEST_USERNAME}"'",
"password": "'"${TEST_PASSWORD}"'",
"first_name": "Test",
"last_name": "Nutrition",
"phone": "+79991234999"
}' > /dev/null
# После регистрации пробуем войти снова
login_response=$(curl -s -X POST "${AUTH_URL}/login" \
-H "Content-Type: application/json" \
-d '{
"username": "'"${TEST_USERNAME}"'",
"password": "'"${TEST_PASSWORD}"'"
}')
if [[ $login_response == *"access_token"* ]]; then
TOKEN=$(echo $login_response | grep -o '"access_token":"[^"]*' | sed 's/"access_token":"//')
echo -e "${GREEN}✅ Регистрация и вход успешны!${NC}"
else
echo -e "${RED}Не удалось получить токен авторизации${NC}"
echo "Ответ сервера: $login_response"
exit 1
fi
fi
# Шаг 2: Поиск продуктов
echo -e "\n${BLUE}📝 Шаг 2: Поиск продуктов${NC}"
search_response=$(curl -s -X POST "${API_BASE_URL}/search" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d '{
"query": "apple",
"max_results": 5
}')
echo "Результат поиска:"
echo "$search_response" | grep -o '"name":"[^"]*' | head -3 | sed 's/"name":"/- /'
echo "..."
# Получаем ID первого продукта из результатов поиска
FOOD_ID=$(echo $search_response | grep -o '"id":[0-9]*' | head -1 | sed 's/"id"://')
if [[ -z "$FOOD_ID" ]]; then
echo -e "${YELLOW}⚠️ Не удалось получить ID продукта, используем значение по умолчанию${NC}"
FOOD_ID=1
else
echo -e "${GREEN}✅ Получен ID продукта: ${FOOD_ID}${NC}"
fi
# Шаг 3: Добавление записи в дневник питания
echo -e "\n${BLUE}📝 Шаг 3: Добавление записи в дневник питания${NC}"
diary_response=$(curl -s -X POST "${API_BASE_URL}/diary" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d '{
"food_item_id": '"${FOOD_ID}"',
"entry_date": "'"${TODAY}"'",
"meal_type": "breakfast",
"quantity": 1.5,
"unit": "piece",
"notes": "Тестовая запись"
}')
if [[ $diary_response == *"id"* ]]; then
echo -e "${GREEN}✅ Запись добавлена в дневник питания${NC}"
echo "Детали записи:"
echo "$diary_response" | grep -o '"calories":[0-9.]*' | sed 's/"calories":/Калории: /'
else
echo -e "${RED}❌ Ошибка при добавлении записи в дневник${NC}"
echo "Ответ сервера: $diary_response"
fi
# Шаг 4: Получение записей дневника
echo -e "\n${BLUE}📝 Шаг 4: Получение записей дневника${NC}"
get_diary_response=$(curl -s -X GET "${API_BASE_URL}/diary?date=${TODAY}" \
-H "Authorization: Bearer ${TOKEN}")
if [[ $get_diary_response == *"meal_type"* ]]; then
echo -e "${GREEN}✅ Записи дневника успешно получены${NC}"
echo "Количество записей: $(echo $get_diary_response | grep -o '"meal_type"' | wc -l)"
else
echo -e "${YELLOW}⚠️ Нет записей в дневнике или ошибка получения${NC}"
echo "Ответ сервера: $get_diary_response"
fi
# Шаг 5: Добавление записи о потреблении воды
echo -e "\n${BLUE}📝 Шаг 5: Добавление записи о потреблении воды${NC}"
water_response=$(curl -s -X POST "${API_BASE_URL}/water" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d '{
"amount_ml": 250,
"entry_date": "'"${TODAY}"'",
"notes": "Утренний стакан воды"
}')
if [[ $water_response == *"id"* ]]; then
echo -e "${GREEN}✅ Запись о потреблении воды добавлена${NC}"
echo "Детали записи:"
echo "$water_response" | grep -o '"amount_ml":[0-9]*' | sed 's/"amount_ml":/Объем (мл): /'
else
echo -e "${RED}❌ Ошибка при добавлении записи о воде${NC}"
echo "Ответ сервера: $water_response"
fi
# Шаг 6: Добавление записи о физической активности
echo -e "\n${BLUE}📝 Шаг 6: Добавление записи о физической активности${NC}"
activity_response=$(curl -s -X POST "${API_BASE_URL}/activity" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d '{
"entry_date": "'"${TODAY}"'",
"activity_type": "running",
"duration_minutes": 30,
"distance_km": 5.2,
"intensity": "medium",
"notes": "Утренняя пробежка"
}')
if [[ $activity_response == *"id"* ]]; then
echo -e "${GREEN}✅ Запись о физической активности добавлена${NC}"
echo "Детали записи:"
echo "$activity_response" | grep -o '"duration_minutes":[0-9]*' | sed 's/"duration_minutes":/Продолжительность (мин): /'
echo "$activity_response" | grep -o '"calories_burned":[0-9.]*' | sed 's/"calories_burned":/Сожжено калорий: /'
else
echo -e "${RED}❌ Ошибка при добавлении записи об активности${NC}"
echo "Ответ сервера: $activity_response"
fi
# Шаг 7: Получение сводки за день
echo -e "\n${BLUE}📝 Шаг 7: Получение сводки за день${NC}"
summary_response=$(curl -s -X GET "${API_BASE_URL}/summary?date=${TODAY}" \
-H "Authorization: Bearer ${TOKEN}")
if [[ $summary_response == *"total_calories"* ]]; then
echo -e "${GREEN}✅ Дневная сводка успешно получена${NC}"
echo "Детали сводки:"
echo "$summary_response" | grep -o '"total_calories":[0-9.]*' | sed 's/"total_calories":/Всего калорий: /'
echo "$summary_response" | grep -o '"water_consumed_ml":[0-9]*' | sed 's/"water_consumed_ml":/Потреблено воды (мл): /'
echo "$summary_response" | grep -o '"activity_minutes":[0-9]*' | sed 's/"activity_minutes":/Минуты активности: /'
else
echo -e "${YELLOW}⚠️ Нет данных для сводки или ошибка получения${NC}"
echo "Ответ сервера: $summary_response"
fi
echo -e "\n${GREEN}✅ Тестирование API сервиса питания завершено!${NC}"