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