diff options
author | Kyomotoi <[email protected]> | 2023-05-11 14:56:58 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2023-05-11 14:56:58 +0800 |
commit | cf2033627b63e4a444ee8971fd05f3e88e45fe86 (patch) | |
tree | 02c7b616dc94f63888413b5b9bb23fd95b29e8b2 /test/utils.py | |
parent | 546885062c1dae673fb5e31dec900a4536a2b3fa (diff) | |
download | ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.tar.gz ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.tar.bz2 ATRI-cf2033627b63e4a444ee8971fd05f3e88e45fe86.zip |
✅ 更新测试用例
Diffstat (limited to 'test/utils.py')
-rw-r--r-- | test/utils.py | 121 |
1 files changed, 53 insertions, 68 deletions
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("&", "&").replace("[", "[").replace("]", "]") + if escape_comma: + s = s.replace(",", ",") + 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 |