Files
wecom_it_smart_desk/backend/tests/automation/conftest.py
T

63 lines
2.1 KiB
Python
Raw Normal View History

# =============================================================================
# 复杂场景重构 — 自动化测试局部 conftest
# =============================================================================
# 说明:扩展全局 MockRedis,增加 sadd/srem 方法(session_manager 和
# timeout_cleaner 中使用了 Redis SET 操作)。
# =============================================================================
from typing import Dict, Set
from tests.conftest import MockRedis
class ExtendedMockRedis(MockRedis):
"""扩展 MockRedis,支持 sadd/srem/smembers 操作。
session_manager.pause_session 使用 redis.sadd() 向暂停会话集合添加成员,
resume_session / agent_close / timeout_cleaner 使用 redis.srem() 移除成员。
基础 MockRedis 不含这些方法,此处扩展。
"""
def __init__(self):
super().__init__()
self._sets: Dict[str, Set[str]] = {}
async def sadd(self, name: str, *values) -> int:
"""模拟 Redis SADD 命令。"""
s = self._sets.setdefault(name, set())
count = 0
for v in values:
v_str = v.decode("utf-8") if isinstance(v, bytes) else str(v)
if v_str not in s:
s.add(v_str)
count += 1
return count
async def srem(self, name: str, *values) -> int:
"""模拟 Redis SREM 命令。"""
s = self._sets.get(name, set())
count = 0
for v in values:
v_str = v.decode("utf-8") if isinstance(v, bytes) else str(v)
if v_str in s:
s.discard(v_str)
count += 1
return count
async def smembers(self, name: str) -> Set[str]:
"""模拟 Redis SMEMBERS 命令。"""
return set(self._sets.get(name, set()))
def reset(self) -> None:
"""重置所有数据。"""
super().reset()
self._sets.clear()
import pytest
@pytest.fixture
def mock_redis():
"""覆盖全局 mock_redis fixture,返回支持 sadd/srem 的扩展版本。"""
return ExtendedMockRedis()