Files
chat/tests/test_nutrition_service.sh
Andrew K. Choi 537e7b363f
All checks were successful
continuous-integration/drone/push Build is passing
main commit
2025-10-16 16:30:25 +09:00

189 lines
8.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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}"