Skip to content

Commit de5d7f9

Browse files
committed
这个test好麻烦但是我又要做
1 parent 306fdd9 commit de5d7f9

3 files changed

Lines changed: 115 additions & 0 deletions

File tree

tests/conftest.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import os
2+
from pathlib import Path
3+
4+
import pytest
5+
import nonebot
6+
from pytest_asyncio import is_async_test
7+
from nonebot.adapters.onebot.v11 import Adapter as OnebotV11Adapter
8+
9+
if Path(".env.dev").exists():
10+
os.environ["ENVIRONMENT"] = "dev"
11+
else:
12+
os.environ["ENVIRONMENT"] = "test"
13+
14+
15+
def pytest_collection_modifyitems(items: list[pytest.Item]):
16+
pytest_asyncio_tests = (item for item in items if is_async_test(item))
17+
session_scope_marker = pytest.mark.asyncio(loop_scope="session")
18+
for async_test in pytest_asyncio_tests:
19+
async_test.add_marker(session_scope_marker, append=False)
20+
21+
22+
@pytest.fixture(scope="session", autouse=True)
23+
async def after_nonebot_init(after_nonebot_init: None):
24+
# 加载适配器
25+
driver = nonebot.get_driver()
26+
driver.register_adapter(OnebotV11Adapter)
27+
28+
# 加载插件
29+
nonebot.load_from_toml("pyproject.toml")

tests/fake.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from typing import TYPE_CHECKING, Literal
2+
3+
if TYPE_CHECKING:
4+
from nonebot.adapters.onebot.v11 import GroupMessageEvent as GroupMessageEventV11
5+
from nonebot.adapters.onebot.v11 import (
6+
PrivateMessageEvent as PrivateMessageEventV11,
7+
)
8+
9+
10+
def fake_group_message_event_v11(**field) -> "GroupMessageEventV11":
11+
import random
12+
13+
from pydantic import create_model
14+
from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent
15+
from nonebot.adapters.onebot.v11.event import Reply, Sender
16+
17+
_Fake = create_model("_Fake", __base__=GroupMessageEvent)
18+
19+
class FakeEvent(_Fake):
20+
time: int = 1000000
21+
self_id: int = 1
22+
post_type: Literal["message"] = "message"
23+
sub_type: str = "normal"
24+
user_id: int = 12345678
25+
message_type: Literal["group"] = "group"
26+
group_id: int = 87654321
27+
message_id: int = random.randint(1, 10000000)
28+
message: Message = Message("test")
29+
raw_message: str = "test"
30+
font: int = 0
31+
sender: Sender = Sender(
32+
card="",
33+
nickname="test",
34+
role="member",
35+
)
36+
to_me: bool = False
37+
reply: Reply | None = None
38+
39+
return FakeEvent(**field)
40+
41+
42+
def fake_private_message_event_v11(**field) -> "PrivateMessageEventV11":
43+
from pydantic import create_model
44+
from nonebot.adapters.onebot.v11 import Message, PrivateMessageEvent
45+
from nonebot.adapters.onebot.v11.event import Sender
46+
47+
_Fake = create_model("_Fake", __base__=PrivateMessageEvent)
48+
49+
class FakeEvent(_Fake):
50+
time: int = 1000000
51+
self_id: int = 1
52+
post_type: Literal["message"] = "message"
53+
sub_type: str = "friend"
54+
user_id: int = 10
55+
message_type: Literal["private"] = "private"
56+
message_id: int = 1
57+
message: Message = Message("test")
58+
raw_message: str = "test"
59+
font: int = 0
60+
sender: Sender = Sender(nickname="test")
61+
to_me: bool = False
62+
63+
return FakeEvent(**field)

tests/plugin_test.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import pytest
2+
from fake import fake_group_message_event_v11
3+
from nonebug import App
4+
5+
6+
@pytest.mark.asyncio
7+
async def test_pip(app: App):
8+
import nonebot
9+
from nonebot.adapters.onebot.v11 import Bot, Message
10+
from nonebot.adapters.onebot.v11 import Adapter as OnebotV11Adapter
11+
12+
event = fake_group_message_event_v11(message="pip install nonebot2")
13+
try:
14+
from nonebot_plugin_template import pip # type:ignore
15+
except ImportError:
16+
pytest.skip("nonebot_plugin_template.pip not found")
17+
18+
async with app.test_matcher(pip) as ctx:
19+
adapter = nonebot.get_adapter(OnebotV11Adapter)
20+
bot = ctx.create_bot(base=Bot, adapter=adapter)
21+
ctx.receive_event(bot, event)
22+
ctx.should_call_send(event, Message("nonebot2"), result=None, bot=bot)
23+
ctx.should_finished()

0 commit comments

Comments
 (0)