summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2023-05-11 14:56:58 +0800
committerKyomotoi <[email protected]>2023-05-11 14:56:58 +0800
commitcf2033627b63e4a444ee8971fd05f3e88e45fe86 (patch)
tree02c7b616dc94f63888413b5b9bb23fd95b29e8b2
parent546885062c1dae673fb5e31dec900a4536a2b3fa (diff)
downloadATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.tar.gz
ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.tar.bz2
ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.zip
✅ 更新测试用例
-rw-r--r--test/conftest.py21
-rw-r--r--test/test_plugin_anime_search.py32
-rw-r--r--test/test_plugin_applet.py28
-rw-r--r--test/test_plugin_code_runner.py75
-rw-r--r--test/test_plugin_funny.py113
-rw-r--r--test/test_plugin_help.py168
-rw-r--r--test/test_plugin_kimo.py42
-rw-r--r--test/test_plugin_manage.py304
-rw-r--r--test/test_plugin_saucenao.py22
-rw-r--r--test/test_plugin_setu.py20
-rw-r--r--test/utils.py121
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("&", "&amp;").replace("[", "&#91;").replace("]", "&#93;")
+ if escape_comma:
+ s = s.replace(",", "&#44;")
+ 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