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

95 lines
3.0 KiB
Python

from __future__ import annotations
import pytest
from yuxi.channels.adapters.wechat.errors import (
WECOM_ERROR_CODES,
MP_ERROR_CODES,
is_token_expired,
parse_mp_error,
parse_wecom_error,
)
class TestWeComErrorParsing:
def test_parse_wecom_success(self):
errcode, detail = parse_wecom_error({"errcode": 0, "errmsg": "ok"})
assert errcode == 0
assert "成功" in detail
def test_parse_wecom_invalid_access_token(self):
errcode, detail = parse_wecom_error({"errcode": 40014, "errmsg": "invalid access_token"})
assert errcode == 40014
assert "access_token" in detail
def test_parse_wecom_rate_limit(self):
errcode, detail = parse_wecom_error({"errcode": 45009, "errmsg": "api freq limit"})
assert errcode == 45009
assert "超过限制" in detail
def test_parse_wecom_unknown_error(self):
errcode, detail = parse_wecom_error({"errcode": 99999, "errmsg": "custom error"})
assert errcode == 99999
assert "custom error" in detail
def test_parse_wecom_no_errmsg(self):
errcode, detail = parse_wecom_error({"errcode": 40003})
assert errcode == 40003
assert "UserID" in detail
def test_parse_wecom_missing_errcode(self):
errcode, detail = parse_wecom_error({})
assert errcode == -1
assert "未知错误" in detail
class TestMPErrorParsing:
def test_parse_mp_success(self):
errcode, detail = parse_mp_error({"errcode": 0, "errmsg": "ok"})
assert errcode == 0
assert "成功" in detail
def test_parse_mp_expired_token(self):
errcode, detail = parse_mp_error({"errcode": 42001, "errmsg": "access_token expired"})
assert errcode == 42001
assert "超时" in detail
def test_parse_mp_require_subscribe(self):
errcode, detail = parse_mp_error({"errcode": 43004, "errmsg": "require subscribe"})
assert errcode == 43004
assert "需要接收者关注" in detail
def test_parse_mp_invalid_openid(self):
errcode, detail = parse_mp_error({"errcode": 40003, "errmsg": "invalid openid"})
assert errcode == 40003
assert "OpenID" in detail
class TestIsTokenExpired:
def test_40014_is_expired(self):
assert is_token_expired(40014) is True
def test_42001_is_expired(self):
assert is_token_expired(42001) is True
def test_zero_not_expired(self):
assert is_token_expired(0) is False
def test_unknown_not_expired(self):
assert is_token_expired(99999) is False
def test_45009_not_expired(self):
assert is_token_expired(45009) is False
class TestErrorCodeMaps:
def test_wecom_map_has_common_codes(self):
assert 40014 in WECOM_ERROR_CODES
assert 42001 in WECOM_ERROR_CODES
assert 45009 in WECOM_ERROR_CODES
def test_mp_map_has_common_codes(self):
assert 40014 in MP_ERROR_CODES
assert 42001 in MP_ERROR_CODES
assert 45009 in MP_ERROR_CODES
assert 45015 in MP_ERROR_CODES