Files
mai-bot/tests/test_config_upgrade_hooks.py

77 lines
2.5 KiB
Python

from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from src.config.config_upgrade_hooks import (
BOT_CONFIG_UPGRADE_HOOKS,
ConfigUpgradeHook,
apply_config_upgrade_hooks,
set_nested_config_value,
)
from src.config.official_configs import ChatConfig
import src.config.config_upgrade_hooks as hooks
def test_apply_config_upgrade_hooks_runs_when_target_version_is_crossed(monkeypatch):
def migrate(data):
changed = set_nested_config_value(data, ("chat", "enable"), False)
return ["chat.enable"] if changed else []
monkeypatch.setattr(
hooks,
"BOT_CONFIG_UPGRADE_HOOKS",
(ConfigUpgradeHook(target_version="8.10.11", config_names=("bot_config.toml",), migrate=migrate),),
)
data = {"chat": {"enable": True}}
result = apply_config_upgrade_hooks(data, "bot_config.toml", "8.10.10", "8.10.11")
assert result.migrated is True
assert result.reason == "8.10.11:chat.enable"
assert result.data["chat"]["enable"] is False
def test_apply_config_upgrade_hooks_skips_versions_outside_upgrade_range(monkeypatch):
def migrate(data):
set_nested_config_value(data, ("chat", "enable"), False)
return ["chat.enable"]
monkeypatch.setattr(
hooks,
"BOT_CONFIG_UPGRADE_HOOKS",
(ConfigUpgradeHook(target_version="8.10.11", config_names=("bot_config.toml",), migrate=migrate),),
)
data = {"chat": {"enable": True}}
result = apply_config_upgrade_hooks(data, "bot_config.toml", "8.10.11", "8.10.12")
assert result.migrated is False
assert result.data["chat"]["enable"] is True
def test_set_nested_config_value_can_keep_existing_value():
data = {"webui": {"port": 8001}}
changed = set_nested_config_value(data, ("webui", "port"), 8080, force=False)
assert changed is False
assert data["webui"]["port"] == 8001
def test_builtin_hook_resets_group_chat_prompt_when_upgrading_from_8_10_10():
data = {"chat": {"group_chat_prompt": "自定义旧提示词"}}
result = apply_config_upgrade_hooks(data, "bot_config.toml", "8.10.10", "8.10.11")
assert result.migrated is True
assert result.reason == "8.10.11:chat.group_chat_prompt"
assert result.data["chat"]["group_chat_prompt"] == ChatConfig().group_chat_prompt
def test_bot_config_upgrade_hooks_register_group_chat_prompt_reset():
assert len(BOT_CONFIG_UPGRADE_HOOKS) == 1
assert BOT_CONFIG_UPGRADE_HOOKS[0].target_version == "8.10.11"