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

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