77 lines
2.5 KiB
Python
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"
|