| from unittest.mock import AsyncMock |
|
|
| import pytest |
|
|
| import astrbot.core.message.components as Comp |
| from astrbot.core.message.message_event_result import MessageChain |
| from astrbot.core.pipeline.respond.stage import RespondStage |
| from astrbot.core.platform.sources.aiocqhttp.aiocqhttp_message_event import ( |
| AiocqhttpMessageEvent, |
| ) |
|
|
|
|
| def test_poke_to_dict_matches_onebot_v11_segment_format(): |
| poke = Comp.Poke(type="126", id=2003) |
| assert poke.toDict() == { |
| "type": "poke", |
| "data": {"type": "126", "id": "2003"}, |
| } |
|
|
|
|
| def test_poke_to_dict_keeps_legacy_qq_compatible(): |
| poke = Comp.Poke(type="poke", qq=2916963017) |
| assert poke.toDict() == { |
| "type": "poke", |
| "data": {"type": "126", "id": "2916963017"}, |
| } |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_respond_stage_treats_poke_with_target_as_non_empty(): |
| stage = RespondStage() |
| chain = [Comp.Poke(type="126", id=2003)] |
| assert await stage._is_empty_message_chain(chain) is False |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_aiocqhttp_parse_json_outputs_standard_poke_data(): |
| chain = MessageChain([Comp.Poke(type="126", id=2003)]) |
| data = await AiocqhttpMessageEvent._parse_onebot_json(chain) |
| assert data == [{"type": "poke", "data": {"type": "126", "id": "2003"}}] |
|
|
|
|
| @pytest.mark.asyncio |
| async def test_aiocqhttp_send_message_dispatches_onebot_v11_poke_payload(): |
| bot = AsyncMock() |
| chain = MessageChain([Comp.Poke(type="126", id=2003)]) |
|
|
| await AiocqhttpMessageEvent.send_message( |
| bot=bot, |
| message_chain=chain, |
| event=None, |
| is_group=True, |
| session_id="123456", |
| ) |
|
|
| bot.send_group_msg.assert_awaited_once_with( |
| group_id=123456, |
| message=[{"type": "poke", "data": {"type": "126", "id": "2003"}}], |
| ) |
|
|