diff --git a/tests/builtin_plugins/auto_update/test_check_update.py b/tests/builtin_plugins/auto_update/test_check_update.py index 8a505401..97ee18fa 100644 --- a/tests/builtin_plugins/auto_update/test_check_update.py +++ b/tests/builtin_plugins/auto_update/test_check_update.py @@ -207,7 +207,7 @@ def init_mocker_path(mocker: MockerFixture, tmp_path: Path): ) mocker.patch( - "zhenxun.builtin_plugins.auto_update._data_source.install_requirement", + "zhenxun.utils.manager.virtual_env_package_manager.VirtualEnvPackageManager.install_requirement", return_value=None, ) mock_tmp_path = mocker.patch( diff --git a/tests/builtin_plugins/plugin_store/test_add_plugin.py b/tests/builtin_plugins/plugin_store/test_add_plugin.py index 5a0edab8..a36d504b 100644 --- a/tests/builtin_plugins/plugin_store/test_add_plugin.py +++ b/tests/builtin_plugins/plugin_store/test_add_plugin.py @@ -48,7 +48,7 @@ async def test_add_plugin_basic( mocked_api["zhenxun_bot_plugins_index_commit"].respond(404) mocked_api["zhenxun_bot_plugins_index_commit_proxy"].respond(404) - plugin_id = 1 + plugin_id = "search_image" async with app.test_matcher(_matcher) as ctx: bot = create_bot(ctx) @@ -65,7 +65,7 @@ async def test_add_plugin_basic( ctx.receive_event(bot=bot, event=event) ctx.should_call_send( event=event, - message=Message(message=f"正在添加插件 Id: {plugin_id}"), + message=Message(message=f"正在添加插件 Module: {plugin_id}"), result=None, bot=bot, ) @@ -118,7 +118,7 @@ async def test_add_plugin_basic_commit_version( mocked_api["zhenxun_bot_plugins_commit_proxy"].respond(404) mocked_api["zhenxun_bot_plugins_index_commit"].respond(404) mocked_api["zhenxun_bot_plugins_index_commit_proxy"].respond(404) - plugin_id = 3 + plugin_id = "bilibili_sub" async with app.test_matcher(_matcher) as ctx: bot = create_bot(ctx) @@ -135,7 +135,7 @@ async def test_add_plugin_basic_commit_version( ctx.receive_event(bot=bot, event=event) ctx.should_call_send( event=event, - message=Message(message=f"正在添加插件 Id: {plugin_id}"), + message=Message(message=f"正在添加插件 Module: {plugin_id}"), result=None, bot=bot, ) @@ -192,7 +192,7 @@ async def test_add_plugin_basic_is_not_dir( mocked_api["zhenxun_bot_plugins_index_commit"].respond(404) mocked_api["zhenxun_bot_plugins_index_commit_proxy"].respond(404) - plugin_id = 0 + plugin_id = "jitang" async with app.test_matcher(_matcher) as ctx: bot = create_bot(ctx) @@ -209,7 +209,7 @@ async def test_add_plugin_basic_is_not_dir( ctx.receive_event(bot=bot, event=event) ctx.should_call_send( event=event, - message=Message(message=f"正在添加插件 Id: {plugin_id}"), + message=Message(message=f"正在添加插件 Module: {plugin_id}"), result=None, bot=bot, ) @@ -265,7 +265,7 @@ async def test_add_plugin_extra( mocked_api["zhenxun_bot_plugins_index_commit"].respond(404) mocked_api["zhenxun_bot_plugins_index_commit_proxy"].respond(404) - plugin_id = 4 + plugin_id = "github_sub" async with app.test_matcher(_matcher) as ctx: bot = create_bot(ctx) @@ -282,7 +282,7 @@ async def test_add_plugin_extra( ctx.receive_event(bot=bot, event=event) ctx.should_call_send( event=event, - message=Message(message=f"正在添加插件 Id: {plugin_id}"), + message=Message(message=f"正在添加插件 Module: {plugin_id}"), result=None, bot=bot, ) @@ -339,7 +339,7 @@ async def test_plugin_not_exist_add( ) ctx.should_call_send( event=event, - message=Message(message="插件ID不存在..."), + message=Message(message="添加插件 Id: -1 失败 e: 插件ID不存在..."), result=None, bot=bot, ) @@ -385,7 +385,9 @@ async def test_add_plugin_exist( ) ctx.should_call_send( event=event, - message=Message(message="插件 识图 已安装,无需重复安装"), + message=Message( + message="添加插件 Id: 1 失败 e: 插件 识图 已安装,无需重复安装" + ), result=None, bot=bot, ) diff --git a/tests/builtin_plugins/plugin_store/test_remove_plugin.py b/tests/builtin_plugins/plugin_store/test_remove_plugin.py index 4d5e3ab1..fe2f92a9 100644 --- a/tests/builtin_plugins/plugin_store/test_remove_plugin.py +++ b/tests/builtin_plugins/plugin_store/test_remove_plugin.py @@ -96,7 +96,7 @@ async def test_plugin_not_exist_remove( ctx.receive_event(bot=bot, event=event) ctx.should_call_send( event=event, - message=Message(message="插件ID不存在..."), + message=Message(message="移除插件 Id: -1 失败 e: 插件ID不存在..."), result=None, bot=bot, ) diff --git a/tests/builtin_plugins/plugin_store/test_search_plugin.py b/tests/builtin_plugins/plugin_store/test_search_plugin.py index 404fee5e..3dd9bd4c 100644 --- a/tests/builtin_plugins/plugin_store/test_search_plugin.py +++ b/tests/builtin_plugins/plugin_store/test_search_plugin.py @@ -63,11 +63,11 @@ async def test_search_plugin_name( [ [ "", - 4, + 49, "github订阅", "订阅github用户或仓库", "xuanerwa", - "0.7", + "0.9", "普通插件", ] ], @@ -129,11 +129,11 @@ async def test_search_plugin_author( [ [ "", - 4, + 49, "github订阅", "订阅github用户或仓库", "xuanerwa", - "0.7", + "0.9", "普通插件", ] ], diff --git a/tests/builtin_plugins/plugin_store/test_update_plugin.py b/tests/builtin_plugins/plugin_store/test_update_plugin.py index 2cb88d1b..e252eb42 100644 --- a/tests/builtin_plugins/plugin_store/test_update_plugin.py +++ b/tests/builtin_plugins/plugin_store/test_update_plugin.py @@ -88,7 +88,7 @@ async def test_update_plugin_basic_is_new( ) mocker.patch( "zhenxun.builtin_plugins.plugin_store.data_source.StoreManager.get_loaded_plugins", - return_value=[("search_image", "0.1")], + return_value=[("search_image", "0.2")], ) plugin_id = 1 @@ -158,7 +158,7 @@ async def test_plugin_not_exist_update( ) ctx.should_call_send( event=event, - message=Message(message="插件ID不存在..."), + message=Message(message="更新插件 Id: -1 失败 e: 插件ID不存在..."), result=None, bot=bot, ) @@ -200,7 +200,9 @@ async def test_update_plugin_not_install( ) ctx.should_call_send( event=event, - message=Message(message="插件 识图 未安装,无法更新"), + message=Message( + message="更新插件 Id: 1 失败 e: 插件 识图 未安装,无法更新" + ), result=None, bot=bot, ) diff --git a/zhenxun/builtin_plugins/auto_update/_data_source.py b/zhenxun/builtin_plugins/auto_update/_data_source.py index b591acea..eca520d3 100644 --- a/zhenxun/builtin_plugins/auto_update/_data_source.py +++ b/zhenxun/builtin_plugins/auto_update/_data_source.py @@ -161,7 +161,6 @@ class UpdateManager: logger.debug(f"恢复旧的webui文件夹 {BACKUP_PATH}", COMMAND) BACKUP_PATH.rename(WEBUI_PATH) raise e - return "" @classmethod async def check_version(cls) -> str: diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index b952c9a8..eb58c632 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -164,7 +164,7 @@ class StoreManager: @classmethod async def get_plugin_by_value( cls, index_or_module: str, is_update: bool = False - ) -> StorePluginInfo: + ) -> tuple[StorePluginInfo, bool]: """获取插件信息 参数: @@ -177,19 +177,30 @@ class StoreManager: 返回: StorePluginInfo: 插件信息 + bool: 是否是外部插件 """ plugin_list, extra_plugin_list = await cls.get_data() - all_plugin_list = plugin_list + extra_plugin_list + plugin_info = None + is_external = False db_plugin_list = await cls.get_loaded_plugins("module") plugin_key = await cls._resolve_plugin_key(index_or_module) - plugin_info = next((p for p in all_plugin_list if p.module == plugin_key), None) + for p in plugin_list: + if p.module == plugin_key: + is_external = False + plugin_info = p + break + for p in extra_plugin_list: + if p.module == plugin_key: + is_external = True + plugin_info = p + break if not plugin_info: raise PluginStoreException(f"插件不存在: {plugin_key}") if not is_update and plugin_info.module in [p[0] for p in db_plugin_list]: raise PluginStoreException(f"插件 {plugin_info.name} 已安装,无需重复安装") if plugin_info.module not in [p[0] for p in db_plugin_list] and is_update: raise PluginStoreException(f"插件 {plugin_info.name} 未安装,无法更新") - return plugin_info + return plugin_info, is_external @classmethod async def add_plugin(cls, index_or_module: str) -> str: @@ -201,11 +212,9 @@ class StoreManager: 返回: str: 返回消息 """ - plugin_info = await cls.get_plugin_by_value(index_or_module) - is_external = True + plugin_info, is_external = await cls.get_plugin_by_value(index_or_module) if plugin_info.github_url is None: plugin_info.github_url = DEFAULT_GITHUB_URL - is_external = False version_split = plugin_info.version.split("-") if len(version_split) > 1: github_url_split = plugin_info.github_url.split("/tree/") @@ -301,7 +310,7 @@ class StoreManager: 返回: str: 返回消息 """ - plugin_info = await cls.get_plugin_by_value(index_or_module) + plugin_info, _ = await cls.get_plugin_by_value(index_or_module) path = BASE_PATH if plugin_info.github_url: path = BASE_PATH / "plugins" @@ -373,7 +382,7 @@ class StoreManager: 返回: str: 返回消息 """ - plugin_info = await cls.get_plugin_by_value(index_or_module, True) + plugin_info, is_external = await cls.get_plugin_by_value(index_or_module, True) logger.info(f"尝试更新插件 {plugin_info.name}", LOG_COMMAND) db_plugin_list = await cls.get_loaded_plugins("module", "version") suc_plugin = {p[0]: (p[1] or "Unknown") for p in db_plugin_list} @@ -383,7 +392,6 @@ class StoreManager: is_external = True if plugin_info.github_url is None: plugin_info.github_url = DEFAULT_GITHUB_URL - is_external = False await cls.install_plugin_with_repo( plugin_info.github_url, plugin_info.module_path, @@ -402,8 +410,9 @@ class StoreManager: 返回: str: 返回消息 """ - plugin_list: list[StorePluginInfo] = await cls.get_data() - plugin_name_list = [p.name for p in plugin_list] + plugin_list, extra_plugin_list = await cls.get_data() + all_plugin_list = plugin_list + extra_plugin_list + plugin_name_list = [p.name for p in all_plugin_list] update_failed_list = [] update_success_list = [] result = "--已更新{}个插件 {}个失败 {}个成功--"