Ответ
Тестирование OAuth 2.0 авторизации включает проверку корректного потока, обработки ошибок и интеграции. Пример для мобильного приложения:
Основные сценарии для проверки:
- Успешная авторизация через разных провайдеров (Google, Facebook, кастомный IdP).
- Обработка невалидных/просроченных токенов.
- Обновление Access Token с помощью Refresh Token.
- Сохранение и восстановление сессии после перезапуска приложения.
- Выход из системы (logout) с инвалидацией токенов.
Пример тест-кейса на Python (упрощенно):
import pytest
def test_oauth_successful_login_with_google():
# 1. Имитируем получение auth code от Google (через мок или тестовый аккаунт)
auth_code = get_auth_code_from_mock_google()
# 2. Обмениваем code на access token
token_response = auth_api.exchange_code_for_token(auth_code, provider="google")
assert token_response.status_code == 200
access_token = token_response.json()["access_token"]
# 3. Используем токен для получения данных пользователя
profile_response = user_api.get_profile(access_token)
assert profile_response.status_code == 200
user_data = profile_response.json()
# 4. Проверяем корректность данных и создание сессии в приложении
assert user_data["email"] is not None
assert app_has_valid_session_for_user(user_data["id"]) == True
# Пример теста на обработку ошибки
def test_oauth_fails_with_invalid_token():
response = user_api.get_profile("invalid_access_token_123")
assert response.status_code == 401 # Unauthorized
assert response.json()["error"] == "invalid_token"
Ключевые аспекты тестирования:
- Безопасность: Токены не должны логироваться в открытом виде.
- Сетевая устойчивость: Обработка таймаутов и ошибок сети.
- Edge-кейсы: Отзыв разрешений пользователем, разные часовые пояса в токенах (expires_in).