refactored
Some checks failed
Deploy on push / deploy (push) Failing after 6s

This commit is contained in:
2025-08-17 17:56:31 +03:00
parent e78e12eeee
commit 9a2b792f08
98 changed files with 702 additions and 904 deletions

View File

@@ -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__)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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(

View File

@@ -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):

View File

@@ -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

View File

@@ -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()

View File

@@ -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
# Вызываем резолвер напрямую

View File

@@ -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

View File

@@ -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):

View File

@@ -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

View File

@@ -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:

View File

@@ -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

View File

@@ -7,7 +7,7 @@
import pytest
import asyncio
import json
from services.redis import RedisService
from storage.redis import RedisService
class TestRedisFunctionality:

View File

@@ -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

View File

@@ -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

View File

@@ -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")

View File

@@ -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")