ForcePilot/backend/test/unit/channels/test_wechat_session.py

129 lines
4.3 KiB
Python
Raw Normal View History

from __future__ import annotations
from unittest.mock import MagicMock
import pytest
from yuxi.channels.adapters.wechat.session import (
build_session_route,
get_session_metadata,
resolve_chat_type,
)
from yuxi.channels.models import (
ChannelIdentity,
ChannelMessage,
ChannelType,
ChatType,
EventType,
MessageType,
)
def _make_message(chat_type="direct", wechat_mode="personal", channel_user_id="u1", channel_chat_id="") -> ChannelMessage:
return ChannelMessage(
identity=ChannelIdentity(
channel_id="wechat_test",
channel_type=ChannelType.WECHAT,
channel_user_id=channel_user_id,
channel_chat_id=channel_chat_id,
),
content="test",
chat_type=ChatType.DIRECT if chat_type == "direct" else ChatType.GROUP,
metadata={"wechat_mode": wechat_mode, "chat_type": chat_type},
)
class TestBuildSessionRoute:
def test_direct_personal_route(self):
msg = _make_message(chat_type="direct", wechat_mode="personal", channel_user_id="user001")
route = build_session_route(msg, "1")
assert route == "agent:1:wechat:personal:direct:user001"
def test_direct_wecom_route(self):
msg = _make_message(chat_type="direct", wechat_mode="wecom", channel_user_id="u_wecom")
route = build_session_route(msg, "5")
assert route == "agent:5:wechat:wecom:direct:u_wecom"
def test_group_personal_route(self):
msg = _make_message(chat_type="group", wechat_mode="personal", channel_chat_id="group789")
route = build_session_route(msg, "2")
assert route == "agent:2:wechat:personal:group:group789"
def test_group_wecom_route(self):
msg = _make_message(chat_type="group", wechat_mode="wecom", channel_chat_id="ww_group")
route = build_session_route(msg, "3")
assert route == "agent:3:wechat:wecom:group:ww_group"
def test_custom_default_agent(self):
msg = _make_message(channel_user_id="test_user")
route = build_session_route(msg, "42")
assert route.startswith("agent:42:")
def test_mp_mode_route(self):
msg = _make_message(chat_type="direct", wechat_mode="mp", channel_user_id="openid_123")
route = build_session_route(msg, "1")
assert route == "agent:1:wechat:mp:direct:openid_123"
class TestGetSessionMetadata:
def test_basic_metadata(self):
msg = _make_message(
chat_type="direct",
wechat_mode="personal",
channel_user_id="u1",
channel_chat_id="c1",
)
meta = get_session_metadata(msg)
assert meta["chat_type"] == "direct"
assert meta["wechat_mode"] == "personal"
assert meta["channel_user_id"] == "u1"
assert meta["channel_chat_id"] == "c1"
def test_group_metadata(self):
msg = _make_message(
chat_type="group",
wechat_mode="wecom",
channel_user_id="u2",
channel_chat_id="g999",
)
meta = get_session_metadata(msg)
assert meta["chat_type"] == "group"
assert meta["wechat_mode"] == "wecom"
def test_metadata_defaults(self):
msg = ChannelMessage(
identity=ChannelIdentity(
channel_id="wechat_test",
channel_type=ChannelType.WECHAT,
channel_user_id="u",
channel_chat_id="",
),
content="test",
metadata={},
)
meta = get_session_metadata(msg)
assert meta["chat_type"] == "direct"
assert meta["wechat_mode"] == "personal"
class TestResolveChatType:
def test_direct_chat_type(self):
msg = _make_message(chat_type="direct")
assert resolve_chat_type(msg) == ChatType.DIRECT
def test_group_chat_type(self):
msg = _make_message(chat_type="group")
assert resolve_chat_type(msg) == ChatType.GROUP
def test_unknown_defaults_to_direct(self):
msg = ChannelMessage(
identity=ChannelIdentity(
channel_id="wechat_test",
channel_type=ChannelType.WECHAT,
channel_user_id="u",
channel_chat_id="",
),
content="test",
metadata={},
)
assert resolve_chat_type(msg) == ChatType.DIRECT