Esempio n. 1
0
async def test_depend(app: App, load_plugin):
    from nonebot.params import DependParam
    from plugins.param.param_depend import (
        ClassDependency,
        runned,
        depends,
        class_depend,
        test_depends,
    )

    async with app.test_dependent(depends, allow_types=[DependParam]) as ctx:
        ctx.should_return(1)

    assert len(runned) == 1 and runned[0] == 1

    runned.clear()

    async with app.test_matcher(test_depends) as ctx:
        bot = ctx.create_bot()
        event_next = make_fake_event()()
        ctx.receive_event(bot, event_next)

    assert len(runned) == 2 and runned[0] == runned[1] == 1

    async with app.test_dependent(class_depend,
                                  allow_types=[DependParam]) as ctx:
        ctx.should_return(ClassDependency(x=1, y=2))
Esempio n. 2
0
async def test_matcher(app: App, load_plugin):
    from nonebot.matcher import Matcher
    from nonebot.params import DependParam, MatcherParam
    from plugins.param.param_matcher import matcher, receive, last_receive

    fake_matcher = Matcher()

    async with app.test_dependent(matcher, allow_types=[MatcherParam]) as ctx:
        ctx.pass_params(matcher=fake_matcher)
        ctx.should_return(fake_matcher)

    event = make_fake_event()()
    fake_matcher.set_receive("test", event)
    event_next = make_fake_event()()
    fake_matcher.set_receive("", event_next)

    async with app.test_dependent(receive,
                                  allow_types=[MatcherParam,
                                               DependParam]) as ctx:
        ctx.pass_params(matcher=fake_matcher)
        ctx.should_return(event)

    async with app.test_dependent(last_receive,
                                  allow_types=[MatcherParam,
                                               DependParam]) as ctx:
        ctx.pass_params(matcher=fake_matcher)
        ctx.should_return(event_next)
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
async def test_weather(app: App):
    from examples.weather import weather
    from utils import make_fake_event, make_fake_message

    # 将此处的 make_fake_message() 替换为你要发送的平台消息 Message 类型
    Message = make_fake_message()

    async with app.test_matcher(weather) as ctx:
        bot = ctx.create_bot()

        msg = Message("/天气 上海")
        # 将此处的 make_fake_event() 替换为你要发送的平台事件 Event 类型
        event = make_fake_event(_message=msg, _to_me=True)()

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "上海的天气是...", True)
        ctx.should_finished()

    async with app.test_matcher(weather) as ctx:
        bot = ctx.create_bot()

        msg = Message("/天气 南京")
        # 将此处的 make_fake_event() 替换为你要发送的平台事件 Event 类型
        event = make_fake_event(_message=msg, _to_me=True)()

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, Message("你想查询的城市 南京 暂不支持,请重新输入!"), True)
        ctx.should_rejected()

        msg = Message("北京")
        event = make_fake_event(_message=msg)()

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "北京的天气是...", True)
        ctx.should_finished()

    async with app.test_matcher(weather) as ctx:
        bot = ctx.create_bot()

        msg = Message("/天气")
        # 将此处的 make_fake_event() 替换为你要发送的平台事件 Event 类型
        event = make_fake_event(_message=msg, _to_me=True)()

        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, Message("你想查询的城市 杭州 暂不支持,请重新输入!"), True)
        ctx.should_rejected()

        msg = Message("北京")
        event = make_fake_event(_message=msg)()

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "北京的天气是...", True)
        ctx.should_finished()
Esempio n. 6
0
async def test_price_default(app: App, mocker: MockerFixture):
    """测试查价,默认值"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.ff14 import price_cmd

    get = mocker.patch("httpx.AsyncClient.get", side_effect=mocked_get)

    async with app.test_matcher(price_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/查价 默认值"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "当前设置的默认值为:猫小胖", True)
        ctx.should_finished()

    async with app.test_matcher(price_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/查价 萨维奈舞裙"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "萨维奈舞裙 在市场的价格是:\n233100*1  服务器: 静语庄园\n233193*1 HQ 服务器: 静语庄园\n233330*1  服务器: 静语庄园\n233334*1  服务器: 静语庄园\n239166*1 HQ 服务器: 紫水栈桥\n239166*1 HQ 服务器: 紫水栈桥\n数据更新时间: 2021年12月29日 05时00分",
            True,
        )
        ctx.should_finished()

    async with app.test_matcher(price_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/查价 默认值 静语庄园"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "查询区域默认值设置成功!", True)
        ctx.should_finished()

    async with app.test_matcher(price_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/查价 默认值"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "当前设置的默认值为:静语庄园", True)
        ctx.should_finished()

    get.assert_has_calls([
        mocker.call("https://cafemaker.wakingsands.com/search?string=萨维奈舞裙"),
        mocker.call("https://universalis.app/api/v2/猫小胖/10393?listings=6"),
    ])
Esempio n. 7
0
async def test_roll_complex(
    app: App,
    mocker: MockerFixture,
):
    """测试点数,复杂点的输入"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.roll import roll_cmd

    randint = mocker.patch("src.plugins.roll.roll.randint")
    randint.return_value = 1

    async with app.test_matcher(roll_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/roll d100+2d50"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "d100+2d50=d100(1)+d50(1)+d50(1)=3",
            "result",
            at_sender=True,
        )
        ctx.should_finished()

    randint.assert_has_calls(
        [
            mocker.call(1, 100),
            mocker.call(1, 50),
            mocker.call(1, 50),
        ]
    )
Esempio n. 8
0
async def test_query_with_abort_on_idx(app: App):
    from nonebot.adapters.onebot.v11.bot import Bot
    from nonebot.adapters.onebot.v11.message import Message
    from nonebot_bison.config_manager import group_manage_matcher

    async with app.test_matcher(group_manage_matcher) as ctx:
        bot = ctx.create_bot(base=Bot)
        event = fake_private_message_event(
            message=Message("群管理"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event)
        ctx.should_pass_rule()
        ctx.should_pass_permission()
        ctx.should_call_api(
            "get_group_list", {}, [{"group_id": 101, "group_name": "test group"}]
        )
        ctx.should_call_send(
            event,
            Message("请选择需要管理的群:\n1. 101 - test group\n请输入左侧序号\n中止操作请输入'取消'"),
            True,
        )
        event_abort = fake_private_message_event(
            message=Message("取消"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event_abort)
        ctx.should_call_send(event_abort, "已取消", True)
        ctx.should_finished()
Esempio n. 9
0
async def test_rank(app: App):
    """测试历史"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.repeat import rank_cmd, recorder_obj

    recorder_obj._msg_number_list = {10000: {1: {10: 100}}}
    recorder_obj._repeat_list = {10000: {1: {10: 10}}}

    async with app.test_matcher(rank_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/rank"))

        ctx.receive_event(bot, event)
        ctx.should_call_api(
            "get_group_member_info",
            data={
                "group_id": 10000,
                "user_id": 10,
                "no_cache": True
            },
            result={"card": "test"},
        )
        ctx.should_call_send(
            event, "Love Love Ranking\ntest:10.00%\n\n复读次数排行榜\ntest:10次",
            "result")
        ctx.should_finished()
Esempio n. 10
0
async def test_history_get_arg(app: App):
    """测试历史"""
    from nonebot.adapters.onebot.v11 import Message

    from src.plugins.repeat import history_cmd, recorder_obj

    recorder_obj._msg_number_list = {10000: {1: {10: 100}}}
    recorder_obj._repeat_list = {10000: {1: {10: 10}}}

    async with app.test_matcher(history_cmd) as ctx:
        bot = ctx.create_bot()

        event = fake_group_message_event(message=Message("/history"))
        year_event = fake_group_message_event(message=Message("2020"))
        month_event = fake_group_message_event(message=Message("1"))
        day_event = fake_group_message_event(message=Message("0"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "你请输入你要查询的年份", True)

        ctx.receive_event(bot, year_event)
        ctx.should_call_send(year_event, "你请输入你要查询的月份", True)

        ctx.receive_event(bot, month_event)
        ctx.should_call_send(month_event, "你请输入你要查询的日期(如查询整月排名请输入 0)", True)

        ctx.receive_event(bot, day_event)
        ctx.should_call_send(day_event, "2020 年 1 月的数据不存在,请换个试试吧 0.0", True)
Esempio n. 11
0
async def test_price_world_not_found(app: App, mocker: MockerFixture):
    """测试查价,服务器/大区不存在"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.ff14 import price_cmd

    get = mocker.patch("httpx.AsyncClient.get", side_effect=mocked_get)

    async with app.test_matcher(price_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/查价 萨维奈舞裙 静语"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "抱歉,没有找到 静语 的数据,请检查大区或服务器名称是否正确。",
            True,
        )
        ctx.should_finished()

    get.assert_has_calls([
        mocker.call("https://cafemaker.wakingsands.com/search?string=萨维奈舞裙"),
        mocker.call("https://universalis.app/api/v2/静语/10393?listings=6"),
    ])
Esempio n. 12
0
async def test_price_item_not_found(app: App, mocker: MockerFixture):
    """测试查价,物品不存在"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.ff14 import price_cmd

    get = mocker.patch("httpx.AsyncClient.get", side_effect=mocked_get)

    async with app.test_matcher(price_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/查价 未命名 猫小胖"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "抱歉,没有找到 未命名,请检查物品名称是否正确。",
            True,
        )
        ctx.should_finished()

    get.assert_called_once_with(
        "https://cafemaker.wakingsands.com/search?string=未命名")
Esempio n. 13
0
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
Esempio n. 14
0
async def test_daily_note_full(
    app: App,
    mocker: MockerFixture,
):
    """测试原神实时便笺,体力满的情况"""
    from nonebot.adapters.onebot.v11 import Message

    from src.plugins.genshin import daily_note_cmd
    from src.plugins.genshin.config import set_cookie

    set_cookie(10, "full")

    get = mocker.patch("httpx.AsyncClient.get", side_effect=mocked_get)

    async with app.test_matcher(daily_note_cmd) as ctx:
        bot = ctx.create_bot()
        event = fake_group_message_event(message=Message("/ys.dailynote"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "原粹树脂: 160/160 (已完全恢复)\n洞天宝钱: 2400/2400 (已满)\n每日委托任务: 0/4 (今日完成委托次数不足)\n值得铭记的强敌: 0/3 (本周剩余消耗减半次数)\n探索派遣: 5/5\n角色1: 已完成派遣\n角色2: 已完成派遣\n角色3: 已完成派遣\n角色4: 已完成派遣\n角色5: 已完成派遣",
            "",
        )
        ctx.should_finished()

    assert get.call_count == 2
Esempio n. 15
0
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
Esempio n. 16
0
async def test_nuannuan(
    app: App,
    mocker: MockerFixture,
):
    """测试时尚品鉴"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.ff14 import nuannuan_cmd

    with open(Path(__file__).parent / "nuannuan.json", "r", encoding="utf-8") as f:
        data = json.load(f)
    async_client = mocker.patch("httpx.AsyncClient.get")
    r = mocker.MagicMock()
    r.json = mocker.MagicMock(return_value=data)
    async_client.return_value = r

    async with app.test_matcher(nuannuan_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/时尚品鉴"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "【FF14/时尚品鉴】第204期 满分攻略 12月24日 最终幻想14\n游玩C哩酱攻略站:www.youwanc.com\n-\n【12月24日 第204周时尚品鉴预告预测】\n主题:高贵的魔法师\n\n【身体防具】*提示内容:决斗者\n——*往期:116 92 57\n狂妄长衣 莽撞长衣 匿盗外套 鬼盗外套 红盗外套 瘟疫使者长衣 瘟疫医生长衣 \n60级副本地脉灵灯天狼星灯塔/草木庭园圣茉夏娜植物园\n\n【腿部防具】*提示内容:暗魔\n——*往期:169 139\n暗魔xx打底裤\n24人副本影之国获得\n\n【脚部防具】*提示内容:祭祀仪式\n——*往期:132 115\n真狮鹫革XX凉鞋/XX战靴\n70\nhttps://www.bilibili.com/video/BV1Pq4y1m7wK",
            "result",
        )
        ctx.should_finished()
Esempio n. 17
0
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)
Esempio n. 18
0
async def test_history_get_invalid_arg(app: App):
    """测试历史"""
    from nonebot.adapters.onebot.v11 import Message

    from src.plugins.repeat import history_cmd

    async with app.test_matcher(history_cmd) as ctx:
        bot = ctx.create_bot()

        event = fake_group_message_event(message=Message("/history"))
        year_event = fake_group_message_event(message=Message("2020"))
        invalid_month_event = fake_group_message_event(message=Message("test"))
        month_event = fake_group_message_event(message=Message("1"))
        day_event = fake_group_message_event(message=Message("0"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "你请输入你要查询的年份", True)

        ctx.receive_event(bot, year_event)
        ctx.should_call_send(year_event, "你请输入你要查询的月份", True)

        ctx.receive_event(bot, invalid_month_event)
        ctx.should_call_send(invalid_month_event, "请只输入数字,不然我没法理解呢!", True)
        ctx.should_rejected()

        ctx.receive_event(bot, month_event)
        ctx.should_call_send(month_event, "你请输入你要查询的日期(如查询整月排名请输入 0)", True)

        ctx.receive_event(bot, day_event)
        ctx.should_call_send(day_event, "2020 年 1 月的数据不存在,请换个试试吧 0.0", True)
Esempio n. 19
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()
Esempio n. 20
0
async def test_status(
    app: App,
    mocker: MockerFixture,
):
    """测试状态"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.repeat import recorder_obj, status_cmd

    recorder_obj.start_time = datetime(2020, 1, 1, 0, 0, 0)
    mocked_datetime = mocker.patch("src.plugins.repeat.status.datetime")
    mocked_datetime.now.return_value = datetime(2021, 2, 2, 1, 1, 1)
    mocked_server_status = mocker.patch("src.plugins.repeat.status.server_status")
    mocked_server_status.return_value = "test"

    async with app.test_matcher(status_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/status"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "已在线 1 年 1 月 1 天 1 小时 1 分钟 1 秒\ntest", "result")
        ctx.should_finished()

    mocked_datetime.now.assert_called_once()
    mocked_server_status.assert_called_once()
Esempio n. 21
0
async def test_eorzean(
    app: App,
    mocker: MockerFixture,
):
    """测试艾欧泽亚天气"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.weather import weather_cmd

    mocked_time = mocker.patch("src.plugins.weather.eorzean_api.time")
    mocked_time.time.return_value = 1641619586

    async with app.test_matcher(weather_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/天气 利姆萨·罗敏萨"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "利姆萨·罗敏萨\n当前天气:碧空\n还剩13分34秒切换到天气:阴云\n还剩36分54秒切换到天气:碧空\n还剩1时0分14秒切换到天气:碧空\n还剩1时23分34秒切换到天气:晴朗\n还剩1时46分54秒切换到天气:碧空\n还剩2时10分14秒切换到天气:碧空\n还剩2时33分34秒切换到天气:碧空\n还剩2时56分54秒切换到天气:晴朗\n还剩3时20分14秒切换到天气:晴朗",
            "result",
        )
        ctx.should_finished()

    mocked_time.time.assert_called_once()
Esempio n. 22
0
async def test_default(app: App, load_plugin):
    from nonebot.params import DefaultParam

    from plugins.param.param_default import default

    async with app.test_dependent(default, allow_types=[DefaultParam]) as ctx:
        ctx.should_return(1)
Esempio n. 23
0
async def test_roll_get_arg(
    app: App,
    mocker: MockerFixture,
):
    """测试点数,获取参数"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.roll import roll_cmd

    randint = mocker.patch("src.plugins.roll.roll.randint")
    randint.return_value = 1

    async with app.test_matcher(roll_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/roll"))
        next_event = fake_group_message_event(message=Message("d100"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "欢迎使用 NGA 风格 ROLL 点插件\n请问你想怎么 ROLL 点\n你可以输入 d100\n也可以输入 2d100+2d50",
            "result",
        )
        ctx.should_rejected()
        ctx.receive_event(bot, next_event)
        ctx.should_call_send(next_event, "d100=d100(1)=1", "result", at_sender=True)
        ctx.should_finished()

    randint.assert_called_once_with(1, 100)
Esempio n. 24
0
async def test_gete(
    app: App,
    mocker: MockerFixture,
):
    """测试藏宝选门,两个门的情况"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.ff14 import gate_cmd
    from src.plugins.ff14.gate import EXPR_GATE

    render_expression = mocker.patch("src.plugins.ff14.gate.render_expression")
    render_expression.return_value = Message("test")
    randint = mocker.patch("src.plugins.ff14.gate.randint")
    randint.return_value = 1

    async with app.test_matcher(gate_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/gate 2"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, Message("test"), "result", at_sender=True)
        ctx.should_finished()

    randint.assert_called_once_with(1, 2)
    render_expression.assert_called_once_with(EXPR_GATE, direction="左边")
Esempio n. 25
0
async def test_music_get_arg(
    app: App,
    mocker: MockerFixture,
):
    """测试启动问候已开启的情况"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message, MessageSegment
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.music import music_cmd

    get = mocker.patch("httpx.AsyncClient.get", side_effect=mocked_get)

    async with app.test_matcher(music_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/music"))
        next_event = fake_group_message_event(
            message=Message(MessageSegment.image("12")))
        final_event = fake_group_message_event(message=Message("test"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(event, "你想听哪首歌呢?", "result")
        ctx.should_rejected()
        ctx.receive_event(bot, next_event)
        ctx.should_call_send(next_event, "歌曲名不能为空呢,请重新输入!", "result")
        ctx.should_rejected()
        ctx.receive_event(bot, final_event)
        ctx.should_call_send(final_event,
                             MessageSegment.music("163", 1825190456), "result")
        ctx.should_finished()

    get.assert_called_once_with("http://netease:3000/search?keywords=test")
Esempio n. 26
0
async def test_calendar(
    app: App,
    mocker: MockerFixture,
):
    """测试日程"""
    from nonebot import get_driver
    from nonebot.adapters.onebot.v11 import Adapter, Bot, Message
    from nonebug.mixin.call_api.fake import make_fake_adapter, make_fake_bot

    from src.plugins.pcr import calendar_cmd

    get = mocker.patch("httpx.AsyncClient.get", side_effect=mocked_get)
    mocked_datetime = mocker.patch("src.plugins.pcr.data.datetime")
    mocked_datetime.now.return_value = datetime(2022, 1, 8)
    mocked_datetime.strptime = datetime.strptime

    async with app.test_matcher(calendar_cmd) as ctx:
        adapter = make_fake_adapter(Adapter)(get_driver(), ctx)
        bot = make_fake_bot(Bot)(adapter, "1")
        event = fake_group_message_event(message=Message("/pcr.calendar"))

        ctx.receive_event(bot, event)
        ctx.should_call_send(
            event,
            "一周日程:\n======20220108======\n⨠圣迹2.0倍\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n⨠神殿2.0倍\n======20220109======\n⨠圣迹2.0倍\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n⨠神殿2.0倍\n======20220110======\n⨠圣迹2.0倍\n⨠地下城2.0倍\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n⨠神殿2.0倍\n======20220111======\n⨠圣迹2.0倍\n⨠地下城2.0倍\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n⨠神殿2.0倍\n======20220112======\n⨠N图2.0倍\n⨠地下城2.0倍\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n======20220113======\n⨠N图2.0倍\n⨠地下城2.0倍\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n======20220114======\n⨠N图2.0倍\n⨠地下城2.0倍\n⨠探索2.0倍\n⨠活动:新春破晓之星大危机\n⨠活动:狂奔!\u3000兰德索尔公会竞速赛\n\n更多日程:https://pcrbot.github.io/pcr-calendar/#cn",
            "result",
        )
        ctx.should_finished()

    get.assert_called_once_with(
        "https://pcrbot.github.io/calendar-updater-action/cn.json")
    assert mocked_datetime.now.call_count == 2
Esempio n. 27
0
async def test_query_with_superuser_private(app: App):
    from nonebot.adapters.onebot.v11.bot import Bot
    from nonebot.adapters.onebot.v11.message import Message
    from nonebot_bison.config_manager import group_manage_matcher

    async with app.test_matcher(group_manage_matcher) as ctx:
        bot = ctx.create_bot(base=Bot)
        event = fake_private_message_event(
            message=Message("群管理"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event)
        ctx.should_pass_rule()
        ctx.should_pass_permission()
        ctx.should_call_api(
            "get_group_list", {}, [{"group_id": 101, "group_name": "test group"}]
        )
        ctx.should_call_send(
            event,
            Message("请选择需要管理的群:\n1. 101 - test group\n请输入左侧序号\n中止操作请输入'取消'"),
            True,
        )
        event_1_err = fake_private_message_event(
            message=Message("0"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event_1_err)
        ctx.should_call_send(event_1_err, "请输入正确序号", True)
        ctx.should_rejected()
        event_1_ok = fake_private_message_event(
            message=Message("1"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event_1_ok)
        ctx.should_call_send(event_1_ok, "请输入需要使用的命令:添加订阅,查询订阅,删除订阅,取消", True)
        event_2_err = fake_private_message_event(
            message=Message("222"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event_2_err)
        ctx.should_call_send(event_2_err, "请输入正确的命令", True)
        ctx.should_rejected()
        event_2_ok = fake_private_message_event(
            message=Message("查询订阅"),
            sender=fake_superuser,
            to_me=True,
            user_id=fake_superuser.user_id,
        )
        ctx.receive_event(bot, event_2_ok)
        ctx.should_pass_rule()
        ctx.should_pass_permission()
Esempio n. 28
0
async def test_bot(app: App, load_plugin):
    from nonebot.params import BotParam
    from plugins.param.param_bot import get_bot

    async with app.test_dependent(get_bot, allow_types=[BotParam]) as ctx:
        bot = ctx.create_bot()
        ctx.pass_params(bot=bot)
        ctx.should_return(bot)
Esempio n. 29
0
async def test_exception(app: App, load_plugin):
    from nonebot.params import ExceptionParam
    from plugins.param.param_exception import exc

    exception = ValueError("test")
    async with app.test_dependent(exc, allow_types=[ExceptionParam]) as ctx:
        ctx.pass_params(exception=exception)
        ctx.should_return(exception)
Esempio n. 30
0
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"