async def test_permission_updater(app: App, load_plugin): from nonebot.permission import User from plugins.matcher.matcher_permission import ( default_permission, test_custom_updater, test_permission_updater, ) event = make_fake_event(_session_id="test")() assert test_permission_updater.permission is default_permission async with app.test_api() as ctx: bot = ctx.create_bot() matcher = test_permission_updater() new_perm = await matcher.update_permission(bot, event) assert len(new_perm.checkers) == 1 checker = list(new_perm.checkers)[0].call assert isinstance(checker, User) assert checker.users == ("test", ) assert checker.perm is default_permission assert test_custom_updater.permission is default_permission async with app.test_api() as ctx: bot = ctx.create_bot() matcher = test_custom_updater() new_perm = await matcher.update_permission(bot, event) assert new_perm is default_permission
async def test_run(app: App): from nonebot.matcher import Matcher, matchers assert not matchers event = make_fake_event()() async def reject(): await Matcher.reject() test_reject = Matcher.new(handlers=[reject]) async with app.test_api() as ctx: bot = ctx.create_bot() await test_reject().run(bot, event, {}) assert len(matchers[0]) == 1 assert len(matchers[0][0].handlers) == 1 del matchers[0] async def pause(): await Matcher.pause() test_pause = Matcher.new(handlers=[pause]) async with app.test_api() as ctx: bot = ctx.create_bot() await test_pause().run(bot, event, {}) assert len(matchers[0]) == 1 assert len(matchers[0][0].handlers) == 0
async def test_send_queue(app: App): import nonebot from nonebot.adapters.onebot.v11.bot import Bot from nonebot.adapters.onebot.v11.message import Message from nonebot_bison import send from nonebot_bison.plugin_config import plugin_config from nonebot_bison.send import do_send_msgs, send_msgs async with app.test_api() as ctx: new_bot = ctx.create_bot(base=Bot) app.monkeypatch.setattr(nonebot, "get_bot", lambda: new_bot, True) app.monkeypatch.setattr(plugin_config, "bison_use_queue", True, True) bot = nonebot.get_bot() assert isinstance(bot, Bot) assert bot == new_bot ctx.should_call_api( "send_group_msg", {"group_id": "1233", "message": "test msg"}, True ) await bot.call_api("send_group_msg", group_id="1233", message="test msg") await send_msgs(bot, "1233", "group", [Message("msg")]) ctx.should_call_api( "send_group_msg", {"group_id": "1233", "message": "msg"}, True ) await do_send_msgs() assert not ctx.wait_list.empty() app.monkeypatch.setattr(send, "LAST_SEND_TIME", 0, True) await do_send_msgs() assert ctx.wait_list.empty()
async def test_send_merge2_no_queue(app: App): from nonebot.adapters.onebot.v11.bot import Bot from nonebot.adapters.onebot.v11.message import Message, MessageSegment from nonebot_bison.plugin_config import plugin_config from nonebot_bison.send import send_msgs plugin_config.bison_use_pic_merge = 2 plugin_config.bison_use_queue = False async with app.test_api() as ctx: bot = ctx.create_bot(base=Bot, self_id="8888") assert isinstance(bot, Bot) message = [ Message(MessageSegment.text("test msg")), Message(MessageSegment.image("https://picsum.photos/200/300")), Message(MessageSegment.image("https://picsum.photos/200/300")), ] ctx.should_call_api( "get_group_member_info", {"group_id": 633, "user_id": 8888, "no_cache": True}, {"user_id": 8888, "card": "admin", "nickname": "adminuser"}, ) merged_message = _merge_messge( [ gen_node(8888, "admin", message[0]), gen_node(8888, "admin", message[1]), gen_node(8888, "admin", message[2]), ] ) ctx.should_call_api( "send_group_forward_msg", {"group_id": 633, "messages": merged_message}, None, ) await send_msgs(bot, 633, "group", message)
async def test_rule(app: App): from nonebot.rule import Rule from nonebot.exception import SkippedException async def falsy(): return False async def truthy(): return True async def skipped() -> bool: raise SkippedException def _is_eq(a: Rule, b: Rule) -> bool: return {d.call for d in a.checkers} == {d.call for d in b.checkers} assert _is_eq(Rule(truthy) & None, Rule(truthy)) assert _is_eq(Rule(truthy) & falsy, Rule(truthy, falsy)) assert _is_eq(Rule(truthy) & Rule(falsy), Rule(truthy, falsy)) assert _is_eq(None & Rule(truthy), Rule(truthy)) assert _is_eq(truthy & Rule(falsy), Rule(truthy, falsy)) event = make_fake_event()() async with app.test_api() as ctx: bot = ctx.create_bot() assert await Rule(falsy)(bot, event, {}) == False assert await Rule(truthy)(bot, event, {}) == True assert await Rule(skipped)(bot, event, {}) == False assert await Rule(truthy, falsy)(bot, event, {}) == False assert await Rule(truthy, skipped)(bot, event, {}) == False
async def test_permission(app: App): from nonebot.permission import Permission from nonebot.exception import SkippedException async def falsy(): return False async def truthy(): return True async def skipped() -> bool: raise SkippedException def _is_eq(a: Permission, b: Permission) -> bool: return {d.call for d in a.checkers} == {d.call for d in b.checkers} assert _is_eq(Permission(truthy) | None, Permission(truthy)) assert _is_eq(Permission(truthy) | falsy, Permission(truthy, falsy)) assert _is_eq(Permission(truthy) | Permission(falsy), Permission(truthy, falsy)) assert _is_eq(None | Permission(truthy), Permission(truthy)) assert _is_eq(truthy | Permission(falsy), Permission(truthy, falsy)) event = make_fake_event()() async with app.test_api() as ctx: bot = ctx.create_bot() assert await Permission(falsy)(bot, event) == False assert await Permission(truthy)(bot, event) == True assert await Permission(skipped)(bot, event) == False assert await Permission(truthy, falsy)(bot, event) == True assert await Permission(truthy, skipped)(bot, event) == True
async def test_type_updater(app: App, load_plugin): from plugins.matcher.matcher_type import test_type_updater, test_custom_updater event = make_fake_event()() assert test_type_updater.type == "test" async with app.test_api() as ctx: bot = ctx.create_bot() matcher = test_type_updater() new_type = await matcher.update_type(bot, event) assert new_type == "message" assert test_custom_updater.type == "test" async with app.test_api() as ctx: bot = ctx.create_bot() matcher = test_custom_updater() new_type = await matcher.update_type(bot, event) assert new_type == "custom"
async def test_startswith( app: App, type: str, user_id: str, expected: bool, ): from nonebot.permission import SUPERUSER, SuperUser dependent = list(SUPERUSER.checkers)[0] checker = dependent.call assert isinstance(checker, SuperUser) event = make_fake_event(_type=type, _user_id=user_id)() async with app.test_api() as ctx: bot = ctx.create_bot() assert await dependent(bot=bot, event=event) == expected
async def test_rule(app: App): from nonebot.rule import Rule from nonebot.exception import SkippedException async def falsy(): return False async def truthy(): return True async def skipped() -> bool: raise SkippedException event = make_fake_event()() async with app.test_api() as ctx: bot = ctx.create_bot() assert await Rule(falsy)(bot, event, {}) == False assert await Rule(truthy)(bot, event, {}) == True assert await Rule(skipped)(bot, event, {}) == False assert await Rule(truthy, falsy)(bot, event, {}) == False assert await Rule(truthy, skipped)(bot, event, {}) == False
async def test_send_no_queue(app: App): from nonebot.adapters.onebot.v11.bot import Bot from nonebot.adapters.onebot.v11.message import Message from nonebot_bison.plugin_config import plugin_config from nonebot_bison.send import send_msgs async with app.test_api() as ctx: app.monkeypatch.setattr(plugin_config, "bison_use_queue", False, True) bot = ctx.create_bot(base=Bot) assert isinstance(bot, Bot) ctx.should_call_api( "send_group_msg", {"group_id": "1233", "message": Message("msg1")}, True ) ctx.should_call_api( "send_group_msg", {"group_id": "1233", "message": Message("msg2")}, True ) ctx.should_call_api( "send_private_msg", {"user_id": "666", "message": Message("priv")}, True ) await send_msgs(bot, "1233", "group", [Message("msg1"), Message("msg2")]) await send_msgs(bot, "666", "private", [Message("priv")]) assert ctx.wait_list.empty()