api: Guess emoji_type when adding a reaction.

This changes add_reaction in zerver.views.reactions to allow
calling POST ../messages/{message_id}/reactions api endpoint with
emoji_name only, even in the case of a custom emoji.
This commit is contained in:
akashaviator
2020-03-22 22:14:27 +05:30
committed by Tim Abbott
parent cf78cb0d6e
commit 28d58c848d
2 changed files with 26 additions and 1 deletions

View File

@@ -62,10 +62,21 @@ class ReactionEmojiTest(ZulipTestCase):
'emoji_name': 'smile' 'emoji_name': 'smile'
} }
base_query = Reaction.objects.filter(user_profile=sender,
message=Message.objects.get(id=1),
)
result = self.api_post(sender, '/api/v1/messages/1/reactions', result = self.api_post(sender, '/api/v1/messages/1/reactions',
reaction_info) reaction_info)
self.assert_json_success(result) self.assert_json_success(result)
self.assertEqual(200, result.status_code) self.assertEqual(200, result.status_code)
self.assertTrue(base_query.filter(emoji_name=reaction_info['emoji_name']).exists())
reaction_info['emoji_name'] = 'green_tick'
result = self.api_post(sender, '/api/v1/messages/1/reactions',
reaction_info)
self.assert_json_success(result)
self.assertEqual(200, result.status_code)
self.assertTrue(base_query.filter(emoji_name=reaction_info['emoji_name']).exists())
def test_zulip_emoji(self) -> None: def test_zulip_emoji(self) -> None:
""" """
@@ -76,11 +87,21 @@ class ReactionEmojiTest(ZulipTestCase):
'emoji_name': 'zulip', 'emoji_name': 'zulip',
'reaction_type': 'zulip_extra_emoji' 'reaction_type': 'zulip_extra_emoji'
} }
base_query = Reaction.objects.filter(user_profile=sender,
emoji_name=reaction_info['emoji_name'])
result = self.api_post(sender, '/api/v1/messages/1/reactions', result = self.api_post(sender, '/api/v1/messages/1/reactions',
reaction_info) reaction_info)
self.assert_json_success(result) self.assert_json_success(result)
self.assertEqual(200, result.status_code) self.assertEqual(200, result.status_code)
self.assertTrue(base_query.filter(message=Message.objects.get(id=1)).exists())
reaction_info.pop('reaction_type')
result = self.api_post(sender, '/api/v1/messages/2/reactions',
reaction_info)
self.assert_json_success(result)
self.assertEqual(200, result.status_code)
self.assertTrue(base_query.filter(message=Message.objects.get(id=2)).exists())
def test_valid_emoji_react_historical(self) -> None: def test_valid_emoji_react_historical(self) -> None:
""" """

View File

@@ -26,7 +26,7 @@ def create_historical_message(user_profile: UserProfile, message: Message) -> No
def add_reaction(request: HttpRequest, user_profile: UserProfile, message_id: int, def add_reaction(request: HttpRequest, user_profile: UserProfile, message_id: int,
emoji_name: str=REQ(), emoji_name: str=REQ(),
emoji_code: Optional[str]=REQ(default=None), emoji_code: Optional[str]=REQ(default=None),
reaction_type: str=REQ(default="unicode_emoji")) -> HttpResponse: reaction_type: Optional[str]=REQ(default=None)) -> HttpResponse:
message, user_message = access_message(user_profile, message_id) message, user_message = access_message(user_profile, message_id)
if emoji_code is None: if emoji_code is None:
@@ -37,6 +37,10 @@ def add_reaction(request: HttpRequest, user_profile: UserProfile, message_id: in
emoji_code = emoji_name_to_emoji_code(message.sender.realm, emoji_code = emoji_name_to_emoji_code(message.sender.realm,
emoji_name)[0] emoji_name)[0]
if reaction_type is None:
reaction_type = emoji_name_to_emoji_code(message.sender.realm,
emoji_name)[1]
if Reaction.objects.filter(user_profile=user_profile, if Reaction.objects.filter(user_profile=user_profile,
message=message, message=message,
emoji_code=emoji_code, emoji_code=emoji_code,