| import pytest |
| import os |
| from astrbot.core.star.star_manager import PluginManager |
| from astrbot.core.star.star_handler import star_handlers_registry |
| from astrbot.core.star.star import star_registry |
| from astrbot.core.star.context import Context |
| from astrbot.core.config.astrbot_config import AstrBotConfig |
| from astrbot.core.db.sqlite import SQLiteDatabase |
| from asyncio import Queue |
|
|
| event_queue = Queue() |
|
|
| config = AstrBotConfig() |
|
|
| db = SQLiteDatabase("data/data_v3.db") |
|
|
| star_context = Context(event_queue, config, db) |
|
|
|
|
| @pytest.fixture |
| def plugin_manager_pm(): |
| return PluginManager(star_context, config) |
|
|
|
|
| def test_plugin_manager_initialization(plugin_manager_pm: PluginManager): |
| assert plugin_manager_pm is not None |
| assert plugin_manager_pm.context is not None |
| assert plugin_manager_pm.config is not None |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_plugin_manager_reload(plugin_manager_pm: PluginManager): |
| success, err_message = await plugin_manager_pm.reload() |
| assert success is True |
| assert err_message is None |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_plugin_crud(plugin_manager_pm: PluginManager): |
| """测试插件安装和重载""" |
| os.makedirs("data/plugins", exist_ok=True) |
| test_repo = "https://github.com/Soulter/astrbot_plugin_essential" |
| plugin_path = await plugin_manager_pm.install_plugin(test_repo) |
| exists = False |
| for md in star_registry: |
| if md.name == "astrbot_plugin_essential": |
| exists = True |
| break |
| assert plugin_path is not None |
| assert os.path.exists(plugin_path) |
| assert exists is True, "插件 astrbot_plugin_essential 未成功载入" |
| |
|
|
| |
| with pytest.raises(Exception): |
| plugin_path = await plugin_manager_pm.install_plugin(test_repo + "haha") |
|
|
| |
| await plugin_manager_pm.update_plugin("astrbot_plugin_essential") |
|
|
| with pytest.raises(Exception): |
| await plugin_manager_pm.update_plugin("astrbot_plugin_essentialhaha") |
|
|
| |
| await plugin_manager_pm.uninstall_plugin("astrbot_plugin_essential") |
| assert not os.path.exists(plugin_path) |
| exists = False |
| for md in star_registry: |
| if md.name == "astrbot_plugin_essential": |
| exists = True |
| break |
| assert exists is False, "插件 astrbot_plugin_essential 未成功卸载" |
| exists = False |
| for md in star_handlers_registry: |
| if "astrbot_plugin_essential" in md.handler_module_path: |
| exists = True |
| break |
| assert exists is False, "插件 astrbot_plugin_essential 未成功卸载" |
|
|
| with pytest.raises(Exception): |
| await plugin_manager_pm.uninstall_plugin("astrbot_plugin_essentialhaha") |
|
|
| |
|
|