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

80 lines
2.5 KiB
Python

from __future__ import annotations
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from yuxi.channel.startup import get_container, init_channel, register_channel_middleware, shutdown_channel
class TestInitChannel:
@pytest.mark.asyncio
async def test_init_channel_sets_global_container(self, tmp_path):
config_file = tmp_path / "channel_config.yaml"
config_file.write_text("{}")
mock_container = MagicMock()
mock_container.shutdown = AsyncMock()
with patch("yuxi.channel.startup.ChannelContainerFactory.create", new_callable=AsyncMock, return_value=mock_container):
container = await init_channel(
redis_url="redis://localhost:6379/0",
config_yaml_path=str(config_file),
)
assert container is mock_container
assert get_container() is mock_container
await shutdown_channel()
class TestShutdownChannel:
@pytest.mark.asyncio
async def test_shutdown_channel_calls_shutdown(self):
mock_container = MagicMock()
mock_container.shutdown = AsyncMock()
with patch("yuxi.channel.startup.ChannelContainerFactory.create", new_callable=AsyncMock, return_value=mock_container):
await init_channel(redis_url="redis://localhost:6379/0")
await shutdown_channel()
mock_container.shutdown.assert_awaited_once()
assert get_container() is None
@pytest.mark.asyncio
async def test_shutdown_channel_with_provided_container(self):
mock_container = MagicMock()
mock_container.shutdown = AsyncMock()
await shutdown_channel(mock_container)
mock_container.shutdown.assert_awaited_once()
@pytest.mark.asyncio
async def test_shutdown_channel_handles_none(self):
await shutdown_channel(None)
class TestGetContainer:
def test_get_container_returns_none_initially(self):
assert get_container() is None
class TestRegisterChannelMiddleware:
def test_register_channel_middleware_sets_state(self):
mock_container = MagicMock()
with patch("yuxi.channel.startup._container", mock_container):
app = MagicMock()
register_channel_middleware(app)
assert app.state.channel is mock_container
def test_register_channel_middleware_skips_when_no_container(self):
with patch("yuxi.channel.startup._container", None):
app = MagicMock()
register_channel_middleware(app)
assert not hasattr(app.state, "channel")