This commit is contained in:
142
tests/test_auth_flow.sh
Executable file
142
tests/test_auth_flow.sh
Executable file
@@ -0,0 +1,142 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для тестирования полного цикла аутентификации
|
||||
# Регистрация -> Авторизация -> Получение Bearer токена
|
||||
|
||||
echo "🔐 Тестирование полного цикла аутентификации"
|
||||
echo "============================================="
|
||||
|
||||
# Проверяем, что сервис запущен
|
||||
echo "🔍 Проверяем доступность User Service..."
|
||||
if ! curl -s http://localhost:8001/api/v1/health > /dev/null; then
|
||||
echo "❌ User Service недоступен. Запустите сервис командой:"
|
||||
echo " cd services/user_service && python -m uvicorn main:app --host 0.0.0.0 --port 8001"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ User Service доступен"
|
||||
|
||||
# Генерируем уникальный email для тестирования
|
||||
TIMESTAMP=$(date +%s)
|
||||
EMAIL="test_user_${TIMESTAMP}@example.com"
|
||||
|
||||
echo -e "\n📝 Тестовые данные:"
|
||||
echo "Email: $EMAIL"
|
||||
echo "Password: TestPassword123"
|
||||
echo "First Name: Тест"
|
||||
echo "Last Name: Пользователь"
|
||||
echo "Phone: +7-900-123-45-67"
|
||||
|
||||
# 1. РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЯ
|
||||
echo -e "\n🔵 Шаг 1: Регистрация нового пользователя"
|
||||
echo "============================================"
|
||||
|
||||
REGISTRATION_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "http://localhost:8001/api/v1/register" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"email\": \"$EMAIL\",
|
||||
\"password\": \"TestPassword123\",
|
||||
\"first_name\": \"Тест\",
|
||||
\"last_name\": \"Пользователь\",
|
||||
\"phone\": \"+7-900-123-45-67\"
|
||||
}")
|
||||
|
||||
# Извлекаем HTTP статус и тело ответа
|
||||
HTTP_STATUS=$(echo $REGISTRATION_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||
REGISTRATION_BODY=$(echo $REGISTRATION_RESPONSE | sed -e 's/HTTPSTATUS:.*//g')
|
||||
|
||||
if [ "$HTTP_STATUS" -eq 201 ] || [ "$HTTP_STATUS" -eq 200 ]; then
|
||||
echo "✅ Регистрация успешна!"
|
||||
echo "📋 Данные пользователя:"
|
||||
echo "$REGISTRATION_BODY" | jq . 2>/dev/null || echo "$REGISTRATION_BODY"
|
||||
|
||||
# Извлекаем UUID пользователя
|
||||
USER_UUID=$(echo "$REGISTRATION_BODY" | jq -r '.uuid' 2>/dev/null)
|
||||
echo "🆔 UUID пользователя: $USER_UUID"
|
||||
else
|
||||
echo "❌ Ошибка регистрации. HTTP Status: $HTTP_STATUS"
|
||||
echo "📋 Ответ сервера:"
|
||||
echo "$REGISTRATION_BODY" | jq . 2>/dev/null || echo "$REGISTRATION_BODY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЯ
|
||||
echo -e "\n🔵 Шаг 2: Авторизация пользователя"
|
||||
echo "=================================="
|
||||
|
||||
LOGIN_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "http://localhost:8001/api/v1/login" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"email\": \"$EMAIL\",
|
||||
\"password\": \"TestPassword123\"
|
||||
}")
|
||||
|
||||
# Извлекаем HTTP статус и тело ответа
|
||||
HTTP_STATUS=$(echo $LOGIN_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||
LOGIN_BODY=$(echo $LOGIN_RESPONSE | sed -e 's/HTTPSTATUS:.*//g')
|
||||
|
||||
if [ "$HTTP_STATUS" -eq 200 ]; then
|
||||
echo "✅ Авторизация успешна!"
|
||||
echo "📋 Данные авторизации:"
|
||||
echo "$LOGIN_BODY" | jq . 2>/dev/null || echo "$LOGIN_BODY"
|
||||
|
||||
# Извлекаем Bearer токен
|
||||
BEARER_TOKEN=$(echo "$LOGIN_BODY" | jq -r '.access_token' 2>/dev/null)
|
||||
TOKEN_TYPE=$(echo "$LOGIN_BODY" | jq -r '.token_type' 2>/dev/null)
|
||||
|
||||
if [ "$BEARER_TOKEN" != "null" ] && [ "$BEARER_TOKEN" != "" ]; then
|
||||
echo -e "\n🎯 Bearer Token получен успешно!"
|
||||
echo "=================================="
|
||||
echo "🔑 Token Type: $TOKEN_TYPE"
|
||||
echo "🔐 Access Token: $BEARER_TOKEN"
|
||||
echo ""
|
||||
echo "📋 Полный Authorization Header:"
|
||||
echo "Authorization: $TOKEN_TYPE $BEARER_TOKEN"
|
||||
echo ""
|
||||
echo "📋 Для использования в curl:"
|
||||
echo "curl -H \"Authorization: $TOKEN_TYPE $BEARER_TOKEN\" http://localhost:8001/api/v1/protected-endpoint"
|
||||
else
|
||||
echo "❌ Не удалось извлечь Bearer токен из ответа"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "❌ Ошибка авторизации. HTTP Status: $HTTP_STATUS"
|
||||
echo "📋 Ответ сервера:"
|
||||
echo "$LOGIN_BODY" | jq . 2>/dev/null || echo "$LOGIN_BODY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. ТЕСТИРОВАНИЕ ТОКЕНА (если есть защищенный эндпоинт)
|
||||
echo -e "\n🔵 Шаг 3: Проверка профиля пользователя с токеном"
|
||||
echo "==============================================="
|
||||
|
||||
PROFILE_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X GET "http://localhost:8001/api/v1/profile" \
|
||||
-H "Authorization: $TOKEN_TYPE $BEARER_TOKEN")
|
||||
|
||||
# Извлекаем HTTP статус и тело ответа
|
||||
HTTP_STATUS=$(echo $PROFILE_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||
PROFILE_BODY=$(echo $PROFILE_RESPONSE | sed -e 's/HTTPSTATUS:.*//g')
|
||||
|
||||
if [ "$HTTP_STATUS" -eq 200 ]; then
|
||||
echo "✅ Токен работает! Профиль получен:"
|
||||
echo "$PROFILE_BODY" | jq . 2>/dev/null || echo "$PROFILE_BODY"
|
||||
else
|
||||
echo "⚠️ Не удалось получить профиль. HTTP Status: $HTTP_STATUS"
|
||||
echo "📋 Ответ сервера:"
|
||||
echo "$PROFILE_BODY" | jq . 2>/dev/null || echo "$PROFILE_BODY"
|
||||
echo "💡 Возможно, эндпоинт /profile не реализован или требует другой путь"
|
||||
fi
|
||||
|
||||
echo -e "\n🎉 Тестирование завершено!"
|
||||
echo "=========================="
|
||||
echo "✅ Регистрация: Успешно"
|
||||
echo "✅ Авторизация: Успешно"
|
||||
echo "✅ Bearer Token: Получен"
|
||||
echo ""
|
||||
echo "🔐 Ваш Bearer Token:"
|
||||
echo "$TOKEN_TYPE $BEARER_TOKEN"
|
||||
echo ""
|
||||
echo "💾 Токен сохранен в переменную окружения для использования:"
|
||||
echo "export AUTH_TOKEN=\"$TOKEN_TYPE $BEARER_TOKEN\""
|
||||
echo ""
|
||||
echo "📖 Для тестирования других эндпоинтов используйте:"
|
||||
echo "curl -H \"Authorization: \$AUTH_TOKEN\" http://localhost:8001/api/v1/your-endpoint"
|
||||
Reference in New Issue
Block a user