diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/__init__.py | 0 | ||||
-rw-r--r-- | test/test_plugin_anime_search.py | 32 | ||||
-rw-r--r-- | test/test_plugin_chat.py | 84 | ||||
-rw-r--r-- | test/test_plugin_code_runner.py | 75 | ||||
-rw-r--r-- | test/test_plugin_funny.py | 117 | ||||
-rw-r--r-- | test/test_plugin_help.py | 154 | ||||
-rw-r--r-- | test/test_plugin_manage.py | 293 | ||||
-rw-r--r-- | test/test_plugin_rich.py | 28 | ||||
-rw-r--r-- | test/test_plugin_saucenao.py | 32 | ||||
-rw-r--r-- | test/test_plugin_setu.py | 20 | ||||
-rw-r--r-- | test/utils.py | 87 |
11 files changed, 922 insertions, 0 deletions
diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/__init__.py diff --git a/test/test_plugin_anime_search.py b/test/test_plugin_anime_search.py new file mode 100644 index 0000000..2782ba9 --- /dev/null +++ b/test/test_plugin_anime_search.py @@ -0,0 +1,32 @@ +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://cdn.jsdelivr.net/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_chat.py b/test/test_plugin_chat.py new file mode 100644 index 0000000..e04f1d3 --- /dev/null +++ b/test/test_plugin_chat.py @@ -0,0 +1,84 @@ +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_chat(app: App): + from ATRI.plugins.chat import chat + + Message = make_fake_message() + + async with app.test_matcher(chat) 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.chat 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) + + +async def test_say(app: App): + from ATRI.plugins.chat import say + + Message = make_fake_message() + + async with app.test_matcher(say) 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) + + msg = Message("nya~") + event = make_fake_event(_message=msg)() + + ctx.receive_event(bot, event) + ctx.should_call_send(event, "nya~", True) + + async with app.test_matcher(say) 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) + + msg = Message( + MessageSegment.image( + "https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/noting/88674944_p0.png" + ) + ) + event = make_fake_event(_message=msg, _to_me=True)() + + ctx.receive_event(bot, event) + ctx.should_call_send(event, "不要...", True) diff --git a/test/test_plugin_code_runner.py b/test/test_plugin_code_runner.py new file mode 100644 index 0000000..584ebb0 --- /dev/null +++ b/test/test_plugin_code_runner.py @@ -0,0 +1,75 @@ +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') + """, + 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 + """, + 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 new file mode 100644 index 0000000..851a922 --- /dev/null +++ b/test/test_plugin_funny.py @@ -0,0 +1,117 @@ +import pytest +from nonebug import App + +from .utils import make_fake_message, make_fake_event + + +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) + + +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() + + 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") + 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, "内容呢?格式: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'}}]", + 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 new file mode 100644 index 0000000..e107150 --- /dev/null +++ b/test/test_plugin_help.py @@ -0,0 +1,154 @@ +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 main_help + + Message = make_fake_message() + + async with app.test_matcher(main_help) 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 菜单 以打开此页面 + """, + True, + ) + + +async def test_about_me(app: App): + from ATRI import __version__ + from ATRI.config import BotSelfConfig + from ATRI.plugins.help import about_me + + temp_list = list() + for i in BotSelfConfig.nickname: + temp_list.append(i) + nickname = "、".join(map(str, temp_list)) + + Message = make_fake_message() + + async with app.test_matcher(about_me) 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__} + 想进一步了解: + https://github.com/Kyomotoi/ATRI + """, + True, + ) + + +async def test_service_list(app: App): + import os + + from ATRI.service import SERVICES_DIR + from ATRI.plugins.help import service_list + + files = os.listdir(SERVICES_DIR) + temp_list = list() + for i in files: + service = i.replace(".json", "") + temp_list.append(service) + + services = "、".join(map(str, temp_list)) + + 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""" + 咱搭载了以下服务~ + {services} + @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, "请检查是否输入错误...", 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: 帮助 [服务] [命令] 以查看对应命令详细信息 + """, + 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_manage.py b/test/test_plugin_manage.py new file mode 100644 index 0000000..8f3042a --- /dev/null +++ b/test/test_plugin_manage.py @@ -0,0 +1,293 @@ +import pytest +from nonebug import App + +from ATRI.config import RUNTIME_CONFIG +from .utils import make_fake_message, make_fake_event + + +async def test_block_user(app: App): + from ATRI.plugins.manage import block_user + + 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)() + + 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_user(app: App): + from ATRI.plugins.manage import unblock_user + + Message = make_fake_message() + + 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) + + msg = Message("114514") + event = make_fake_event(_message=msg)() + + ctx.receive_event(bot, event) + ctx.should_call_send(event, "好欸! 114514 重获新生!", True) + + +async def test_block_group(app: App): + from ATRI.plugins.manage import block_group + + Message = make_fake_message() + + 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() + + async with app.test_matcher(unblock_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_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 + + Message = make_fake_message() + + async with app.test_matcher(get_friend_add_list) as ctx: + bot = ctx.create_bot() + + msg = Message("获取好友申请") + event = make_fake_event(_message=msg)() + + 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() + + +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)() + + ctx.receive_event(bot, event) + ctx.should_call_send( + event, + """ + 申请人ID | 申请信息 | 申请码 + Tip: 使用 同意/拒绝邀请 [申请码] 以决定 + """, + True, + ) + + +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) diff --git a/test/test_plugin_rich.py b/test/test_plugin_rich.py new file mode 100644 index 0000000..3e63f4a --- /dev/null +++ b/test/test_plugin_rich.py @@ -0,0 +1,28 @@ +import pytest +from nonebug import App + +from .utils import make_fake_message, make_fake_event + + +async def test_bili_rich(app: App): + from ATRI.plugins.rich import bili_rich + + Message = make_fake_message() + + async with app.test_matcher(bili_rich) 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_saucenao.py b/test/test_plugin_saucenao.py new file mode 100644 index 0000000..2782ba9 --- /dev/null +++ b/test/test_plugin_saucenao.py @@ -0,0 +1,32 @@ +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://cdn.jsdelivr.net/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_setu.py b/test/test_plugin_setu.py new file mode 100644 index 0000000..b5a7ff2 --- /dev/null +++ b/test/test_plugin_setu.py @@ -0,0 +1,20 @@ +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 new file mode 100644 index 0000000..70d1a27 --- /dev/null +++ b/test/utils.py @@ -0,0 +1,87 @@ +""" +Fork from: https://github.com/nonebot/nonebot2/blob/master/tests/utils.py +""" +from typing import TYPE_CHECKING, Type, Optional + +from pydantic import create_model + +if TYPE_CHECKING: + from nonebot.adapters import Event, Message + + +def make_fake_message() -> Type["Message"]: + from nonebot.adapters import Message, MessageSegment + + class FakeMessageSegment(MessageSegment): + @classmethod + def get_message_class(cls): + return FakeMessage + + 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}) + + @classmethod + def image(cls, url: str): + return cls("image", {"url": url}) + + def is_text(self) -> bool: + return self.type == "text" + + 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) + + class FakeEvent(_Fake): + def get_type(self) -> str: + return _type + + def get_event_name(self) -> str: + return _name + + def get_event_description(self) -> str: + return _description + + def get_user_id(self) -> str: + return _user_id + + def get_session_id(self) -> str: + return _session_id + + def get_message(self) -> "Message": + if _message is not None: + return _message + raise NotImplementedError + + def is_tome(self) -> bool: + return _to_me + + class Config: + extra = "forbid" + + return FakeEvent |