tested-auth-refactoring
Some checks failed
Deploy on push / deploy (push) Failing after 5s

This commit is contained in:
2025-07-25 01:04:15 +03:00
parent 867232e48f
commit b60a314ddd
28 changed files with 975 additions and 523 deletions

View File

@@ -0,0 +1,34 @@
import pytest
from services.auth import AuthService
from services.db import local_session
from auth.orm import Author
@pytest.mark.asyncio
async def test_ensure_user_has_reader_role():
auth_service = AuthService()
# Создаем тестового пользователя без роли reader
with local_session() as session:
test_author = Author(
email="test_reader_role@example.com",
slug="test_reader_role",
password="test_password"
)
session.add(test_author)
session.commit()
user_id = test_author.id
# Проверяем, что роль reader добавляется
result = await auth_service.ensure_user_has_reader_role(user_id)
assert result is True
# Проверяем, что при повторном вызове возвращается True
result = await auth_service.ensure_user_has_reader_role(user_id)
assert result is True
# Очищаем тестовые данные
with local_session() as session:
test_author = session.query(Author).filter_by(id=user_id).first()
if test_author:
session.delete(test_author)
session.commit()

View File

@@ -0,0 +1,13 @@
import pytest
from auth.identity import Password
def test_password_verify():
# Создаем пароль
original_password = "test_password123"
hashed_password = Password.encode(original_password)
# Проверяем корректный пароль
assert Password.verify(original_password, hashed_password) is True
# Проверяем некорректный пароль
assert Password.verify("wrong_password", hashed_password) is False

View File

@@ -227,3 +227,51 @@ with (
assert created_user is not None
assert created_user.name == "Test User"
assert created_user.email_verified is True
# Импортируем необходимые модели
from orm.community import Community, CommunityAuthor
@pytest.fixture
def test_community(oauth_db_session, simple_user):
"""
Создает тестовое сообщество с ожидаемыми ролями по умолчанию
Args:
oauth_db_session: Сессия базы данных для теста
simple_user: Пользователь для создания сообщества
Returns:
Community: Созданное тестовое сообщество
"""
# Очищаем существующие записи
oauth_db_session.query(Community).filter(
(Community.id == 300) | (Community.slug == "test-oauth-community")
).delete()
oauth_db_session.commit()
# Создаем тестовое сообщество
community = Community(
id=300,
name="Test OAuth Community",
slug="test-oauth-community",
desc="Community for OAuth tests",
created_by=simple_user.id,
settings={
"default_roles": ["reader", "author"],
"available_roles": ["reader", "author", "editor"]
}
)
oauth_db_session.add(community)
oauth_db_session.commit()
yield community
# Очистка после теста
try:
oauth_db_session.query(CommunityAuthor).filter(
CommunityAuthor.community_id == community.id
).delete()
oauth_db_session.query(Community).filter(Community.id == community.id).delete()
oauth_db_session.commit()
except Exception:
oauth_db_session.rollback()

View File

@@ -14,38 +14,45 @@ from auth.tokens.storage import TokenStorage
async def test_token_storage(redis_client):
"""Тест базовой функциональности TokenStorage с правильными fixtures"""
print("✅ Тестирование TokenStorage...")
try:
print("✅ Тестирование TokenStorage...")
# Тест создания сессии
print("1. Создание сессии...")
token = await TokenStorage.create_session(user_id="test_user_123", username="test_user", device_info={"test": True})
print(f" Создан токен: {token[:20]}...")
# Тест создания сессии
print("1. Создание сессии...")
token = await TokenStorage.create_session(user_id="test_user_123", username="test_user", device_info={"test": True})
print(f" Создан токен: {token[:20]}...")
# Тест проверки сессии
print("2. Проверка сессии...")
session_data = await TokenStorage.verify_session(token)
if session_data:
print(f" Сессия найдена для user_id: {session_data.user_id}")
else:
print(" ❌ Сессия не найдена")
return False
# Тест проверки сессии
print("2. Проверка сессии...")
session_data = await TokenStorage.verify_session(token)
if session_data:
print(f" Сессия найдена для user_id: {session_data.user_id}")
else:
print(" ❌ Сессия не найдена")
return False
# Тест прямого использования SessionTokenManager
print("3. Прямое использование SessionTokenManager...")
sessions = SessionTokenManager()
valid, data = await sessions.validate_session_token(token)
print(f" Валидация: {valid}, данные: {bool(data)}")
# Тест прямого использования SessionTokenManager
print("3. Прямое использование SessionTokenManager...")
sessions = SessionTokenManager()
valid, data = await sessions.validate_session_token(token)
print(f" Валидация: {valid}, данные: {bool(data)}")
# Тест мониторинга
print("4. Мониторинг токенов...")
monitoring = TokenMonitoring()
stats = await monitoring.get_token_statistics()
print(f" Активных сессий: {stats.get('session_tokens', 0)}")
# Тест мониторинга
print("4. Мониторинг токенов...")
monitoring = TokenMonitoring()
stats = await monitoring.get_token_statistics()
print(f" Активных сессий: {stats.get('session_tokens', 0)}")
# Очистка
print("5. Отзыв сессии...")
revoked = await TokenStorage.revoke_session(token)
print(f" Отозван: {revoked}")
# Очистка
print("5. Отзыв сессии...")
revoked = await TokenStorage.revoke_session(token)
print(f" Отозван: {revoked}")
print("Все тесты пройдены успешно!")
return True
print("Все тесты пройдены успешно!")
return True
finally:
# Безопасное закрытие клиента с использованием aclose()
if hasattr(redis_client, 'aclose'):
await redis_client.aclose()
elif hasattr(redis_client, 'close'):
await redis_client.close()