ForcePilot/backend/test/unit/channel/startup/test_config_service.py
Kris 6c95dc006a test: 新增渠道模块全链路单元测试用例与目录结构
完成渠道模块的单元测试目录搭建,新增多个领域模型、端口、中间件、事件、服务以及基础设施层的单元测试文件,同时补充了conftest.py的环境变量配置,完善测试基础环境。
2026-05-30 21:55:35 +08:00

82 lines
2.9 KiB
Python

from __future__ import annotations
from unittest.mock import AsyncMock, MagicMock
import pytest
from yuxi.channel.application.service.config_service import ConfigService
from yuxi.channel.domain.middleware.configurable import Configurable
from yuxi.channel.domain.service.pipeline import Pipeline
class TestConfigService:
@pytest.fixture
def mock_config_reload(self):
return AsyncMock()
@pytest.fixture
def mock_pipeline(self):
pipeline = MagicMock(spec=Pipeline)
pipeline.middlewares = []
return pipeline
@pytest.fixture
def mock_channel_config(self):
config = AsyncMock()
config.on_config_updated.return_value = ["auth_token"]
return config
@pytest.fixture
def config_service(self, mock_config_reload, mock_pipeline, mock_channel_config):
return ConfigService(
config_data={"auth": {"token": "old"}},
config_reload=mock_config_reload,
pipeline=mock_pipeline,
channel_config=mock_channel_config,
)
@pytest.mark.asyncio
async def test_reload(self, config_service, mock_config_reload):
mock_config_reload.reload.return_value = {"auth": {"token": "new"}}
updated, config_hash = await config_service.reload()
assert "auth_token" in updated
assert config_hash is not None
assert len(config_hash) == 8
@pytest.mark.asyncio
async def test_reload_no_change(self, config_service, mock_config_reload):
mock_config_reload.reload.return_value = {}
updated, config_hash = await config_service.reload()
assert updated == ["auth_token"]
@pytest.mark.asyncio
async def test_reload_with_configurable_middleware(self, config_service, mock_pipeline):
mock_mw = MagicMock(spec=Configurable)
mock_mw.on_config_updated.return_value = ["keyword_filter"]
mock_pipeline.middlewares = [mock_mw]
mock_config_reload = AsyncMock()
mock_config_reload.reload.return_value = {"keyword_blocklist": ["bad"]}
service = ConfigService(
config_data={},
config_reload=mock_config_reload,
pipeline=mock_pipeline,
)
updated, _ = await service.reload()
assert "keyword_filter" in updated
def test_config_property(self, config_service):
assert config_service.config == {"auth": {"token": "old"}}
def test_update_configurable_middlewares(self, config_service, mock_pipeline):
mock_mw = MagicMock(spec=Configurable)
mock_mw.on_config_updated.return_value = ["test_mw"]
mock_pipeline.middlewares = [mock_mw]
updated = config_service._update_configurable_middlewares()
assert "test_mw" in updated
def test_update_configurable_middlewares_no_configurable(self, config_service, mock_pipeline):
mock_pipeline.middlewares = [MagicMock()]
updated = config_service._update_configurable_middlewares()
assert updated == []