Files
beaver_project/app-instance/backend/tests/unit/test_imports.py

82 lines
2.9 KiB
Python

from beaver.engine import AgentLoop, EngineLoader
from beaver.foundation.events import InboundMessage, MessageBus, OutboundMessage
from beaver.interfaces.channels import ChannelManager, MemoryChannelAdapter
from beaver.interfaces.gateway.main import run_gateway
from beaver.interfaces.web.app import create_app
from beaver.interfaces.web.schemas import WebChatRequest, WebChatResponse
def test_platform_channel_modules_import_without_live_clients() -> None:
from beaver.interfaces.channels.platforms.feishu import FeishuAdapter
from beaver.interfaces.channels.platforms.qqbot import QQBotAdapter
from beaver.interfaces.channels.platforms.telegram import TelegramAdapter
from beaver.interfaces.channels.platforms.weixin import WeixinAdapter
assert FeishuAdapter.KIND == "feishu"
assert QQBotAdapter.KIND == "qqbot"
assert TelegramAdapter.KIND == "telegram"
assert WeixinAdapter.KIND == "weixin"
def test_platform_channel_optional_extras_are_declared() -> None:
import tomllib
from pathlib import Path
pyproject = Path(__file__).resolve().parents[2] / "pyproject.toml"
data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
extras = data["project"]["optional-dependencies"]
assert "python-telegram-bot>=22.0,<23.0" in extras["telegram"]
assert "lark-oapi>=1.4.22,<2.0.0" in extras["feishu"]
assert "aiohttp>=3.9.0,<4.0.0" in extras["qqbot"]
assert "aiohttp>=3.9.0,<4.0.0" in extras["weixin"]
assert "python-telegram-bot>=22.0,<23.0" in extras["channels"]
assert "lark-oapi>=1.4.22,<2.0.0" in extras["channels"]
def test_agent_loop_boots(tmp_path) -> None:
loop = AgentLoop(loader=EngineLoader(workspace=tmp_path))
loaded = loop.boot()
assert "echo" in loaded.tools
assert "memory" in loaded.tools
assert "session_search" in loaded.tools
def test_web_app_factory() -> None:
app = create_app()
assert app.title == "Beaver Backend"
def test_gateway_entry_imports() -> None:
assert callable(run_gateway)
def test_message_bus_imports() -> None:
bus = MessageBus()
assert isinstance(bus, MessageBus)
assert InboundMessage(channel="test", content="hello").channel == "test"
assert OutboundMessage(channel="test", content="ok", session_id=None, finish_reason="stop").content == "ok"
def test_channel_imports() -> None:
bus = MessageBus()
class Sink:
async def accept_inbound(self, message):
await bus.publish_inbound(message)
channel = MemoryChannelAdapter(Sink())
manager = ChannelManager(bus)
manager.register(channel)
assert manager.channels["memory-dev"] is channel
def test_web_schema_imports() -> None:
assert WebChatRequest(message="hello").message == "hello"
assert WebChatResponse(
session_id="s",
run_id="r",
output_text="ok",
finish_reason="stop",
tool_iterations=0,
).output_text == "ok"