新增了Twitch、Telegram、Discord、Slack、Mattermost、WeChat、Zalo等多渠道的单元测试用例,覆盖了令牌处理、速率限制、消息去重、会话解析、格式转换、安全策略等模块 同时在测试配置中添加了测试用的OpenAI API密钥环境变量
66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from yuxi.channels.adapters.telegram.security import TelegramSecurityPolicy
|
|
|
|
|
|
class TestPairingFixes:
|
|
def test_pairing_denies_unknown_user(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing", "pairing_code": "abc123"})
|
|
allowed, msg = policy.check_dm_policy("999")
|
|
assert not allowed
|
|
assert "not paired" in msg.lower()
|
|
|
|
def test_pair_user_with_correct_code(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing", "pairing_code": "abc123"})
|
|
ok, msg = policy.pair_user("999", "abc123")
|
|
assert ok
|
|
assert "paired" in msg.lower()
|
|
|
|
def test_pair_user_with_wrong_code(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing", "pairing_code": "abc123"})
|
|
ok, msg = policy.pair_user("999", "wrong_code")
|
|
assert not ok
|
|
assert "invalid" in msg.lower()
|
|
|
|
def test_paired_user_is_allowed(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing", "pairing_code": "abc123"})
|
|
policy.pair_user("999", "abc123")
|
|
allowed, msg = policy.check_dm_policy("999")
|
|
assert allowed
|
|
|
|
def test_unpair_user(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing", "pairing_code": "abc123"})
|
|
policy.pair_user("999", "abc123")
|
|
assert policy.unpair_user("999")
|
|
allowed, msg = policy.check_dm_policy("999")
|
|
assert not allowed
|
|
|
|
def test_unpair_nonexistent_user(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing", "pairing_code": "abc123"})
|
|
assert not policy.unpair_user("999")
|
|
|
|
def test_allowlist_still_works(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "allowlist", "allow_from": ["tg:111"]})
|
|
assert policy.check_dm_policy("111")[0]
|
|
assert not policy.check_dm_policy("999")[0]
|
|
|
|
def test_open_still_works(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "open"})
|
|
allowed, msg = policy.check_dm_policy("any_user")
|
|
assert allowed
|
|
|
|
def test_disabled_still_works(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "disabled"})
|
|
allowed, msg = policy.check_dm_policy("any_user")
|
|
assert not allowed
|
|
|
|
def test_verify_pairing_code_timing_safe(self):
|
|
policy = TelegramSecurityPolicy({"pairing_code": "secret123"})
|
|
assert policy.verify_pairing_code("secret123")
|
|
assert not policy.verify_pairing_code("wrong")
|
|
|
|
def test_autogenerated_pairing_code(self):
|
|
policy = TelegramSecurityPolicy({"dm_policy": "pairing"})
|
|
assert len(policy._pairing_code) == 12 |