This commit is contained in:
34
tests/auth/test_auth_service.py
Normal file
34
tests/auth/test_auth_service.py
Normal 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()
|
13
tests/auth/test_identity.py
Normal file
13
tests/auth/test_identity.py
Normal 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
|
@@ -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()
|
||||
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user