This commit is contained in:
@@ -7,7 +7,7 @@ from starlette.responses import JSONResponse, RedirectResponse
|
||||
|
||||
from auth.oauth import get_user_profile, oauth_callback_http, oauth_login_http
|
||||
from auth.orm import Author
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
# Настройка логгера
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -14,7 +14,7 @@ import asyncio
|
||||
from typing import Optional, Generator, AsyncGenerator
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from services.redis import redis
|
||||
from storage.redis import redis
|
||||
from orm.base import BaseModel as Base
|
||||
|
||||
|
||||
@@ -574,7 +574,7 @@ def mock_verify(monkeypatch):
|
||||
@pytest.fixture
|
||||
def redis_client():
|
||||
"""Создает Redis клиент для тестов токенов"""
|
||||
from services.redis import RedisService
|
||||
from storage.redis import RedisService
|
||||
|
||||
redis_service = RedisService()
|
||||
return redis_service._client
|
||||
@@ -593,7 +593,7 @@ def mock_redis_if_unavailable():
|
||||
yield
|
||||
except Exception:
|
||||
# Redis недоступен, мокаем
|
||||
with patch('services.redis.RedisService') as mock_redis:
|
||||
with patch('storage.redis.RedisService') as mock_redis:
|
||||
# Создаем базовый mock для Redis методов
|
||||
mock_redis.return_value.get.return_value = None
|
||||
mock_redis.return_value.set.return_value = True
|
||||
|
||||
@@ -11,7 +11,7 @@ from unittest.mock import patch, MagicMock
|
||||
|
||||
from auth.orm import Author
|
||||
from orm.community import Community, CommunityAuthor
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
|
||||
# Используем общую фикстуру из conftest.py
|
||||
|
||||
@@ -13,7 +13,7 @@ from auth.internal import verify_internal_auth
|
||||
from auth.permissions import ContextualPermissionCheck
|
||||
from orm.community import Community, CommunityAuthor
|
||||
from auth.permissions import ContextualPermissionCheck
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
|
||||
# Используем общую фикстуру из conftest.py
|
||||
|
||||
@@ -18,7 +18,7 @@ from orm.community import (
|
||||
assign_role_to_user,
|
||||
remove_role_from_user
|
||||
)
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
|
||||
# Используем общую фикстуру из conftest.py
|
||||
|
||||
@@ -12,13 +12,13 @@ from unittest.mock import patch, MagicMock
|
||||
|
||||
from auth.orm import Author
|
||||
from orm.community import Community, CommunityAuthor
|
||||
from services.rbac import (
|
||||
from rbac.api import (
|
||||
initialize_community_permissions,
|
||||
get_permissions_for_role,
|
||||
user_has_permission,
|
||||
roles_have_permission
|
||||
)
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
||||
@@ -55,8 +55,8 @@ def create_test_app():
|
||||
from ariadne.asgi import GraphQL
|
||||
from starlette.responses import JSONResponse
|
||||
|
||||
from services.db import Base
|
||||
from services.schema import resolvers
|
||||
from storage.db import Base
|
||||
from storage.schema import resolvers
|
||||
|
||||
# Создаем движок и таблицы
|
||||
engine = create_engine(
|
||||
|
||||
@@ -5,18 +5,18 @@ import pytest
|
||||
|
||||
# Импортируем все модули для покрытия
|
||||
import services
|
||||
import services.db
|
||||
import services.redis
|
||||
import services.rbac
|
||||
import storage.db
|
||||
import storage.redis
|
||||
import rbac.api
|
||||
import services.admin
|
||||
import services.auth
|
||||
import services.common_result
|
||||
import services.env
|
||||
import services.exception
|
||||
import utils.common_result
|
||||
import storage.env
|
||||
import utils.exception
|
||||
import services.notify
|
||||
import services.schema
|
||||
import storage.schema
|
||||
import services.search
|
||||
import services.sentry
|
||||
import utils.sentry
|
||||
import services.viewed
|
||||
|
||||
import utils
|
||||
@@ -83,18 +83,18 @@ class TestCoverageImports:
|
||||
def test_services_imports(self):
|
||||
"""Тест импорта модулей services"""
|
||||
assert services is not None
|
||||
assert services.db is not None
|
||||
assert services.redis is not None
|
||||
assert services.rbac is not None
|
||||
assert storage.db is not None
|
||||
assert storage.redis is not None
|
||||
assert rbac.api is not None
|
||||
assert services.admin is not None
|
||||
assert services.auth is not None
|
||||
assert services.common_result is not None
|
||||
assert services.env is not None
|
||||
assert services.exception is not None
|
||||
assert utils.common_result is not None
|
||||
assert storage.env is not None
|
||||
assert utils.exception is not None
|
||||
assert services.notify is not None
|
||||
assert services.schema is not None
|
||||
assert storage.schema is not None
|
||||
assert services.search is not None
|
||||
assert services.sentry is not None
|
||||
assert utils.sentry is not None
|
||||
assert services.viewed is not None
|
||||
|
||||
def test_utils_imports(self):
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
import pytest
|
||||
import json
|
||||
from unittest.mock import Mock
|
||||
from services.redis import redis
|
||||
from services.db import local_session
|
||||
from storage.redis import redis
|
||||
from storage.db import local_session
|
||||
from orm.community import Community
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import time
|
||||
from sqlalchemy import create_engine, Column, Integer, String, inspect
|
||||
from sqlalchemy.orm import declarative_base, Session
|
||||
|
||||
from services.db import create_table_if_not_exists, get_column_names_without_virtual, local_session
|
||||
from storage.db import create_table_if_not_exists, get_column_names_without_virtual, local_session
|
||||
|
||||
# Создаем базовую модель для тестирования
|
||||
Base = declarative_base()
|
||||
|
||||
@@ -95,9 +95,9 @@ async def test_create_shout(db_session, test_author):
|
||||
|
||||
# Мокаем local_session чтобы использовать тестовую сессию
|
||||
from unittest.mock import patch
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
with patch('services.db.local_session') as mock_local_session:
|
||||
with patch('storage.db.local_session') as mock_local_session:
|
||||
mock_local_session.return_value = db_session
|
||||
|
||||
result = await create_draft(
|
||||
@@ -126,9 +126,9 @@ async def test_load_drafts(db_session):
|
||||
|
||||
# Мокаем local_session чтобы использовать тестовую сессию
|
||||
from unittest.mock import patch
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
with patch('services.db.local_session') as mock_local_session:
|
||||
with patch('storage.db.local_session') as mock_local_session:
|
||||
mock_local_session.return_value = db_session
|
||||
|
||||
# Вызываем резолвер напрямую
|
||||
|
||||
@@ -16,7 +16,7 @@ import sys
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from cache.cache import get_cached_follower_topics
|
||||
from services.redis import redis
|
||||
from storage.redis import redis
|
||||
from utils.logger import root_logger as logger
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
def test_rbac_import():
|
||||
"""Тестируем импорт RBAC модуля"""
|
||||
try:
|
||||
from services.rbac import require_any_permission, require_permission
|
||||
from rbac.api import require_any_permission, require_permission
|
||||
|
||||
print("✅ RBAC модуль импортирован успешно")
|
||||
|
||||
@@ -29,7 +29,7 @@ def test_rbac_import():
|
||||
def test_require_permission_decorator():
|
||||
"""Тестируем декоратор require_permission"""
|
||||
try:
|
||||
from services.rbac import require_permission
|
||||
from rbac.api import require_permission
|
||||
|
||||
@require_permission("test:permission")
|
||||
async def test_func(*args, **kwargs):
|
||||
|
||||
@@ -12,14 +12,14 @@ import json
|
||||
|
||||
from auth.orm import Author
|
||||
from orm.community import Community, CommunityAuthor
|
||||
from services.rbac import (
|
||||
from rbac.api import (
|
||||
initialize_community_permissions,
|
||||
get_permissions_for_role,
|
||||
user_has_permission,
|
||||
roles_have_permission
|
||||
)
|
||||
from services.db import local_session
|
||||
from services.redis import redis
|
||||
from storage.db import local_session
|
||||
from storage.redis import redis
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
||||
@@ -10,14 +10,14 @@ from unittest.mock import patch, MagicMock
|
||||
|
||||
from auth.orm import Author
|
||||
from orm.community import Community, CommunityAuthor
|
||||
from services.rbac import (
|
||||
from rbac.api import (
|
||||
initialize_community_permissions,
|
||||
get_role_permissions_for_community,
|
||||
get_permissions_for_role,
|
||||
user_has_permission,
|
||||
roles_have_permission
|
||||
)
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -180,7 +180,7 @@ class TestRBACPermissionChecking:
|
||||
async def test_user_with_author_role_has_reader_permissions(self, db_session, test_users, test_community):
|
||||
"""Тест что пользователь с ролью author имеет разрешения reader"""
|
||||
# Используем local_session для создания записи
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
from orm.community import CommunityAuthor
|
||||
|
||||
with local_session() as session:
|
||||
@@ -214,7 +214,7 @@ class TestRBACPermissionChecking:
|
||||
async def test_user_with_editor_role_has_author_permissions(self, db_session, test_users, test_community):
|
||||
"""Тест что пользователь с ролью editor имеет разрешения author"""
|
||||
# Используем local_session для создания записи
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
from orm.community import CommunityAuthor
|
||||
|
||||
with local_session() as session:
|
||||
@@ -248,7 +248,7 @@ class TestRBACPermissionChecking:
|
||||
async def test_user_with_admin_role_has_all_permissions(self, db_session, test_users, test_community):
|
||||
"""Тест что пользователь с ролью admin имеет все разрешения"""
|
||||
# Используем local_session для создания записи
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
from orm.community import CommunityAuthor
|
||||
|
||||
with local_session() as session:
|
||||
|
||||
@@ -9,7 +9,7 @@ import pytest
|
||||
import redis.asyncio as aioredis
|
||||
from redis.asyncio import Redis
|
||||
|
||||
from services.redis import (
|
||||
from storage.redis import (
|
||||
RedisService,
|
||||
close_redis,
|
||||
init_redis,
|
||||
@@ -28,7 +28,7 @@ class TestRedisServiceInitialization:
|
||||
|
||||
def test_redis_service_init_without_aioredis(self):
|
||||
"""Тест инициализации без aioredis"""
|
||||
with patch("services.redis.aioredis", None):
|
||||
with patch("storage.redis.aioredis", None):
|
||||
service = RedisService()
|
||||
assert service._is_available is False
|
||||
|
||||
@@ -58,7 +58,7 @@ class TestRedisConnectionManagement:
|
||||
"""Тест успешного подключения"""
|
||||
service = RedisService()
|
||||
|
||||
with patch("services.redis.aioredis.from_url") as mock_from_url:
|
||||
with patch("storage.redis.aioredis.from_url") as mock_from_url:
|
||||
mock_client = AsyncMock()
|
||||
mock_client.ping = AsyncMock(return_value=True)
|
||||
mock_from_url.return_value = mock_client
|
||||
@@ -73,7 +73,7 @@ class TestRedisConnectionManagement:
|
||||
"""Тест неудачного подключения"""
|
||||
service = RedisService()
|
||||
|
||||
with patch("services.redis.aioredis.from_url") as mock_from_url:
|
||||
with patch("storage.redis.aioredis.from_url") as mock_from_url:
|
||||
mock_from_url.side_effect = Exception("Connection failed")
|
||||
|
||||
await service.connect()
|
||||
@@ -84,7 +84,7 @@ class TestRedisConnectionManagement:
|
||||
@pytest.mark.asyncio
|
||||
async def test_connect_without_aioredis(self):
|
||||
"""Тест подключения без aioredis"""
|
||||
with patch("services.redis.aioredis", None):
|
||||
with patch("storage.redis.aioredis", None):
|
||||
service = RedisService()
|
||||
await service.connect()
|
||||
assert service._client is None
|
||||
@@ -96,7 +96,7 @@ class TestRedisConnectionManagement:
|
||||
mock_existing_client = AsyncMock()
|
||||
service._client = mock_existing_client
|
||||
|
||||
with patch("services.redis.aioredis.from_url") as mock_from_url:
|
||||
with patch("storage.redis.aioredis.from_url") as mock_from_url:
|
||||
mock_client = AsyncMock()
|
||||
mock_client.ping = AsyncMock(return_value=True)
|
||||
mock_from_url.return_value = mock_client
|
||||
@@ -149,7 +149,7 @@ class TestRedisCommandExecution:
|
||||
@pytest.mark.asyncio
|
||||
async def test_execute_without_aioredis(self):
|
||||
"""Тест выполнения команды без aioredis"""
|
||||
with patch("services.redis.aioredis", None):
|
||||
with patch("storage.redis.aioredis", None):
|
||||
service = RedisService()
|
||||
result = await service.execute("test_command")
|
||||
assert result is None
|
||||
@@ -874,7 +874,7 @@ class TestAdditionalRedisCoverage:
|
||||
service._client = mock_client
|
||||
mock_client.close.side_effect = Exception("Close error")
|
||||
|
||||
with patch('services.redis.aioredis.from_url') as mock_from_url:
|
||||
with patch('storage.redis.aioredis.from_url') as mock_from_url:
|
||||
mock_new_client = AsyncMock()
|
||||
mock_from_url.return_value = mock_new_client
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
import pytest
|
||||
import asyncio
|
||||
import json
|
||||
from services.redis import RedisService
|
||||
from storage.redis import RedisService
|
||||
|
||||
|
||||
class TestRedisFunctionality:
|
||||
|
||||
@@ -14,7 +14,7 @@ import sys
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from cache.cache import get_cached_follower_topics
|
||||
from services.redis import redis
|
||||
from storage.redis import redis
|
||||
from utils.logger import root_logger as logger
|
||||
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from cache.cache import get_cached_follower_topics
|
||||
from orm.topic import Topic, TopicFollower
|
||||
from services.db import local_session
|
||||
from services.redis import redis
|
||||
from storage.db import local_session
|
||||
from storage.redis import redis
|
||||
from utils.logger import root_logger as logger
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ from auth.orm import Author
|
||||
from orm.community import assign_role_to_user
|
||||
from orm.shout import Shout
|
||||
from resolvers.editor import unpublish_shout
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
# Настройка логгера
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
|
||||
|
||||
@@ -18,7 +18,7 @@ sys.path.append(str(Path(__file__).parent))
|
||||
|
||||
from auth.orm import Author
|
||||
from resolvers.auth import update_security
|
||||
from services.db import local_session
|
||||
from storage.db import local_session
|
||||
|
||||
# Настройка логгера
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
|
||||
|
||||
Reference in New Issue
Block a user