mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
fix(test): 修复测试工作流
- 修改自动更新模块中的导入路径 - 更新插件商店模块中的插件信息获取逻辑 - 优化插件添加、更新和移除流程 - 统一插件相关错误信息的格式 - 调整测试用例以适应新的插件管理逻辑
This commit is contained in:
parent
854eac68d8
commit
8889f8967e
@ -207,7 +207,7 @@ def init_mocker_path(mocker: MockerFixture, tmp_path: Path):
|
|||||||
)
|
)
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"zhenxun.builtin_plugins.auto_update._data_source.install_requirement",
|
"zhenxun.utils.manager.virtual_env_package_manager.VirtualEnvPackageManager.install_requirement",
|
||||||
return_value=None,
|
return_value=None,
|
||||||
)
|
)
|
||||||
mock_tmp_path = mocker.patch(
|
mock_tmp_path = mocker.patch(
|
||||||
|
|||||||
@ -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"].respond(404)
|
||||||
mocked_api["zhenxun_bot_plugins_index_commit_proxy"].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:
|
async with app.test_matcher(_matcher) as ctx:
|
||||||
bot = create_bot(ctx)
|
bot = create_bot(ctx)
|
||||||
@ -65,7 +65,7 @@ async def test_add_plugin_basic(
|
|||||||
ctx.receive_event(bot=bot, event=event)
|
ctx.receive_event(bot=bot, event=event)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message=f"正在添加插件 Id: {plugin_id}"),
|
message=Message(message=f"正在添加插件 Module: {plugin_id}"),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
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_commit_proxy"].respond(404)
|
||||||
mocked_api["zhenxun_bot_plugins_index_commit"].respond(404)
|
mocked_api["zhenxun_bot_plugins_index_commit"].respond(404)
|
||||||
mocked_api["zhenxun_bot_plugins_index_commit_proxy"].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:
|
async with app.test_matcher(_matcher) as ctx:
|
||||||
bot = create_bot(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.receive_event(bot=bot, event=event)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message=f"正在添加插件 Id: {plugin_id}"),
|
message=Message(message=f"正在添加插件 Module: {plugin_id}"),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
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"].respond(404)
|
||||||
mocked_api["zhenxun_bot_plugins_index_commit_proxy"].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:
|
async with app.test_matcher(_matcher) as ctx:
|
||||||
bot = create_bot(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.receive_event(bot=bot, event=event)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message=f"正在添加插件 Id: {plugin_id}"),
|
message=Message(message=f"正在添加插件 Module: {plugin_id}"),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
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"].respond(404)
|
||||||
mocked_api["zhenxun_bot_plugins_index_commit_proxy"].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:
|
async with app.test_matcher(_matcher) as ctx:
|
||||||
bot = create_bot(ctx)
|
bot = create_bot(ctx)
|
||||||
@ -282,7 +282,7 @@ async def test_add_plugin_extra(
|
|||||||
ctx.receive_event(bot=bot, event=event)
|
ctx.receive_event(bot=bot, event=event)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message=f"正在添加插件 Id: {plugin_id}"),
|
message=Message(message=f"正在添加插件 Module: {plugin_id}"),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
bot=bot,
|
||||||
)
|
)
|
||||||
@ -339,7 +339,7 @@ async def test_plugin_not_exist_add(
|
|||||||
)
|
)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message="插件ID不存在..."),
|
message=Message(message="添加插件 Id: -1 失败 e: 插件ID不存在..."),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
bot=bot,
|
||||||
)
|
)
|
||||||
@ -385,7 +385,9 @@ async def test_add_plugin_exist(
|
|||||||
)
|
)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message="插件 识图 已安装,无需重复安装"),
|
message=Message(
|
||||||
|
message="添加插件 Id: 1 失败 e: 插件 识图 已安装,无需重复安装"
|
||||||
|
),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
bot=bot,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -96,7 +96,7 @@ async def test_plugin_not_exist_remove(
|
|||||||
ctx.receive_event(bot=bot, event=event)
|
ctx.receive_event(bot=bot, event=event)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message="插件ID不存在..."),
|
message=Message(message="移除插件 Id: -1 失败 e: 插件ID不存在..."),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
bot=bot,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -63,11 +63,11 @@ async def test_search_plugin_name(
|
|||||||
[
|
[
|
||||||
[
|
[
|
||||||
"",
|
"",
|
||||||
4,
|
49,
|
||||||
"github订阅",
|
"github订阅",
|
||||||
"订阅github用户或仓库",
|
"订阅github用户或仓库",
|
||||||
"xuanerwa",
|
"xuanerwa",
|
||||||
"0.7",
|
"0.9",
|
||||||
"普通插件",
|
"普通插件",
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
@ -129,11 +129,11 @@ async def test_search_plugin_author(
|
|||||||
[
|
[
|
||||||
[
|
[
|
||||||
"",
|
"",
|
||||||
4,
|
49,
|
||||||
"github订阅",
|
"github订阅",
|
||||||
"订阅github用户或仓库",
|
"订阅github用户或仓库",
|
||||||
"xuanerwa",
|
"xuanerwa",
|
||||||
"0.7",
|
"0.9",
|
||||||
"普通插件",
|
"普通插件",
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|||||||
@ -88,7 +88,7 @@ async def test_update_plugin_basic_is_new(
|
|||||||
)
|
)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"zhenxun.builtin_plugins.plugin_store.data_source.StoreManager.get_loaded_plugins",
|
"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
|
plugin_id = 1
|
||||||
@ -158,7 +158,7 @@ async def test_plugin_not_exist_update(
|
|||||||
)
|
)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message="插件ID不存在..."),
|
message=Message(message="更新插件 Id: -1 失败 e: 插件ID不存在..."),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
bot=bot,
|
||||||
)
|
)
|
||||||
@ -200,7 +200,9 @@ async def test_update_plugin_not_install(
|
|||||||
)
|
)
|
||||||
ctx.should_call_send(
|
ctx.should_call_send(
|
||||||
event=event,
|
event=event,
|
||||||
message=Message(message="插件 识图 未安装,无法更新"),
|
message=Message(
|
||||||
|
message="更新插件 Id: 1 失败 e: 插件 识图 未安装,无法更新"
|
||||||
|
),
|
||||||
result=None,
|
result=None,
|
||||||
bot=bot,
|
bot=bot,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -161,7 +161,6 @@ class UpdateManager:
|
|||||||
logger.debug(f"恢复旧的webui文件夹 {BACKUP_PATH}", COMMAND)
|
logger.debug(f"恢复旧的webui文件夹 {BACKUP_PATH}", COMMAND)
|
||||||
BACKUP_PATH.rename(WEBUI_PATH)
|
BACKUP_PATH.rename(WEBUI_PATH)
|
||||||
raise e
|
raise e
|
||||||
return ""
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def check_version(cls) -> str:
|
async def check_version(cls) -> str:
|
||||||
|
|||||||
@ -164,7 +164,7 @@ class StoreManager:
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def get_plugin_by_value(
|
async def get_plugin_by_value(
|
||||||
cls, index_or_module: str, is_update: bool = False
|
cls, index_or_module: str, is_update: bool = False
|
||||||
) -> StorePluginInfo:
|
) -> tuple[StorePluginInfo, bool]:
|
||||||
"""获取插件信息
|
"""获取插件信息
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@ -177,19 +177,30 @@ class StoreManager:
|
|||||||
|
|
||||||
返回:
|
返回:
|
||||||
StorePluginInfo: 插件信息
|
StorePluginInfo: 插件信息
|
||||||
|
bool: 是否是外部插件
|
||||||
"""
|
"""
|
||||||
plugin_list, extra_plugin_list = await cls.get_data()
|
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")
|
db_plugin_list = await cls.get_loaded_plugins("module")
|
||||||
plugin_key = await cls._resolve_plugin_key(index_or_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:
|
if not plugin_info:
|
||||||
raise PluginStoreException(f"插件不存在: {plugin_key}")
|
raise PluginStoreException(f"插件不存在: {plugin_key}")
|
||||||
if not is_update and plugin_info.module in [p[0] for p in db_plugin_list]:
|
if not is_update and plugin_info.module in [p[0] for p in db_plugin_list]:
|
||||||
raise PluginStoreException(f"插件 {plugin_info.name} 已安装,无需重复安装")
|
raise PluginStoreException(f"插件 {plugin_info.name} 已安装,无需重复安装")
|
||||||
if plugin_info.module not in [p[0] for p in db_plugin_list] and is_update:
|
if plugin_info.module not in [p[0] for p in db_plugin_list] and is_update:
|
||||||
raise PluginStoreException(f"插件 {plugin_info.name} 未安装,无法更新")
|
raise PluginStoreException(f"插件 {plugin_info.name} 未安装,无法更新")
|
||||||
return plugin_info
|
return plugin_info, is_external
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def add_plugin(cls, index_or_module: str) -> str:
|
async def add_plugin(cls, index_or_module: str) -> str:
|
||||||
@ -201,11 +212,9 @@ class StoreManager:
|
|||||||
返回:
|
返回:
|
||||||
str: 返回消息
|
str: 返回消息
|
||||||
"""
|
"""
|
||||||
plugin_info = await cls.get_plugin_by_value(index_or_module)
|
plugin_info, is_external = await cls.get_plugin_by_value(index_or_module)
|
||||||
is_external = True
|
|
||||||
if plugin_info.github_url is None:
|
if plugin_info.github_url is None:
|
||||||
plugin_info.github_url = DEFAULT_GITHUB_URL
|
plugin_info.github_url = DEFAULT_GITHUB_URL
|
||||||
is_external = False
|
|
||||||
version_split = plugin_info.version.split("-")
|
version_split = plugin_info.version.split("-")
|
||||||
if len(version_split) > 1:
|
if len(version_split) > 1:
|
||||||
github_url_split = plugin_info.github_url.split("/tree/")
|
github_url_split = plugin_info.github_url.split("/tree/")
|
||||||
@ -301,7 +310,7 @@ class StoreManager:
|
|||||||
返回:
|
返回:
|
||||||
str: 返回消息
|
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
|
path = BASE_PATH
|
||||||
if plugin_info.github_url:
|
if plugin_info.github_url:
|
||||||
path = BASE_PATH / "plugins"
|
path = BASE_PATH / "plugins"
|
||||||
@ -373,7 +382,7 @@ class StoreManager:
|
|||||||
返回:
|
返回:
|
||||||
str: 返回消息
|
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)
|
logger.info(f"尝试更新插件 {plugin_info.name}", LOG_COMMAND)
|
||||||
db_plugin_list = await cls.get_loaded_plugins("module", "version")
|
db_plugin_list = await cls.get_loaded_plugins("module", "version")
|
||||||
suc_plugin = {p[0]: (p[1] or "Unknown") for p in db_plugin_list}
|
suc_plugin = {p[0]: (p[1] or "Unknown") for p in db_plugin_list}
|
||||||
@ -383,7 +392,6 @@ class StoreManager:
|
|||||||
is_external = True
|
is_external = True
|
||||||
if plugin_info.github_url is None:
|
if plugin_info.github_url is None:
|
||||||
plugin_info.github_url = DEFAULT_GITHUB_URL
|
plugin_info.github_url = DEFAULT_GITHUB_URL
|
||||||
is_external = False
|
|
||||||
await cls.install_plugin_with_repo(
|
await cls.install_plugin_with_repo(
|
||||||
plugin_info.github_url,
|
plugin_info.github_url,
|
||||||
plugin_info.module_path,
|
plugin_info.module_path,
|
||||||
@ -402,8 +410,9 @@ class StoreManager:
|
|||||||
返回:
|
返回:
|
||||||
str: 返回消息
|
str: 返回消息
|
||||||
"""
|
"""
|
||||||
plugin_list: list[StorePluginInfo] = await cls.get_data()
|
plugin_list, extra_plugin_list = await cls.get_data()
|
||||||
plugin_name_list = [p.name for p in plugin_list]
|
all_plugin_list = plugin_list + extra_plugin_list
|
||||||
|
plugin_name_list = [p.name for p in all_plugin_list]
|
||||||
update_failed_list = []
|
update_failed_list = []
|
||||||
update_success_list = []
|
update_success_list = []
|
||||||
result = "--已更新{}个插件 {}个失败 {}个成功--"
|
result = "--已更新{}个插件 {}个失败 {}个成功--"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user