Files
chat/tests/test_auth_flow.sh
Andrew K. Choi 003950dce6
Some checks reported errors
continuous-integration/drone Build encountered an error
CI/CD pipeline
2025-09-25 08:42:22 +09:00

142 lines
6.2 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
# Скрипт для тестирования полного цикла аутентификации
# Регистрация -> Авторизация -> Получение 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"