ForcePilot/backend/test/unit/channels/test_wechat_format.py
Kris 3264900bc9 test: 新增多渠道单元测试用例并配置测试环境变量
新增了Twitch、Telegram、Discord、Slack、Mattermost、WeChat、Zalo等多渠道的单元测试用例,覆盖了令牌处理、速率限制、消息去重、会话解析、格式转换、安全策略等模块
同时在测试配置中添加了测试用的OpenAI API密钥环境变量
2026-05-12 00:56:47 +08:00

87 lines
2.5 KiB
Python

from __future__ import annotations
from yuxi.channels.adapters.wechat.format import (
map_wecom_msg_type,
map_mp_msg_type,
map_bridge_msg_type,
truncate_text,
TRUNCATION_MARKER,
)
from yuxi.channels.models import MessageType
class TestMessageTypeMapping:
def test_map_wecom_text(self):
assert map_wecom_msg_type("text") == MessageType.TEXT
def test_map_wecom_image(self):
assert map_wecom_msg_type("image") == MessageType.IMAGE
def test_map_wecom_voice(self):
assert map_wecom_msg_type("voice") == MessageType.AUDIO
def test_map_wecom_video(self):
assert map_wecom_msg_type("video") == MessageType.VIDEO
def test_map_wecom_file(self):
assert map_wecom_msg_type("file") == MessageType.FILE
def test_map_wecom_location(self):
assert map_wecom_msg_type("location") == MessageType.LOCATION
def test_map_wecom_unknown(self):
assert map_wecom_msg_type("unknown") == MessageType.TEXT
def test_map_mp_text(self):
assert map_mp_msg_type("text") == MessageType.TEXT
def test_map_mp_image(self):
assert map_mp_msg_type("image") == MessageType.IMAGE
def test_map_mp_voice(self):
assert map_mp_msg_type("voice") == MessageType.AUDIO
def test_map_bridge_text(self):
assert map_bridge_msg_type(1) == MessageType.TEXT
def test_map_bridge_image(self):
assert map_bridge_msg_type(3) == MessageType.IMAGE
def test_map_bridge_voice(self):
assert map_bridge_msg_type(34) == MessageType.AUDIO
def test_map_bridge_video(self):
assert map_bridge_msg_type(43) == MessageType.VIDEO
def test_map_bridge_file(self):
assert map_bridge_msg_type(49) == MessageType.FILE
def test_map_bridge_unknown(self):
assert map_bridge_msg_type(99) == MessageType.TEXT
class TestTextTruncation:
def test_no_truncation_needed(self):
text = "短文本"
result = truncate_text(text, 100)
assert result == text
assert len(result) <= 100
def test_truncation_applied(self):
text = "A" * 3000
result = truncate_text(text, 100)
assert len(result) <= 100
assert TRUNCATION_MARKER in result
def test_truncation_exact_limit(self):
text = "A" * 100
result = truncate_text(text, 100)
assert result == text
def test_truncation_at_boundary(self):
text = "A" * 101
result = truncate_text(text, 100)
assert len(result) <= 100
assert TRUNCATION_MARKER in result