新增了Twitch、Telegram、Discord、Slack、Mattermost、WeChat、Zalo等多渠道的单元测试用例,覆盖了令牌处理、速率限制、消息去重、会话解析、格式转换、安全策略等模块 同时在测试配置中添加了测试用的OpenAI API密钥环境变量
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import asyncio
|
|
|
|
import pytest
|
|
|
|
from yuxi.channels.adapters.twitch.rate_limiter import RateLimiter
|
|
|
|
|
|
class TestRateLimiter:
|
|
@pytest.mark.asyncio
|
|
async def test_acquire_initial_tokens(self):
|
|
limiter = RateLimiter(limit=5, window=30.0)
|
|
for _ in range(5):
|
|
assert await limiter.acquire() is True
|
|
assert await limiter.acquire() is False
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_switch_to_mod_increases_limit(self):
|
|
limiter = RateLimiter(limit=5, window=30.0, mod_limit=10)
|
|
await limiter.switch_to_mod()
|
|
for _ in range(10):
|
|
assert await limiter.acquire() is True
|
|
assert await limiter.acquire() is False
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_switch_to_known_decreases_limit(self):
|
|
limiter = RateLimiter(limit=2, window=30.0, mod_limit=10)
|
|
await limiter.switch_to_mod()
|
|
for _ in range(10):
|
|
assert await limiter.acquire() is True
|
|
await limiter.switch_to_known()
|
|
assert await limiter.acquire() is True
|
|
assert await limiter.acquire() is True
|
|
assert await limiter.acquire() is False
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_switch_to_mod_idempotent(self):
|
|
limiter = RateLimiter(limit=2, window=30.0, mod_limit=10)
|
|
await limiter.switch_to_mod()
|
|
tokens_before = limiter.available_tokens
|
|
await limiter.switch_to_mod()
|
|
assert limiter.available_tokens == tokens_before
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_available_tokens_property(self):
|
|
limiter = RateLimiter(limit=3, window=30.0)
|
|
assert limiter.available_tokens == 3.0
|
|
await limiter.acquire()
|
|
assert limiter.available_tokens < 3.0 |