conftest-fix
Some checks failed
Deploy on push / deploy (push) Failing after 2m47s

This commit is contained in:
2025-08-19 00:16:20 +03:00
parent 6b4f39ac14
commit 8250da0ca7

View File

@@ -5,17 +5,11 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
import time
import uuid
from starlette.testclient import TestClient
import requests
import subprocess
import signal
import asyncio
from typing import Optional, Generator, AsyncGenerator
from contextlib import asynccontextmanager
from typing import Optional
from unittest.mock import patch
from storage.redis import redis
from orm.base import BaseModel as Base
@@ -589,32 +583,38 @@ def redis_client():
@pytest.fixture(autouse=True)
def mock_redis_if_unavailable():
"""Автоматически мокает Redis если он недоступен"""
# В CI окружении всегда мокаем Redis
if os.getenv('CI') or os.getenv('GITHUB_ACTIONS'):
with patch('storage.redis.redis') as mock_redis:
# Создаем базовый mock для Redis методов
mock_redis.get.return_value = None
mock_redis.set.return_value = True
mock_redis.delete.return_value = True
mock_redis.exists.return_value = False
mock_redis.ping.return_value = True
mock_redis.is_connected = False
yield
return
# В локальной среде пробуем подключиться к Redis
try:
import redis
# Пробуем подключиться к Redis
r = redis.Redis(host='localhost', port=6379, socket_connect_timeout=1)
r.ping()
# Redis доступен, не мокаем
yield
except Exception:
# Redis недоступен, мокаем
import fakeredis.aioredis
# Используем fakeredis для тестов
with patch('storage.redis.redis') as mock_redis:
# Создаем fakeredis сервер
fake_redis = fakeredis.aioredis.FakeRedis()
# Создаем mock для execute метода, который эмулирует поведение RedisService.execute
async def mock_execute(command: str, *args):
cmd_method = getattr(fake_redis, command.lower(), None)
if cmd_method is not None:
if hasattr(cmd_method, '__call__'):
return await cmd_method(*args)
else:
return cmd_method
return None
# Патчим методы Redis
mock_redis.execute = mock_execute
mock_redis.get = fake_redis.get
mock_redis.set = fake_redis.set
mock_redis.delete = fake_redis.delete
mock_redis.exists = fake_redis.exists
mock_redis.ping = fake_redis.ping
mock_redis.is_connected = True
yield
except ImportError:
# fakeredis не установлен, используем базовый mock
with patch('storage.redis.redis') as mock_redis:
# Создаем базовый mock для Redis методов
mock_redis.execute.return_value = None
mock_redis.get.return_value = None
mock_redis.set.return_value = True
mock_redis.delete.return_value = True
@@ -623,3 +623,11 @@ def mock_redis_if_unavailable():
mock_redis.is_connected = False
yield
@pytest.fixture(autouse=True)
def ensure_rbac_initialized():
"""Обеспечивает инициализацию RBAC системы для каждого теста"""
import rbac
rbac.initialize_rbac()
yield