"""处理器装配与配置装配测试(不发起任何网络请求)。""" from qqbotsdk import Bot from authbot.config import AuthConfig from authbot.handlers import KICK_NOT_ALLOWED, setup def _bot() -> Bot: import os os.environ.setdefault("APPID", "test-appid") os.environ.setdefault("APPSECRET", "test-secret") return Bot(intents=0) # 掩码直传,避免读 intents.toml def test_config_defaults(monkeypatch, tmp_path): monkeypatch.delenv("VERIFY_TIMEOUT_MINUTES", raising=False) monkeypatch.delenv("TIMEOUT_KICK", raising=False) monkeypatch.delenv("DATA_DIR", raising=False) cfg = AuthConfig.load() assert cfg.verify_timeout_minutes == 10 assert cfg.timeout_kick is True assert cfg.timeout_fallback_mute_hours == 72 assert cfg.captcha_options == 4 assert cfg.verified_trust_days == 0 def test_config_env_override(monkeypatch, tmp_path): monkeypatch.setenv("VERIFY_TIMEOUT_MINUTES", "5") monkeypatch.setenv("TIMEOUT_KICK", "false") monkeypatch.setenv("DATA_DIR", str(tmp_path)) cfg = AuthConfig.load() assert cfg.verify_timeout_minutes == 5 assert cfg.timeout_kick is False assert cfg.data_dir == tmp_path def test_config_rejects_out_of_range(monkeypatch): monkeypatch.setenv("VERIFY_TIMEOUT_MINUTES", "0") try: AuthConfig.load() except ValueError as e: assert "VERIFY_TIMEOUT_MINUTES" in str(e) else: raise AssertionError("应当拒绝越界值") def test_setup_registers_all_handlers(tmp_path, monkeypatch): monkeypatch.setenv("DATA_DIR", str(tmp_path)) bot = _bot() cfg = AuthConfig.load() state = setup(bot, cfg) registered = { event for event, handlers in bot._emitter._handlers.items() # noqa: SLF001 if handlers } assert { "READY", "GROUP_MEMBER_ADD", "INTERACTION_CREATE", "GROUP_MEMBER_REMOVE", "GROUP_AT_MESSAGE_CREATE", } <= registered assert state.all_pending() == [] assert KICK_NOT_ALLOWED == 11253