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

89 lines
2.7 KiB
Python

from __future__ import annotations
import pytest
from yuxi.channels.sdk.normalizer import (
extract_mentions,
extract_urls,
normalize_timestamp,
normalize_user_id,
)
class TestNormalizeTimestamp:
def test_int_seconds(self):
assert normalize_timestamp(1715000000) == 1715000000.0
def test_int_milliseconds(self):
ts = 1715000000000
assert normalize_timestamp(ts) == 1715000000000.0
def test_float_seconds(self):
assert normalize_timestamp(1715000000.5) == 1715000000.5
def test_string_timestamp(self):
assert normalize_timestamp("1715000000.123") == 1715000000.123
def test_invalid_string_returns_zero(self):
assert normalize_timestamp("not-a-number") == 0.0
def test_none_returns_zero(self):
assert normalize_timestamp(None) == 0.0 # type: ignore[arg-type]
class TestNormalizeUserId:
def test_string_id(self):
assert normalize_user_id("user123") == "user123"
def test_int_id(self):
assert normalize_user_id(12345) == "12345"
def test_strips_whitespace(self):
assert normalize_user_id(" user123 ") == "user123"
class TestExtractMentions:
def test_extracts_single_mention(self):
result = extract_mentions("hello @alice how are you")
assert result == ["alice"]
def test_extracts_multiple_mentions(self):
result = extract_mentions("@alice @bob please review")
assert result == ["alice", "bob"]
def test_no_mentions(self):
result = extract_mentions("no mentions here")
assert result == []
def test_filter_by_bot_names(self):
text = "@bot1 @user1 @bot2"
result = extract_mentions(text, bot_names=["bot1", "bot2"])
assert result == ["bot1", "bot2"]
def test_partial_bot_name_match(self):
text = "@mybot @otherbot"
result = extract_mentions(text, bot_names=["mybot"])
assert result == ["mybot"]
class TestExtractUrls:
def test_extracts_http_url(self):
result = extract_urls("check http://example.com for info")
assert result == ["http://example.com"]
def test_extracts_https_url(self):
result = extract_urls("visit https://example.com/path?q=1 now")
assert result == ["https://example.com/path?q=1"]
def test_extracts_multiple_urls(self):
text = "see http://a.com and https://b.com/page"
result = extract_urls(text)
assert result == ["http://a.com", "https://b.com/page"]
def test_no_urls(self):
result = extract_urls("no urls in this text")
assert result == []
def test_url_in_parentheses(self):
result = extract_urls("link (https://example.com) here")
assert result == ["https://example.com"]