Skip to content

Commit 9ff9cd4

Browse files
committed
Move public func to conftest, add room testcase.
1 parent 5b92fee commit 9ff9cd4

File tree

3 files changed

+148
-78
lines changed

3 files changed

+148
-78
lines changed

tests/conftest.py

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,145 @@
11
import sys
22
from os.path import abspath, dirname, join
33

4+
from typing import Dict, List, MutableMapping, Optional, Tuple
5+
import pytest
6+
from wechaty_grpc.wechaty.puppet import MessageType
7+
from wechaty_puppet.puppet import Puppet
8+
from wechaty_puppet.schemas.message import MessageQueryFilter
9+
from wechaty_puppet.schemas.types import (
10+
MessagePayload,
11+
RoomPayload,
12+
ContactPayload,
13+
RoomMemberPayload,
14+
)
15+
from wechaty_puppet.schemas.puppet import PuppetOptions
416

517
WORKSPACE = dirname(dirname(abspath(__file__)))
618
SCRIPT_DIR = join(WORKSPACE, "src")
719
sys.path.append(SCRIPT_DIR)
20+
21+
from wechaty.wechaty import Wechaty, WechatyOptions # noqa
22+
23+
24+
class FakePuppet(Puppet):
25+
"""A fake puppet implementation that can be used for tests"""
26+
27+
def __init__(self, options: PuppetOptions, name: str = "fake_puppet"):
28+
super().__init__(options, name=name)
29+
30+
self.fake_messages: MutableMapping[str, MessagePayload] = {}
31+
self.fake_rooms: MutableMapping[str, RoomPayload] = {}
32+
self.fake_contacts: MutableMapping[str, ContactPayload] = {}
33+
self.fake_room_members: Dict[Tuple[str, str], RoomMemberPayload] = {}
34+
35+
def add_message(self, payload: MessagePayload) -> None:
36+
"""Manually add a message that can be looked up later"""
37+
print(payload.id)
38+
self.fake_messages[payload.id] = payload
39+
40+
def add_room(self, payload: RoomPayload) -> None:
41+
"""Manually add a room that can be looked up later"""
42+
self.fake_rooms[payload.id] = payload
43+
44+
def add_contact(self, payload: ContactPayload) -> None:
45+
"""Manually add a contact that can be looked up later"""
46+
self.fake_contacts[payload.id] = payload
47+
48+
def add_room_member(self, room_id: str, payload: RoomMemberPayload) -> None:
49+
"""Manually add a room member that can be looked up later"""
50+
self.fake_room_members[(room_id, payload.id)] = payload
51+
52+
async def message_search(self, query: Optional[MessageQueryFilter] = None) -> List[str]:
53+
return [query.id]
54+
55+
async def room_members(self, room_id: str) -> List[str]:
56+
return [
57+
room_member
58+
for (key, room_member) in self.fake_room_members.items()
59+
if key[0] == room_id
60+
]
61+
62+
async def message_payload(self, message_id: str) -> MessagePayload:
63+
print(f"Finding {message_id}")
64+
return self.fake_messages[message_id]
65+
66+
async def room_member_payload(
67+
self, room_id: str, contact_id: str
68+
) -> Optional[RoomMemberPayload]:
69+
return self.fake_room_members.get((room_id, contact_id))
70+
71+
async def room_payload(self, room_id: str) -> RoomPayload:
72+
return self.fake_rooms[room_id]
73+
74+
async def contact_payload(self, contact_id: str) -> ContactPayload:
75+
return self.fake_contacts[contact_id]
76+
77+
78+
@pytest.fixture
79+
async def test_bot() -> Wechaty:
80+
"""Initialize a Wechaty instance and return it"""
81+
puppet = FakePuppet(options=PuppetOptions())
82+
puppet.add_contact(ContactPayload("wechaty_user", name="Wechaty User"))
83+
puppet.add_contact(ContactPayload("fake_user", name="Fake User"))
84+
puppet.add_contact(ContactPayload("test_user", name="Test User"))
85+
puppet.add_room(
86+
RoomPayload(
87+
id="fake_room",
88+
topic="fake_room",
89+
owner_id="wechaty_user",
90+
member_ids=["wechaty_user", "fake_user", "test_user"],
91+
)
92+
)
93+
puppet.add_room_member("fake_room", RoomMemberPayload("wechaty_user"))
94+
puppet.add_room_member("fake_room", RoomMemberPayload("fake_user", room_alias="Fake Alias"))
95+
puppet.add_room_member("fake_room", RoomMemberPayload("test_user"))
96+
puppet.add_message(
97+
MessagePayload("no_mention", text="foo bar asd", type=MessageType.MESSAGE_TYPE_TEXT)
98+
)
99+
puppet.add_message(
100+
MessagePayload(
101+
"room_no_mention",
102+
text="beep",
103+
room_id="fake_room",
104+
type=MessageType.MESSAGE_TYPE_TEXT,
105+
)
106+
)
107+
puppet.add_message(
108+
MessagePayload(
109+
"room_with_mentions",
110+
text="@Wechaty User @Test User test message asd",
111+
room_id="fake_room",
112+
type=MessageType.MESSAGE_TYPE_TEXT,
113+
mention_ids=["wechaty_user", "test_user"],
114+
)
115+
)
116+
puppet.add_message(
117+
MessagePayload(
118+
"room_with_mentions_and_alias",
119+
text="123123 @Wechaty User @Test User @Fake Alias kkasd",
120+
room_id="fake_room",
121+
type=MessageType.MESSAGE_TYPE_TEXT,
122+
mention_ids=["wechaty_user", "test_user", "fake_user"],
123+
)
124+
)
125+
puppet.add_message(
126+
MessagePayload(
127+
"room_with_mentions_and_alias_mismatched",
128+
text="123123@Wechaty User @Test User @Fake User beep",
129+
room_id="fake_room",
130+
type=MessageType.MESSAGE_TYPE_TEXT,
131+
mention_ids=["wechaty_user", "test_user", "fake_user"],
132+
)
133+
)
134+
puppet.add_message(
135+
MessagePayload(
136+
"room_with_text_mentions",
137+
text="@Wechaty User @Test User @Fake Alias beep!!",
138+
room_id="fake_room",
139+
type=MessageType.MESSAGE_TYPE_TEXT,
140+
)
141+
)
142+
143+
bot = Wechaty(WechatyOptions(puppet=puppet))
144+
await bot.init_puppet()
145+
return bot

tests/test_room.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import pytest
2+
from wechaty.wechaty import Wechaty # noqa
3+
4+
5+
@pytest.mark.asyncio
6+
async def test_room(test_bot: Wechaty) -> None:
7+
owner = await test_bot.Room("fake_room").owner()
8+
await owner.ready()
9+
assert owner.contact_id == "wechaty_user"

tests/user_message_test.py

Lines changed: 1 addition & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,5 @@
1-
from typing import Dict, List, MutableMapping, Optional, Tuple
21
import pytest
3-
from wechaty_grpc.wechaty.puppet import MessageType
4-
from wechaty_puppet.puppet import Puppet
5-
from wechaty_puppet.schemas.message import MessageQueryFilter
6-
from wechaty_puppet.schemas.types import MessagePayload, RoomPayload, ContactPayload, RoomMemberPayload
7-
from wechaty_puppet.schemas.puppet import PuppetOptions
8-
from wechaty.wechaty import Wechaty, WechatyOptions
9-
10-
11-
class FakePuppet(Puppet):
12-
"""A fake puppet implementation that can be used for tests"""
13-
14-
def __init__(self, options: PuppetOptions, name: str = "fake_puppet"):
15-
super().__init__(options, name=name)
16-
17-
self.fake_messages: MutableMapping[str, MessagePayload] = {}
18-
self.fake_rooms: MutableMapping[str, RoomPayload] = {}
19-
self.fake_contacts: MutableMapping[str, ContactPayload] = {}
20-
self.fake_room_members: Dict[Tuple[str, str], RoomMemberPayload] = {}
21-
22-
def add_message(self, payload: MessagePayload) -> None:
23-
"""Manually add a message that can be looked up later"""
24-
print(payload.id)
25-
self.fake_messages[payload.id] = payload
26-
27-
def add_room(self, payload: RoomPayload) -> None:
28-
"""Manually add a room that can be looked up later"""
29-
self.fake_rooms[payload.id] = payload
30-
31-
def add_contact(self, payload: ContactPayload) -> None:
32-
"""Manually add a contact that can be looked up later"""
33-
self.fake_contacts[payload.id] = payload
34-
35-
def add_room_member(self, room_id: str, payload: RoomMemberPayload) -> None:
36-
"""Manually add a room member that can be looked up later"""
37-
self.fake_room_members[(room_id, payload.id)] = payload
38-
39-
async def message_search(self, query: Optional[MessageQueryFilter] = None) -> List[str]:
40-
return [query.id]
41-
42-
async def room_members(self, room_id: str) -> List[str]:
43-
return [room_member for (key, room_member) in self.fake_room_members.items() if key[0] == room_id]
44-
45-
async def message_payload(self, message_id: str) -> MessagePayload:
46-
print(f"Finding {message_id}")
47-
return self.fake_messages[message_id]
48-
49-
async def room_member_payload(self, room_id: str, contact_id: str) -> Optional[RoomMemberPayload]:
50-
return self.fake_room_members.get((room_id, contact_id))
51-
52-
async def room_payload(self, room_id: str) -> RoomPayload:
53-
return self.fake_rooms[room_id]
54-
55-
async def contact_payload(self, contact_id: str) -> ContactPayload:
56-
return self.fake_contacts[contact_id]
57-
58-
59-
@pytest.fixture
60-
async def test_bot() -> Wechaty:
61-
"""Initialize a Wechaty instance and return it"""
62-
puppet = FakePuppet(options=PuppetOptions())
63-
puppet.add_contact(ContactPayload("wechaty_user", name="Wechaty User"))
64-
puppet.add_contact(ContactPayload("fake_user", name="Fake User"))
65-
puppet.add_contact(ContactPayload("test_user", name="Test User"))
66-
puppet.add_room(RoomPayload("fake_room", "fake_room", member_ids=["wechaty_user", "fake_user", "test_user"]))
67-
puppet.add_room_member("fake_room", RoomMemberPayload("wechaty_user"))
68-
puppet.add_room_member("fake_room", RoomMemberPayload("fake_user", room_alias="Fake Alias"))
69-
puppet.add_room_member("fake_room", RoomMemberPayload("test_user"))
70-
puppet.add_message(MessagePayload('no_mention', text='foo bar asd', type=MessageType.MESSAGE_TYPE_TEXT))
71-
puppet.add_message(MessagePayload('room_no_mention', text='beep', room_id="fake_room", type=MessageType.MESSAGE_TYPE_TEXT))
72-
puppet.add_message(MessagePayload('room_with_mentions', text='@Wechaty User @Test User test message asd', room_id="fake_room", type=MessageType.MESSAGE_TYPE_TEXT, mention_ids=["wechaty_user", "test_user"]))
73-
puppet.add_message(MessagePayload('room_with_mentions_and_alias', text='123123 @Wechaty User @Test User @Fake Alias kkasd', room_id="fake_room", type=MessageType.MESSAGE_TYPE_TEXT, mention_ids=["wechaty_user", "test_user", "fake_user"]))
74-
puppet.add_message(MessagePayload('room_with_mentions_and_alias_mismatched', text='123123@Wechaty User @Test User @Fake User beep', room_id="fake_room", type=MessageType.MESSAGE_TYPE_TEXT, mention_ids=["wechaty_user", "test_user", "fake_user"]))
75-
puppet.add_message(MessagePayload('room_with_text_mentions', text='@Wechaty User @Test User @Fake Alias beep!!', room_id="fake_room", type=MessageType.MESSAGE_TYPE_TEXT))
76-
77-
bot = Wechaty(WechatyOptions(puppet=puppet))
78-
await bot.init_puppet()
79-
return bot
2+
from wechaty.wechaty import Wechaty
803

814

825
@pytest.mark.asyncio

0 commit comments

Comments
 (0)