diff options
author | Kyomotoi <[email protected]> | 2023-05-11 14:56:58 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2023-05-11 14:56:58 +0800 |
commit | cf2033627b63e4a444ee8971fd05f3e88e45fe86 (patch) | |
tree | 02c7b616dc94f63888413b5b9bb23fd95b29e8b2 /test | |
parent | 546885062c1dae673fb5e31dec900a4536a2b3fa (diff) | |
download | ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.tar.gz ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.tar.bz2 ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.zip |
✅ 更新测试用例
Diffstat (limited to 'test')
-rw-r--r-- | test/conftest.py | 21 | ||||
-rw-r--r-- | test/test_plugin_anime_search.py | 32 | ||||
-rw-r--r-- | test/test_plugin_applet.py | 28 | ||||
-rw-r--r-- | test/test_plugin_code_runner.py | 75 | ||||
-rw-r--r-- | test/test_plugin_funny.py | 113 | ||||
-rw-r--r-- | test/test_plugin_help.py | 168 | ||||
-rw-r--r-- | test/test_plugin_kimo.py | 42 | ||||
-rw-r--r-- | test/test_plugin_manage.py | 304 | ||||
-rw-r--r-- | test/test_plugin_saucenao.py | 22 | ||||
-rw-r--r-- | test/test_plugin_setu.py | 20 | ||||
-rw-r--r-- | test/utils.py | 121 |
11 files changed, 147 insertions, 799 deletions
diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 0000000..5f7c004 --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,21 @@ +import pytest + +import nonebot +from nonebot.adapters.onebot.v11 import Adapter as OnebotV11Adapter + +from nonebug import NONEBOT_INIT_KWARGS + + +def pytest_configure(config: pytest.Config): + config.stash[NONEBOT_INIT_KWARGS] = { + "superusers": {"1145141919"}, + "command_start": {""}, + } + + [email protected](scope="session", autouse=True) +def load_bot(nonebug_init: None): + driver = nonebot.get_driver() + driver.register_adapter(OnebotV11Adapter) + + nonebot.load_plugins("ATRI/plugins") diff --git a/test/test_plugin_anime_search.py b/test/test_plugin_anime_search.py deleted file mode 100644 index 4b21d2d..0000000 --- a/test/test_plugin_anime_search.py +++ /dev/null @@ -1,32 +0,0 @@ -import pytest -from nonebug import App - -from nonebot.adapters.onebot.v11 import MessageSegment - -from .utils import make_fake_message, make_fake_event - - -async def test_saucenao(app: App): - from ATRI.plugins.saucenao import saucenao - - Message = make_fake_message() - - async with app.test_matcher(saucenao) as ctx: - bot = ctx.create_bot() - - msg = Message("以图搜图") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "图呢?", True) - - msg = Message( - MessageSegment.image( - "https://jsd.imki.moe/gh/Kyomotoi/CDN@master/noting/88674944_p0.png" - ) - ) - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "失败了...", False) diff --git a/test/test_plugin_applet.py b/test/test_plugin_applet.py deleted file mode 100644 index a5aa5d9..0000000 --- a/test/test_plugin_applet.py +++ /dev/null @@ -1,28 +0,0 @@ -import pytest -from nonebug import App - -from .utils import make_fake_message, make_fake_event - - -async def test_bili_applet(app: App): - from ATRI.plugins.applet import bili_applet - - Message = make_fake_message() - - async with app.test_matcher(bili_applet) as ctx: - bot = ctx.create_bot() - - msg = Message("BV1Ff4y1C7YR") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - BV1Ff4y1C7YR INFO: - Title: 【8K30fps】这可能是画质最高的Rick Roll (doge) - Link: https://b23.tv/BV1Ff4y1C7YR - """, - True, - ) diff --git a/test/test_plugin_code_runner.py b/test/test_plugin_code_runner.py deleted file mode 100644 index ec9eb2d..0000000 --- a/test/test_plugin_code_runner.py +++ /dev/null @@ -1,75 +0,0 @@ -import pytest -from nonebug import App - -from .utils import make_fake_message, make_fake_event - - -async def test_code_runner(app: App): - from ATRI.plugins.code_runner import code_runner - - Message = make_fake_message() - - async with app.test_matcher(code_runner) as ctx: - bot = ctx.create_bot() - - msg = Message("/code") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "请键入 /code.help 以获取帮助~!", True) - - async with app.test_matcher(code_runner) as ctx: - bot = ctx.create_bot() - - msg = Message("/code.help") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - /code {语言} - {代码} - For example: - /code python - print('hello world') - """.strip(), - True, - ) - - async with app.test_matcher(code_runner) as ctx: - bot = ctx.create_bot() - - msg = Message("/code.list") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - 咱现在支持的语言如下: - assembly, bash, c, clojure, - coffeescript, cpp, csharp, - erlang, fsharp, go, groovy, - haskell, java, javascript, - julia, kotlin, lua, perl, - php, python, ruby, rust, - scala, swift, typescript - """.strip(), - True, - ) - - async with app.test_matcher(code_runner) as ctx: - bot = ctx.create_bot() - - msg = Message( - """ - /code python - print("hello world") - """ - ) - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "stdout:\nhello world", True) diff --git a/test/test_plugin_funny.py b/test/test_plugin_funny.py index 851a922..ff95f57 100644 --- a/test/test_plugin_funny.py +++ b/test/test_plugin_funny.py @@ -1,117 +1,36 @@ import pytest from nonebug import App -from .utils import make_fake_message, make_fake_event +from nonebot.adapters.onebot.v11 import Bot, Message - -async def test_get_laugh(app: App): - from ATRI.plugins.funny import get_laugh - - Message = make_fake_message() - - async with app.test_matcher(get_laugh) as ctx: - bot = ctx.create_bot() - - msg = Message("来句笑话") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "哈 哈 哈", True) - - -async def test_me_re_you(app: App): - from ATRI.plugins.funny import me_re_you - - Message = make_fake_message() - - async with app.test_matcher(me_re_you) as ctx: - bot = ctx.create_bot() - - msg = Message("超市我") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "超市你", True) +from .utils import group_message_event @pytest.mark.asyncio async def test_fake_msg(app: App): from ATRI.plugins.funny import fake_msg - Message = make_fake_message() - async with app.test_matcher(fake_msg) as ctx: - bot = ctx.create_bot() + bot = ctx.create_bot(base=Bot) - msg = Message("/fakemsg") - event = make_fake_event(_message=msg)() + event = group_message_event(message=Message("/fakemsg")) ctx.receive_event(bot, event) ctx.should_call_send(event, "内容呢?格式:qq-name-content\n可构造多条,以上仅为一条,使用空格隔开", True) - msg = Message("114514") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "内容格式错误,请检查(", True) - - async with app.test_matcher(fake_msg) as ctx: - bot = ctx.create_bot() - - msg = Message("/fakemsg") - event = make_fake_event(_message=msg)() + event = group_message_event(message=Message("114514-0w0-testing")) ctx.receive_event(bot, event) - ctx.should_call_send(event, "内容呢?格式:qq-name-content\n可构造多条,以上仅为一条,使用空格隔开", True) - - msg = Message("114514-0w0-testing") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - "[{'type': 'node', 'data': {'name': '0w0', 'uin': '114514', 'content': 'testing'}}]", + ctx.should_call_api( + "send_group_forward_msg", + { + "group_id": 10000, + "messages": [ + { + "type": "node", + "data": {"name": "0w0", "uin": "114514", "content": "testing"}, + } + ], + }, True, ) - - async with app.test_matcher(fake_msg) as ctx: - bot = ctx.create_bot() - - msg = Message("/fakemsg") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "内容呢?格式:qq-name-content\n可构造多条,以上仅为一条,使用空格隔开", True) - - msg = Message("114514-0w0-testing") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "构造失败惹...可能是被制裁了(", True) - - async with app.test_matcher(fake_msg) as ctx: - bot = ctx.create_bot() - - msg = Message("/fakemsg") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "慢...慢一..点❤", True) - - -async def test_eat_what(app: App): - from ATRI.plugins.funny import eat_what - - Message = make_fake_message() - - async with app.test_matcher(eat_what) as ctx: - bot = ctx.create_bot() - - msg = Message("今天吃什么") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "欧尼酱的智商低下想不到今天要吃甚么,所以由我来选择,我给的答案是(串烧)。选我正解!!", True) diff --git a/test/test_plugin_help.py b/test/test_plugin_help.py deleted file mode 100644 index fa7616a..0000000 --- a/test/test_plugin_help.py +++ /dev/null @@ -1,168 +0,0 @@ -import pytest -from nonebug import App - -from .utils import make_fake_message, make_fake_event - - -async def test_main_help(app: App): - from ATRI.plugins.help import menu - - Message = make_fake_message() - - async with app.test_matcher(menu) as ctx: - bot = ctx.create_bot() - - msg = Message("菜单") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - 哦呀?~需要帮助? - 关于 -查看bot基本信息 - 服务列表 -以查看所有可用服务 - 帮助 [服务] -以查看对应服务帮助 - Tip: 均需要at触发。@bot 菜单 以打开此页面 - """.strip(), - True, - ) - - -async def test_about_me(app: App): - from ATRI import __version__, conf - from ATRI.plugins.help import about - - temp_list = list() - for i in conf.BotConfig.nickname: - temp_list.append(i) - nickname = "、".join(map(str, temp_list)) - - Message = make_fake_message() - - async with app.test_matcher(about) as ctx: - bot = ctx.create_bot() - - msg = Message("关于") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - f""" - 唔...是来认识咱的么 - 可以称呼咱:{nickname} - 咱的型号是:{__version__} - 想进一步了解: - atri.kyomotoi.moe - 进不去: project-atri-docs.vercel.app - """.strip(), - True, - ) - - -async def test_service_list(app: App): - import os - import json - from tabulate import tabulate - - from ATRI.service import SERVICES_DIR - from ATRI.plugins.help import service_list - - files = os.listdir(SERVICES_DIR) - services = list() - for f in files: - prefix = f.replace(".json", "") - f = os.path.join(SERVICES_DIR, f) - with open(f, "r", encoding="utf-8") as r: - service = json.load(r) - services.append( - [ - prefix, - "√" if service["enabled"] else "×", - "√" if service["only_admin"] else "×", - ] - ) - table = tabulate( - services, - headers=["服务名称", "开启状态(全局)", "仅支持管理员"], - tablefmt="plain", - ) - output = f"咱搭载了以下服务~\n{table}\n@bot 帮助 [服务] -以查看对应服务帮助" - - Message = make_fake_message() - - async with app.test_matcher(service_list) as ctx: - bot = ctx.create_bot() - - msg = Message("服务列表") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - f""" - 咱搭载了以下服务~ - {output} - @bot 帮助 [服务] -以查看对应服务帮助 - """, - True, - ) - - -async def test_service_info(app: App): - from ATRI.plugins.help import service_info - - Message = make_fake_message() - - async with app.test_matcher(service_info) as ctx: - bot = ctx.create_bot() - - msg = Message("帮助") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "请检查是否输入错误呢...@bot 帮助 [服务]", True) - - async with app.test_matcher(service_info) as ctx: - bot = ctx.create_bot() - - msg = Message("帮助 状态") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - 服务名:状态 - 说明:检查咱自身状态 - 可用命令: - /ping - /status - 是否全局启用:True - Tip: @bot 帮助 [服务] [命令] 以查看对应命令详细信息 - """, - True, - ) - - async with app.test_matcher(service_info) as ctx: - bot = ctx.create_bot() - - msg = Message("帮助 状态 /ping") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - 命令:/ping - 类型:command - 说明:检测bot简单信息处理速度 - 更多触发方式:[] - """, - True, - ) diff --git a/test/test_plugin_kimo.py b/test/test_plugin_kimo.py deleted file mode 100644 index 46d550a..0000000 --- a/test/test_plugin_kimo.py +++ /dev/null @@ -1,42 +0,0 @@ -import pytest -from nonebug import App - -from .utils import make_fake_message, make_fake_event - - -async def test_chat(app: App): - from ATRI.plugins.kimo import kimo - - Message = make_fake_message() - - async with app.test_matcher(kimo) as ctx: - bot = ctx.create_bot() - - msg = Message("爱你") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "是…是嘛(脸红)呐,其实咱也……", True) - - -async def test_my_name_is(app: App): - from ATRI.plugins.kimo import my_name_is - - Message = make_fake_message() - - async with app.test_matcher(my_name_is) as ctx: - bot = ctx.create_bot() - - msg = Message("叫我") - event = make_fake_event(_message=msg, _to_me=True)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "欧尼酱想让咱如何称呼呢!0w0", True) - - msg = Message("欧尼酱") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "好~w 那咱以后就称呼你为欧尼酱!", True) diff --git a/test/test_plugin_manage.py b/test/test_plugin_manage.py index 6d850c2..5081207 100644 --- a/test/test_plugin_manage.py +++ b/test/test_plugin_manage.py @@ -1,292 +1,88 @@ +from typing import Type, Union + import pytest from nonebug import App -from .utils import make_fake_message, make_fake_event - +from nonebot.matcher import Matcher +from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment -async def test_block_user(app: App): - from ATRI.plugins.manage import block_user +from ATRI.permission import toggle_master +from .utils import group_message_event - Message = make_fake_message() - async with app.test_matcher(block_user) as ctx: - bot = ctx.create_bot() - - msg = Message("封禁用户") - event = make_fake_event(_message=msg)() +async def __test_wrapper( + app: App, + test_matcher: Type[Matcher], + test_command: str, + test_arg: Union[str, MessageSegment], + test_reply: str, +): + async with app.test_matcher(test_matcher) as ctx: + bot = ctx.create_bot(base=Bot) + event = group_message_event(message=Message(test_command)) ctx.receive_event(bot, event) - ctx.should_call_send(event, "哪位?GKD!", True) + ctx.should_call_send(event, "要操作的目标是?", True) - msg = Message("114514") - event = make_fake_event(_message=msg)() + event = group_message_event(message=Message(test_arg)) ctx.receive_event(bot, event) - ctx.should_call_send(event, "用户 114514 危!", True) + ctx.should_call_send(event, test_reply, True) + ctx.should_finished() @pytest.mark.asyncio -async def test_unblock_user(app: App): - from ATRI.plugins.manage import unblock_user - - Message = make_fake_message() +async def test_manage(app: App): + await toggle_master("1145141919") - async with app.test_matcher(unblock_user) as ctx: - bot = ctx.create_bot() - - msg = Message("解封用户") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "哪位?GKD!", True) + from ATRI.plugins.manage import block_user - msg = Message("114514") - event = make_fake_event(_message=msg)() + await __test_wrapper(app, block_user, "封禁用户", "114514", "用户 114514 危!") - ctx.receive_event(bot, event) - ctx.should_call_send(event, "好欸! 114514 重获新生!", True) + from ATRI.plugins.manage import unblock_user + await __test_wrapper(app, unblock_user, "解封用户", "114514", "用户 114514 已解封") -async def test_block_group(app: App): from ATRI.plugins.manage import block_group - Message = make_fake_message() + await __test_wrapper(app, block_group, "封禁群", "114514", "群 114514 危!") - async with app.test_matcher(block_group) as ctx: - bot = ctx.create_bot() - - msg = Message("封禁群") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "哪位?GKD!", True) - - msg = Message("114514") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "群 114514 危!", True) - - -async def test_unblock_group(app: App): from ATRI.plugins.manage import unblock_group - Message = make_fake_message() + await __test_wrapper(app, unblock_group, "解封群", "114514", "群 114514 已解封") - async with app.test_matcher(unblock_group) as ctx: - bot = ctx.create_bot() + from ATRI.plugins.manage import toggle_global_service - msg = Message("解封群") - event = make_fake_event(_message=msg)() + await __test_wrapper(app, toggle_global_service, "全局控制", "涩图", "服务 涩图 已全局禁用") + await __test_wrapper(app, toggle_global_service, "全局控制", "涩图", "服务 涩图 已全局启用") - ctx.receive_event(bot, event) - ctx.should_call_send(event, "哪个群?GKD!", True) + from ATRI.plugins.manage import toggle_group_service - msg = Message("114514") - event = make_fake_event(_message=msg)() + await __test_wrapper(app, toggle_group_service, "控制", "涩图", "服务 涩图 已针对本群禁用") + await __test_wrapper(app, toggle_group_service, "控制", "涩图", "服务 涩图 已针对本群启用") - ctx.receive_event(bot, event) - ctx.should_call_send(event, "好欸! 114514 重获新生!", True) - - -async def test_global_block_service(app: App): - from ATRI.plugins.manage import global_block_service - - Message = make_fake_message() - - async with app.test_matcher(global_block_service) as ctx: - bot = ctx.create_bot() - - msg = Message("全局封禁") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "阿...是哪个服务呢", True) - - msg = Message("状态") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "服务 状态 已被禁用", True) - - -async def test_global_unblock_service(app: App): - from ATRI.plugins.manage import global_unblock_service - - Message = make_fake_message() - - async with app.test_matcher(global_unblock_service) as ctx: - bot = ctx.create_bot() - - msg = Message("全局启用") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "阿...是哪个服务呢", True) - - msg = Message("状态") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "服务 状态 已启用", True) - - -async def test_user_block_service(app: App): - from ATRI.plugins.manage import user_block_service - - Message = make_fake_message() - - async with app.test_matcher(user_block_service) as ctx: - bot = ctx.create_bot() - - msg = Message("对用户114514禁用状态") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "完成~已禁止用户 114514 使用 状态", True) - - -async def test_user_unblock_service(app: App): - from ATRI.plugins.manage import user_unblock_service - - Message = make_fake_message() - - async with app.test_matcher(user_unblock_service) as ctx: - bot = ctx.create_bot() - - msg = Message("对用户114514启用状态") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "完成~已允许用户 114514 使用 状态", True) - - -async def test_group_block_service(app: App): - from ATRI.plugins.manage import group_block_service - - Message = make_fake_message() - - async with app.test_matcher(group_block_service) as ctx: - bot = ctx.create_bot() - - msg = Message("禁用") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "阿...是哪个服务呢", True) - - msg = Message("状态") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "完成!~已禁止本群使用服务:状态", True) - - -async def test_group_unblock_service(app: App): - from ATRI.plugins.manage import group_unblock_service - - Message = make_fake_message() - - async with app.test_matcher(group_unblock_service) as ctx: - bot = ctx.create_bot() - - msg = Message("启用") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "阿...是哪个服务呢", True) - - msg = Message("状态") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "完成!~已允许本群使用服务:状态", True) - - -async def test_get_friend_add_list(app: App): - from ATRI.plugins.manage import get_friend_add_list + from ATRI.plugins.manage import track_error - Message = make_fake_message() + await __test_wrapper( + app, track_error, "追踪", "abcdefg", "操作 abcdefg 失败...原因:\n未找到对应ID的信息" + ) - async with app.test_matcher(get_friend_add_list) as ctx: - bot = ctx.create_bot() + from ATRI.plugins.manage import toggle_user_service - msg = Message("获取好友申请") - event = make_fake_event(_message=msg)() + async with app.test_matcher(toggle_user_service) as ctx: + bot = ctx.create_bot(base=Bot) + event = group_message_event(message=Message("对用户114514禁用涩图")) ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - 申请人ID | 申请信息 | 申请码 - Tip: 使用 同意/拒绝好友 [申请码] 以决定 - """, - True, - ) - - -# @pytest.mark.asyncio -# async def test_approve_friend_add(app: App): -# from ATRI.plugins.manage import approve_friend_add - -# Message = make_fake_message() - -# async with app.test_matcher(approve_friend_add) as ctx: -# bot = ctx.create_bot() - -# msg = Message("同意好友") -# event = make_fake_event(_message=msg)() - -# ctx.receive_event(bot, event) -# ctx.should_call_send(event, "申请码GKD!", True) - -# msg = Message() + ctx.should_call_send(event, "已禁止用户 114514 使用 涩图", True) + ctx.should_finished() - -async def test_get_group_invite_list(app: App): - from ATRI.plugins.manage import get_group_invite_list - - Message = make_fake_message() - - async with app.test_matcher(get_group_invite_list) as ctx: - bot = ctx.create_bot() - - msg = Message("获取邀请列表") - event = make_fake_event(_message=msg)() + async with app.test_matcher(toggle_user_service) as ctx: + bot = ctx.create_bot(base=Bot) + event = group_message_event(message=Message("对用户114514启用涩图")) ctx.receive_event(bot, event) - ctx.should_call_send( - event, - """ - 申请人ID | 申请信息 | 申请码 - Tip: 使用 同意/拒绝邀请 [申请码] 以决定 - """, - True, - ) - + ctx.should_call_send(event, "已允许用户 114514 使用 涩图", True) + ctx.should_finished() -async def test_track_error(app: App): - from ATRI.plugins.manage import track_error - - Message = make_fake_message() - - async with app.test_matcher(track_error) as ctx: - bot = ctx.create_bot() - - msg = Message("/track") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "请检查ID是否正确...", True) + await toggle_master("1145141919") diff --git a/test/test_plugin_saucenao.py b/test/test_plugin_saucenao.py index 4b21d2d..a8c561e 100644 --- a/test/test_plugin_saucenao.py +++ b/test/test_plugin_saucenao.py @@ -1,32 +1,24 @@ import pytest from nonebug import App -from nonebot.adapters.onebot.v11 import MessageSegment +from nonebot.adapters.onebot.v11 import Bot, Message -from .utils import make_fake_message, make_fake_event +from .utils import group_message_event @pytest.mark.asyncio async def test_saucenao(app: App): from ATRI.plugins.saucenao import saucenao - Message = make_fake_message() - async with app.test_matcher(saucenao) as ctx: - bot = ctx.create_bot() - - msg = Message("以图搜图") - event = make_fake_event(_message=msg)() + bot = ctx.create_bot(base=Bot) + event = group_message_event(message=Message("以图搜图")) ctx.receive_event(bot, event) ctx.should_call_send(event, "图呢?", True) - msg = Message( - MessageSegment.image( - "https://jsd.imki.moe/gh/Kyomotoi/CDN@master/noting/88674944_p0.png" - ) - ) - event = make_fake_event(_message=msg)() + event = group_message_event(message=Message("test")) ctx.receive_event(bot, event) - ctx.should_call_send(event, "失败了...", False) + ctx.should_call_send(event, "请发送图片而不是其他东西!!", True) + ctx.should_rejected() diff --git a/test/test_plugin_setu.py b/test/test_plugin_setu.py deleted file mode 100644 index b5a7ff2..0000000 --- a/test/test_plugin_setu.py +++ /dev/null @@ -1,20 +0,0 @@ -import pytest -from nonebug import App - -from .utils import make_fake_message, make_fake_event - - -async def test_random_setu(app: App): - from ATRI.plugins.setu import random_setu - - Message = make_fake_message() - - async with app.test_matcher(random_setu) as ctx: - bot = ctx.create_bot() - - msg = Message("来张涩图") - event = make_fake_event(_message=msg)() - - ctx.receive_event(bot, event) - ctx.should_call_send(event, "hso(发不出", False) diff --git a/test/utils.py b/test/utils.py index 70d1a27..f9bc139 100644 --- a/test/utils.py +++ b/test/utils.py @@ -1,87 +1,72 @@ -""" -Fork from: https://github.com/nonebot/nonebot2/blob/master/tests/utils.py -""" -from typing import TYPE_CHECKING, Type, Optional +from typing import Literal +from pydantic import BaseModel, create_model -from pydantic import create_model +from nonebot.adapters.onebot.v11 import Message +from nonebot.adapters.onebot.v11.event import ( + Sender, + GroupMessageEvent, + PrivateMessageEvent, +) -if TYPE_CHECKING: - from nonebot.adapters import Event, Message +def escape_text(s: str, *, escape_comma: bool = True) -> str: + s = s.replace("&", "&").replace("[", "[").replace("]", "]") + if escape_comma: + s = s.replace(",", ",") + return s -def make_fake_message() -> Type["Message"]: - from nonebot.adapters import Message, MessageSegment - class FakeMessageSegment(MessageSegment): - @classmethod - def get_message_class(cls): - return FakeMessage +class CommonFields(BaseModel): + time: int = 1000000 + self_id: int = 1 + post_type: str = "message" + sub_type: str = "normal" + message_id: int = 1 + message: Message = Message("test") + original_message: Message = Message("test") + raw_message: str = "test" + font: int = 0 + to_me: bool = False - def __str__(self) -> str: - return self.data["text"] if self.type == "text" else f"[fake:{self.type}]" - @classmethod - def text(cls, text: str): - return cls("text", {"text": text}) +class GroupMessageEventFields(BaseModel): + user_id: int = 1145141919 + message_type: Literal["group"] = "group" + group_id: int = 10000 + sender: Sender = Sender(card="", nickname="test", role="member") - @classmethod - def image(cls, url: str): - return cls("image", {"url": url}) - def is_text(self) -> bool: - return self.type == "text" +class PrivateMessageEventFields(BaseModel): + sub_type: str = "friend" + user_id: int = 1145141919 + message_type: Literal["private"] = "private" + sender: Sender = Sender(nickname="test") - class FakeMessage(Message): - @classmethod - def get_segment_class(cls): - return FakeMessageSegment - @staticmethod - def _construct(msg: str): - yield FakeMessageSegment.text(msg) - - return FakeMessage - - -def make_fake_event( - _type: str = "message", - _name: str = "test", - _description: str = "test", - _user_id: str = "test", - _session_id: str = "test", - _message: Optional["Message"] = None, - _to_me: bool = True, - **fields, -) -> Type["Event"]: - from nonebot.adapters import Event - - _Fake = create_model("_Fake", __base__=Event, **fields) +def fake_event(event_cls, upgrade_cls: BaseModel, **field): + _Fake = create_model("_Fake", __base__=event_cls) class FakeEvent(_Fake): - def get_type(self) -> str: - return _type - - def get_event_name(self) -> str: - return _name + __fields__ = { + **CommonFields.__fields__, + **upgrade_cls.__fields__, + } - def get_event_description(self) -> str: - return _description - - def get_user_id(self) -> str: - return _user_id + class Config: + extra = "forbid" - def get_session_id(self) -> str: - return _session_id + return FakeEvent(**field) - def get_message(self) -> "Message": - if _message is not None: - return _message - raise NotImplementedError - def is_tome(self) -> bool: - return _to_me +def group_message_event(**field) -> GroupMessageEvent: + if "message" in field: + field.update({"original_message": field["message"]}) + field.update({"raw_message": str(field["message"])}) + return fake_event(GroupMessageEvent, GroupMessageEventFields, **field) # type: ignore - class Config: - extra = "forbid" - return FakeEvent +def private_message_event(**field) -> PrivateMessageEvent: + if "message" in field: + field.update({"original_message": field["message"]}) + field.update({"raw_message": str(field["message"])}) + return fake_event(PrivateMessageEvent, PrivateMessageEventFields, **field) # type: ignore |