Skip to content

Commit ea69eac

Browse files
authored
test_: Tests for wakuext messages 4 (#6428)
* test_: update message outgoing status * test_: rename send one to one message method * test_: refactor community_messages * test_: add test send community message * test_: restructure tests wakuext messages * test_: fix dynamic properties in schema * test_: refactor send_community_messages
1 parent 3663fb0 commit ea69eac

13 files changed

+1283
-126
lines changed

Diff for: tests-functional/clients/services/wakuext.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def add_contact(self, contact_id: str, displayName: str):
6868
response = self.rpc_request("addContact", params)
6969
return response.json()
7070

71-
def send_message(self, contact_id: str, message: str):
71+
def send_one_to_one_message(self, contact_id: str, message: str):
7272
params = [{"id": contact_id, "message": message}]
7373
response = self.rpc_request("sendOneToOneMessage", params)
7474
return response.json()
@@ -187,8 +187,8 @@ def delete_message_and_send(self, message_id: str):
187187
response = self.rpc_request("deleteMessageAndSend", params)
188188
return response.json()
189189

190-
def delete_message_for_me_and_sync(self, localChatID: str, message_id: str):
191-
params = [localChatID, message_id]
190+
def delete_message_for_me_and_sync(self, local_chat_id: str, message_id: str):
191+
params = [local_chat_id, message_id]
192192
response = self.rpc_request("deleteMessageForMeAndSync", params)
193193
return response.json()
194194

@@ -201,3 +201,8 @@ def first_unseen_message_id(self, chat_id: str):
201201
params = [chat_id]
202202
response = self.rpc_request("firstUnseenMessageID", params)
203203
return response.json()
204+
205+
def update_message_outgoing_status(self, message_id: str, new_status: str):
206+
params = [message_id, new_status]
207+
response = self.rpc_request("updateMessageOutgoingStatus", params)
208+
return response.json()

Diff for: tests-functional/schemas/wakuext_sendChatMessage

+1,093
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "http://json-schema.org/schema#",
3+
"properties": {
4+
"id": {
5+
"type": "integer"
6+
},
7+
"jsonrpc": {
8+
"type": "string"
9+
},
10+
"result": {
11+
"type": "null"
12+
}
13+
},
14+
"required": [
15+
"id",
16+
"jsonrpc",
17+
"result"
18+
],
19+
"type": "object"
20+
}

Diff for: tests-functional/steps/messenger.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ def send_multiple_one_to_one_messages(self, message_count=1) -> tuple[list[str],
214214
for i in range(message_count):
215215
message_text = f"test_message_{i}_{uuid4()}"
216216
sent_texts.append(message_text)
217-
response = self.sender.wakuext_service.send_message(self.receiver.public_key, message_text)
217+
response = self.sender.wakuext_service.send_one_to_one_message(self.receiver.public_key, message_text)
218218
responses.append(response)
219219

220220
return sent_texts, responses

Diff for: tests-functional/tests/reliability/test_light_client_rate_limiting.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def test_light_client_rate_limiting(self):
1717

1818
for i in range(200):
1919
message_text = f"test_message_{i+1}_{uuid4()}"
20-
response = self.sender.wakuext_service.send_message(self.receiver.public_key, message_text)
20+
response = self.sender.wakuext_service.send_one_to_one_message(self.receiver.public_key, message_text)
2121
expected_message = self.get_message_by_content_type(response, content_type=MessageContentType.TEXT_PLAIN.value)[0]
2222
sent_messages.append(expected_message)
2323
sleep(0.1)

Diff for: tests-functional/tests/reliability/test_one_to_one_messages.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_one_to_one_message_with_low_bandwidth(self):
3131
def test_one_to_one_message_with_node_pause_30_seconds(self):
3232
with self.node_pause(self.receiver):
3333
message_text = f"test_message_{uuid4()}"
34-
self.sender.wakuext_service.send_message(self.receiver.public_key, message_text)
34+
self.sender.wakuext_service.send_one_to_one_message(self.receiver.public_key, message_text)
3535
sleep(30)
3636
self.receiver.find_signal_containing_pattern(SignalType.MESSAGES_NEW.value, event_pattern=message_text)
3737
self.sender.wait_for_signal(SignalType.MESSAGE_DELIVERED.value)

Diff for: tests-functional/tests/test_wakuext_default_messaging.py

-10
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,6 @@
66
@pytest.mark.usefixtures("setup_two_unprivileged_nodes")
77
class TestDefaultMessaging(MessengerSteps):
88

9-
def test_one_to_one_messages(self):
10-
responses = self.one_to_one_message(5)
11-
12-
for response in responses:
13-
self.receiver.verify_json_schema(response, method="wakuext_sendOneToOneMessage")
14-
15-
chat = response["result"]["chats"][0]
16-
assert chat["id"] == self.receiver.public_key
17-
assert chat["lastMessage"]["displayName"] == self.sender.display_name
18-
199
def test_add_contact(self):
2010
self.add_contact(execution_number=1, network_condition=None, privileged=False)
2111

Diff for: tests-functional/tests/test_wakuext_message_reactions.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
class TestMessageReactions(MessengerSteps):
1313
def test_one_to_one_message_reactions(self):
1414
self.make_contacts()
15-
response = self.sender.wakuext_service.send_message(self.receiver.public_key, "test_message")
15+
response = self.sender.wakuext_service.send_one_to_one_message(self.receiver.public_key, "test_message")
1616
message = self.get_message_by_content_type(response, content_type=MessageContentType.TEXT_PLAIN.value)[0]
1717
message_id, sender_chat_id = message["id"], message["chatId"]
1818
receiver_chat_id = self.receiver.wakuext_service.rpc_request(method="chats").json()["result"][0]["id"]
@@ -60,7 +60,7 @@ def test_one_to_one_message_reactions(self):
6060
)
6161
assert not response.json()["result"]
6262

63-
response = self.sender.wakuext_service.send_message(self.receiver.public_key, "test_message 1")
63+
response = self.sender.wakuext_service.send_one_to_one_message(self.receiver.public_key, "test_message 1")
6464
message_1 = self.get_message_by_content_type(response, content_type=MessageContentType.TEXT_PLAIN.value)[0]
6565
emoji_1_id = self.receiver.wakuext_service.rpc_request(method="sendEmojiReaction", params=[receiver_chat_id, message_1["id"], 2]).json()[
6666
"result"
@@ -71,7 +71,7 @@ def test_one_to_one_message_reactions(self):
7171
timeout=60,
7272
)
7373

74-
response = self.receiver.wakuext_service.send_message(self.sender.public_key, "test_message 2")
74+
response = self.receiver.wakuext_service.send_one_to_one_message(self.sender.public_key, "test_message 2")
7575
message_2 = self.get_message_by_content_type(response, content_type=MessageContentType.TEXT_PLAIN.value)[0]
7676
emoji_2_id = self.sender.wakuext_service.rpc_request(method="sendEmojiReaction", params=[sender_chat_id, message_2["id"], 3]).json()[
7777
"result"
+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import pytest
2+
3+
from steps.messenger import MessengerSteps
4+
5+
6+
@pytest.mark.usefixtures("setup_two_unprivileged_nodes")
7+
@pytest.mark.rpc
8+
class TestFetchingChatMessages(MessengerSteps):
9+
def test_chat_messages(self):
10+
sent_texts, _ = self.send_multiple_one_to_one_messages(1)
11+
12+
sender_chat_id = self.receiver.public_key
13+
response = self.sender.wakuext_service.chat_messages(sender_chat_id)
14+
15+
self.sender.verify_json_schema(response, method="wakuext_chatMessages")
16+
17+
messages = response.get("result", {}).get("messages", [])
18+
assert len(messages) == 1
19+
actual_text = messages[0].get("text", "")
20+
assert actual_text == sent_texts[0]
21+
22+
def test_chat_messages_with_pagination(self):
23+
sent_texts, _ = self.send_multiple_one_to_one_messages(5)
24+
sender_chat_id = self.receiver.public_key
25+
26+
# Page 1
27+
chat_messages_res1 = self.sender.wakuext_service.chat_messages(sender_chat_id, cursor="", limit=3)
28+
29+
cursor1 = chat_messages_res1.get("result", {}).get("cursor", "")
30+
messages_page1 = chat_messages_res1.get("result", {}).get("messages", [])
31+
assert len(messages_page1) == 3
32+
assert messages_page1[0].get("text", "") == sent_texts[4]
33+
assert messages_page1[1].get("text", "") == sent_texts[3]
34+
assert messages_page1[2].get("text", "") == sent_texts[2]
35+
assert cursor1 != ""
36+
37+
# Page 2
38+
chat_messages_res2 = self.sender.wakuext_service.chat_messages(sender_chat_id, cursor=cursor1, limit=3)
39+
40+
cursor2 = chat_messages_res2.get("result", {}).get("cursor", "")
41+
messages_page2 = chat_messages_res2.get("result", {}).get("messages", [])
42+
assert len(messages_page2) == 2
43+
assert messages_page2[0].get("text", "") == sent_texts[1]
44+
assert messages_page2[1].get("text", "") == sent_texts[0]
45+
assert cursor2 == ""
46+
47+
def test_message_by_message_id(self):
48+
sent_texts, responses = self.send_multiple_one_to_one_messages(1)
49+
50+
message_id = responses[0].get("result", {}).get("messages", [])[0].get("id", "")
51+
response = self.sender.wakuext_service.message_by_message_id(message_id)
52+
53+
self.sender.verify_json_schema(response, method="wakuext_messageByMessageID")
54+
55+
actual_text = response.get("result", {}).get("text", "")
56+
assert actual_text == sent_texts[0]
57+
58+
@pytest.mark.parametrize(
59+
"searchTerm,caseSensitive,expectedCount",
60+
[
61+
("test_message_1", False, 1),
62+
("TEST_MESSAGE_", False, 3),
63+
# ("TEST_MESSAGE_", True, 0), # Skipped due to https://github.com/status-im/status-go/issues/6359
64+
],
65+
)
66+
def test_all_messages_from_chat_which_match_term(self, searchTerm, caseSensitive, expectedCount):
67+
self.send_multiple_one_to_one_messages(3)
68+
sender_chat_id = self.receiver.public_key
69+
70+
response = self.sender.wakuext_service.all_messages_from_chat_which_match_term(sender_chat_id, searchTerm, caseSensitive)
71+
72+
self.sender.verify_json_schema(response, method="wakuext_allMessagesFromChatWhichMatchTerm")
73+
74+
messages = response.get("result", {}).get("messages", [])
75+
assert len(messages) == expectedCount
76+
77+
def test_first_unseen_message(self):
78+
_, responses = self.send_multiple_one_to_one_messages(1)
79+
sender_chat_id = self.receiver.public_key
80+
message_id = responses[0].get("result", {}).get("messages", [])[0].get("id", "")
81+
82+
response = self.sender.wakuext_service.mark_message_as_unread(sender_chat_id, message_id)
83+
self.sender.verify_json_schema(response, method="wakuext_markMessageAsUnread")
84+
85+
response = self.sender.wakuext_service.first_unseen_message_id(sender_chat_id)
86+
self.sender.verify_json_schema(response, method="wakuext_firstUnseenMessageID")
87+
88+
result = response.get("result", "")
89+
assert result == message_id

Diff for: tests-functional/tests/test_wakuext_messages.py renamed to tests-functional/tests/test_wakuext_messages_interacting.py

+9-107
Original file line numberDiff line numberDiff line change
@@ -3,80 +3,11 @@
33
from steps.messenger import MessengerSteps
44

55
from clients.services.wakuext import SendPinMessagePayload
6-
from clients.signals import SignalType
76

87

98
@pytest.mark.usefixtures("setup_two_unprivileged_nodes")
109
@pytest.mark.rpc
11-
class TestChatMessages(MessengerSteps):
12-
13-
def test_chat_messages(self):
14-
sent_texts, _ = self.send_multiple_one_to_one_messages(1)
15-
16-
sender_chat_id = self.receiver.public_key
17-
response = self.sender.wakuext_service.chat_messages(sender_chat_id)
18-
19-
self.sender.verify_json_schema(response, method="wakuext_chatMessages")
20-
21-
messages = response.get("result", {}).get("messages", [])
22-
assert len(messages) == 1
23-
actual_text = messages[0].get("text", "")
24-
assert actual_text == sent_texts[0]
25-
26-
def test_chat_messages_with_pagination(self):
27-
sent_texts, _ = self.send_multiple_one_to_one_messages(5)
28-
sender_chat_id = self.receiver.public_key
29-
30-
# Page 1
31-
chat_messages_res1 = self.sender.wakuext_service.chat_messages(sender_chat_id, cursor="", limit=3)
32-
33-
cursor1 = chat_messages_res1.get("result", {}).get("cursor", "")
34-
messages_page1 = chat_messages_res1.get("result", {}).get("messages", [])
35-
assert len(messages_page1) == 3
36-
assert messages_page1[0].get("text", "") == sent_texts[4]
37-
assert messages_page1[1].get("text", "") == sent_texts[3]
38-
assert messages_page1[2].get("text", "") == sent_texts[2]
39-
assert cursor1 != ""
40-
41-
# Page 2
42-
chat_messages_res2 = self.sender.wakuext_service.chat_messages(sender_chat_id, cursor=cursor1, limit=3)
43-
44-
cursor2 = chat_messages_res2.get("result", {}).get("cursor", "")
45-
messages_page2 = chat_messages_res2.get("result", {}).get("messages", [])
46-
assert len(messages_page2) == 2
47-
assert messages_page2[0].get("text", "") == sent_texts[1]
48-
assert messages_page2[1].get("text", "") == sent_texts[0]
49-
assert cursor2 == ""
50-
51-
def test_message_by_message_id(self):
52-
sent_texts, responses = self.send_multiple_one_to_one_messages(1)
53-
54-
message_id = responses[0].get("result", {}).get("messages", [])[0].get("id", "")
55-
response = self.sender.wakuext_service.message_by_message_id(message_id)
56-
57-
self.sender.verify_json_schema(response, method="wakuext_messageByMessageID")
58-
59-
actual_text = response.get("result", {}).get("text", "")
60-
assert actual_text == sent_texts[0]
61-
62-
@pytest.mark.parametrize(
63-
"searchTerm,caseSensitive,expectedCount",
64-
[
65-
("test_message_1", False, 1),
66-
("TEST_MESSAGE_", False, 3),
67-
# ("TEST_MESSAGE_", True, 0), # Skipped due to https://github.com/status-im/status-go/issues/6359
68-
],
69-
)
70-
def test_all_messages_from_chat_which_match_term(self, searchTerm, caseSensitive, expectedCount):
71-
self.send_multiple_one_to_one_messages(3)
72-
sender_chat_id = self.receiver.public_key
73-
74-
response = self.sender.wakuext_service.all_messages_from_chat_which_match_term(sender_chat_id, searchTerm, caseSensitive)
75-
76-
self.sender.verify_json_schema(response, method="wakuext_allMessagesFromChatWhichMatchTerm")
77-
78-
messages = response.get("result", {}).get("messages", [])
79-
assert len(messages) == expectedCount
10+
class TestInteractingWithChatMessages(MessengerSteps):
8011

8112
def test_pinned_messages(self):
8213
sent_texts, responses = self.send_multiple_one_to_one_messages(1)
@@ -94,7 +25,7 @@ def test_pinned_messages(self):
9425

9526
sender_chat_id = self.receiver.public_key
9627
response = self.sender.wakuext_service.chat_pinned_messages(sender_chat_id)
97-
self.sender.verify_json_schema(response, method="wakuext_schatPinnedMessages")
28+
self.sender.verify_json_schema(response, method="wakuext_chatPinnedMessages")
9829

9930
pinned_messages = response.get("result", {}).get("pinnedMessages", [])
10031
assert len(pinned_messages) == 1
@@ -226,43 +157,14 @@ def test_delete_message_for_me_and_sync(self):
226157

227158
# TODO: assert sync action
228159

229-
def test_first_unseen_message(self):
160+
def test_update_message_outgoing_status(self):
230161
_, responses = self.send_multiple_one_to_one_messages(1)
231-
sender_chat_id = self.receiver.public_key
232162
message_id = responses[0].get("result", {}).get("messages", [])[0].get("id", "")
163+
new_status = "delivered"
233164

234-
response = self.sender.wakuext_service.mark_message_as_unread(sender_chat_id, message_id)
235-
self.sender.verify_json_schema(response, method="wakuext_markMessageAsUnread")
236-
237-
response = self.sender.wakuext_service.first_unseen_message_id(sender_chat_id)
238-
self.sender.verify_json_schema(response, method="wakuext_firstUnseenMessageID")
165+
response = self.sender.wakuext_service.update_message_outgoing_status(message_id, new_status)
166+
self.sender.verify_json_schema(response, method="wakuext_updateMessageOutgoingStatus")
239167

240-
result = response.get("result", "")
241-
assert result == message_id
242-
243-
244-
@pytest.mark.usefixtures("setup_two_unprivileged_nodes")
245-
@pytest.mark.rpc
246-
class TestUserStatus(MessengerSteps):
247-
248-
def test_status_updates(self):
249-
self.make_contacts()
250-
251-
statuses = [[1, "text_1"], [2, "text_2"], [3, "text_3"], [4, "text_4"]]
252-
253-
for new_status, custom_text in statuses:
254-
response = self.sender.wakuext_service.set_user_status(new_status, custom_text)
255-
self.sender.verify_json_schema(response, method="wakuext_setUserStatus")
256-
257-
self.receiver.find_signal_containing_pattern(
258-
SignalType.MESSAGES_NEW.value,
259-
event_pattern=custom_text,
260-
timeout=10,
261-
)
262-
263-
response = self.receiver.wakuext_service.status_updates()
264-
self.sender.verify_json_schema(response, method="wakuext_statusUpdates")
265-
266-
statusUpdate = response.get("result", {}).get("statusUpdates", [])[0]
267-
assert statusUpdate.get("statusType", -1) == new_status
268-
assert statusUpdate.get("text", "") == custom_text
168+
response = self.sender.wakuext_service.message_by_message_id(message_id)
169+
outgoing_status = response.get("result", {}).get("outgoingStatus", "")
170+
assert outgoing_status == new_status
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import pytest
2+
3+
from steps.messenger import MessengerSteps
4+
5+
6+
@pytest.mark.usefixtures("setup_two_unprivileged_nodes")
7+
@pytest.mark.rpc
8+
class TestSendingChatMessages(MessengerSteps):
9+
def test_one_to_one_messages(self):
10+
responses = self.one_to_one_message(1)
11+
self.receiver.verify_json_schema(responses[0], method="wakuext_sendOneToOneMessage")
12+
13+
chat = responses[0]["result"]["chats"][0]
14+
assert chat["id"] == self.receiver.public_key
15+
assert chat["lastMessage"]["displayName"] == self.sender.display_name
16+
17+
def test_send_community_message(self):
18+
self.create_community(self.sender)
19+
community_chat_id = self.join_community(self.receiver)
20+
21+
text = "test_message"
22+
response = self.sender.wakuext_service.send_community_chat_message(community_chat_id, text)
23+
self.sender.verify_json_schema(response, method="wakuext_sendChatMessage")
24+
25+
response = self.sender.wakuext_service.chat_messages(community_chat_id)
26+
messages = response.get("result", {}).get("messages", [])
27+
assert len(messages) == 1
28+
actual_text = messages[0].get("text", "")
29+
assert actual_text == text

0 commit comments

Comments
 (0)