Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions zulip/tests/test_message_endpoints.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
from unittest import TestCase
from unittest.mock import patch

from typing_extensions import override

import zulip


class TestMessageEndpoints(TestCase):
@override
def setUp(self) -> None:
with patch.object(
zulip.Client,
"get_server_settings",
return_value={"zulip_version": "8.0", "zulip_feature_level": 250},
):
self.client = zulip.Client(
email="test@example.com",
api_key="1234567890abcdef",
site="https://zulip.example.com",
)

def test_update_message_strips_message_id_from_request_payload(self) -> None:
payload = {
"message_id": 42,
"topic": "new topic",
"content": "updated content",
}
with patch.object(
self.client, "call_endpoint", return_value={"result": "success"}
) as mock_call:
res = self.client.update_message(payload)
self.assertEqual(res, {"result": "success"})

# URL path includes message_id, but request body excludes it
mock_call.assert_called_once_with(
url="messages/42",
method="PATCH",
request={"topic": "new topic", "content": "updated content"},
)

# Original dictionary should remain unmutated
self.assertIn("message_id", payload)
self.assertEqual(payload["message_id"], 42)

def test_add_reaction_strips_message_id_from_request_payload(self) -> None:
payload = {
"message_id": 100,
"emoji_name": "joy",
"emoji_code": "1f602",
"reaction_type": "unicode_emoji",
}
with patch.object(
self.client, "call_endpoint", return_value={"result": "success"}
) as mock_call:
res = self.client.add_reaction(payload)
self.assertEqual(res, {"result": "success"})

mock_call.assert_called_once_with(
url="messages/100/reactions",
method="POST",
request={
"emoji_name": "joy",
"emoji_code": "1f602",
"reaction_type": "unicode_emoji",
},
)
self.assertIn("message_id", payload)

def test_remove_reaction_strips_message_id_from_request_payload(self) -> None:
payload = {
"message_id": 100,
"emoji_name": "joy",
"emoji_code": "1f602",
"reaction_type": "unicode_emoji",
}
with patch.object(
self.client, "call_endpoint", return_value={"result": "success"}
) as mock_call:
res = self.client.remove_reaction(payload)
self.assertEqual(res, {"result": "success"})

mock_call.assert_called_once_with(
url="messages/100/reactions",
method="DELETE",
request={
"emoji_name": "joy",
"emoji_code": "1f602",
"reaction_type": "unicode_emoji",
},
)
self.assertIn("message_id", payload)
9 changes: 6 additions & 3 deletions zulip/zulip/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -889,10 +889,11 @@ def update_message(self, message_data: Dict[str, Any]) -> Dict[str, Any]:
"""
See examples/edit-message for example usage.
"""
request = {k: v for k, v in message_data.items() if k != "message_id"}
return self.call_endpoint(
url="messages/%d" % (message_data["message_id"],),
method="PATCH",
request=message_data,
request=request,
)

def delete_message(self, message_id: int) -> Dict[str, Any]:
Expand Down Expand Up @@ -966,10 +967,11 @@ def add_reaction(self, reaction_data: Dict[str, Any]) -> Dict[str, Any]:
})
{'result': 'success', 'msg': ''}
"""
request = {k: v for k, v in reaction_data.items() if k != "message_id"}
return self.call_endpoint(
url="messages/{}/reactions".format(reaction_data["message_id"]),
method="POST",
request=reaction_data,
request=request,
)

def remove_reaction(self, reaction_data: Dict[str, Any]) -> Dict[str, Any]:
Expand All @@ -984,10 +986,11 @@ def remove_reaction(self, reaction_data: Dict[str, Any]) -> Dict[str, Any]:
})
{'msg': '', 'result': 'success'}
"""
request = {k: v for k, v in reaction_data.items() if k != "message_id"}
return self.call_endpoint(
url="messages/{}/reactions".format(reaction_data["message_id"]),
method="DELETE",
request=reaction_data,
request=request,
)

def get_realm_emoji(self) -> Dict[str, Any]:
Expand Down
Loading