summaryrefslogtreecommitdiff
path: root/test/utils.py
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2022-02-03 14:36:24 +0800
committerKyomotoi <[email protected]>2022-02-03 14:36:24 +0800
commit3e32ca3964ff8f40e0b491e87f153040f2348fd0 (patch)
treed04d19ba5a25f6f1f6a9c4f8c398d49eb252df3c /test/utils.py
parentf5a020d45f7294214bbcd488955b9c391d651a6d (diff)
downloadATRI-3e32ca3964ff8f40e0b491e87f153040f2348fd0.tar.gz
ATRI-3e32ca3964ff8f40e0b491e87f153040f2348fd0.tar.bz2
ATRI-3e32ca3964ff8f40e0b491e87f153040f2348fd0.zip
🔖 更新版本:
更新记录请参考文档: atri.kyomotoi.moe/changelog/overview/
Diffstat (limited to 'test/utils.py')
-rw-r--r--test/utils.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/utils.py b/test/utils.py
new file mode 100644
index 0000000..70d1a27
--- /dev/null
+++ b/test/utils.py
@@ -0,0 +1,87 @@
+"""
+Fork from: https://github.com/nonebot/nonebot2/blob/master/tests/utils.py
+"""
+from typing import TYPE_CHECKING, Type, Optional
+
+from pydantic import create_model
+
+if TYPE_CHECKING:
+ from nonebot.adapters import Event, Message
+
+
+def make_fake_message() -> Type["Message"]:
+ from nonebot.adapters import Message, MessageSegment
+
+ class FakeMessageSegment(MessageSegment):
+ @classmethod
+ def get_message_class(cls):
+ return FakeMessage
+
+ 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})
+
+ @classmethod
+ def image(cls, url: str):
+ return cls("image", {"url": url})
+
+ def is_text(self) -> bool:
+ return self.type == "text"
+
+ 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)
+
+ class FakeEvent(_Fake):
+ def get_type(self) -> str:
+ return _type
+
+ def get_event_name(self) -> str:
+ return _name
+
+ def get_event_description(self) -> str:
+ return _description
+
+ def get_user_id(self) -> str:
+ return _user_id
+
+ def get_session_id(self) -> str:
+ return _session_id
+
+ def get_message(self) -> "Message":
+ if _message is not None:
+ return _message
+ raise NotImplementedError
+
+ def is_tome(self) -> bool:
+ return _to_me
+
+ class Config:
+ extra = "forbid"
+
+ return FakeEvent