ForcePilot/backend/test/unit/channels/plugins/conftest.py

61 lines
2.8 KiB
Python
Raw Normal View History

"""channels plugins 层单元测试共享 fixture。
提供 ``fake_plugin_host`` 模拟 ``PluginHost`` 协议
``yuxi.channels.contract.plugin.entry.PluginHost``插件适配器测试
通过此桩获取被驱动端口与注册扩展点不依赖真实宿主实现
桩使用 ``MagicMock()``所有 ``getXxxPort()`` 返回对应 ``MagicMock``
调用方可按需覆盖为带 ``spec`` 的端口桩``registerXxx()`` 返回 ``None``
``publishEvent`` ``AsyncMock`` ``await``单文件独有的 helper 应保留
在对应测试文件内 testing-guidelines.md
"""
from __future__ import annotations
from unittest.mock import AsyncMock, MagicMock
import pytest
@pytest.fixture
def fake_plugin_host() -> MagicMock:
"""PluginHost 桩。
``MagicMock()`` 模拟 ``PluginHost``
- 所有 ``getXxxPort()`` 返回 ``MagicMock`` 调用方可覆盖为带
``spec`` 的端口桩 ``host.getLoggerPort.return_value = fake_logger``
- ``registerAdapter()`` / ``registerStageSlot()`` / ``registerEventSubscription()``
/ ``registerConfigSource()`` / ``registerMatchTier()`` / ``registerMatcher()``
返回 ``None``
- ``publishEvent`` ``AsyncMock`` ``await``返回 ``None``
"""
host = MagicMock()
# 端口获取:返回 MagicMock 桩,调用方可覆盖为带 spec 的端口桩
host.getConfigPort.return_value = MagicMock()
host.getLoggerPort.return_value = MagicMock()
host.getPersistencePort.return_value = MagicMock()
host.getCachePort.return_value = MagicMock()
host.getTracerPort.return_value = MagicMock()
host.getQueuePort.return_value = MagicMock()
host.getConversationPort.return_value = MagicMock()
host.getAgentRunPort.return_value = MagicMock()
host.getIdentityResolverPort.return_value = MagicMock()
host.getChannelAccountRepositoryPort.return_value = MagicMock()
host.getChannelSessionRepositoryPort.return_value = MagicMock()
host.getPairingRepositoryPort.return_value = MagicMock()
host.getAuditLogRepositoryPort.return_value = MagicMock()
host.getOutboxRepositoryPort.return_value = MagicMock()
host.getUserIdentityRepositoryPort.return_value = MagicMock()
host.getIdempotencyRepositoryPort.return_value = MagicMock()
host.getPersistenceHealthPort.return_value = MagicMock()
# 扩展点注册:返回 None
host.registerAdapter.return_value = None
host.registerStageSlot.return_value = None
host.registerEventSubscription.return_value = None
host.registerConfigSource.return_value = None
host.registerMatchTier.return_value = None
host.registerMatcher.return_value = None
# 事件发布async def使用 AsyncMock
host.publishEvent = AsyncMock(return_value=None)
return host