Files
AstrBot/tests_v4/test_protocol_package.py

74 lines
2.6 KiB
Python

"""Tests for protocol package exports."""
from __future__ import annotations
import astrbot_sdk.protocol as protocol_module
from astrbot_sdk.protocol import (
CapabilityDescriptor,
CommandTrigger,
ErrorPayload,
EventMessage,
HandlerDescriptor,
InitializeMessage,
MessageTrigger,
PeerInfo,
ProtocolMessage,
ResultMessage,
ScheduleTrigger,
parse_message,
)
from astrbot_sdk.protocol.descriptors import BUILTIN_CAPABILITY_SCHEMAS
from astrbot_sdk.protocol.legacy_adapter import (
LegacyAdapter,
LegacyRequest,
parse_legacy_message,
)
class TestProtocolPackageExports:
"""Ensure protocol package exposes the intended public surface."""
def test_core_exports_are_importable(self):
"""Core protocol models and parsers should be importable from package root."""
handler = HandlerDescriptor(
id="demo.handler",
trigger=CommandTrigger(command="hello"),
)
message = InitializeMessage(
id="msg-1",
protocol_version="1.0",
peer=PeerInfo(name="plugin", role="plugin"),
handlers=[handler],
)
parsed: ProtocolMessage = parse_message(message)
assert isinstance(parsed, InitializeMessage)
assert isinstance(ErrorPayload(code="x", message="y"), ErrorPayload)
assert isinstance(
CapabilityDescriptor(
name="llm.chat",
description="chat",
input_schema=BUILTIN_CAPABILITY_SCHEMAS["llm.chat"]["input"],
output_schema=BUILTIN_CAPABILITY_SCHEMAS["llm.chat"]["output"],
),
CapabilityDescriptor,
)
assert isinstance(MessageTrigger(keywords=["hello"]), MessageTrigger)
assert isinstance(ScheduleTrigger(interval_seconds=60), ScheduleTrigger)
assert isinstance(EventMessage(id="evt-1", phase="started"), EventMessage)
assert isinstance(ResultMessage(id="res-1", success=True), ResultMessage)
def test_protocol_root_does_not_reexport_legacy_helpers(self):
"""protocol root should stay focused on native v4 models."""
assert not hasattr(protocol_module, "LegacyAdapter")
assert not hasattr(protocol_module, "LegacyRequest")
assert not hasattr(protocol_module, "parse_legacy_message")
def test_legacy_exports_are_available_from_submodule(self):
"""Legacy adapter helpers remain available from the explicit submodule."""
legacy = parse_legacy_message({"jsonrpc": "2.0", "method": "handshake"})
assert isinstance(legacy, LegacyRequest)
assert isinstance(LegacyAdapter(), LegacyAdapter)