Skip to content

Commit a216569

Browse files
committed
model: Add event handling for realm emoji.
This commit adds event handler for update of realm emoji within a ZT session. The generate_all_emoji_data() function unpacks the three emoji dictionaries in the priority order given by zulip extra emoji>realm emoji>unicode emoji Tests added. Fixes #809
1 parent c8c556c commit a216569

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

tests/model/test_model.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ def test_register_initial_desired_events(self, mocker, initial_data):
183183
'subscription',
184184
'typing',
185185
'update_message_flags',
186+
'realm_emoji',
186187
]
187188
fetch_event_types = [
188189
'realm',
@@ -2015,6 +2016,46 @@ def test_user_name_from_id_invalid(self, model, user_id):
20152016
with pytest.raises(RuntimeError, match='Invalid user ID.'):
20162017
model.user_name_from_id(user_id)
20172018

2019+
@pytest.mark.parametrize('response', [
2020+
({
2021+
"last_event_id": -1,
2022+
"type": "realm_emoji",
2023+
"msg": "",
2024+
"queue_id": "1517975029:0",
2025+
"realm_emoji": {
2026+
"100": {
2027+
"id": "100",
2028+
"name": "urwid",
2029+
"deactivated": True
2030+
},
2031+
"1": {
2032+
"id": "1",
2033+
"name": "green_tick",
2034+
"deactivated": False
2035+
},
2036+
"202020": {
2037+
"id": "202020",
2038+
"name": "joker",
2039+
"deactivated": True
2040+
},
2041+
},
2042+
"result": "success",
2043+
"zulip_feature_level": 2,
2044+
"zulip_version": "2.1.0"
2045+
})
2046+
])
2047+
def test__handle_update_emoji_event(self, mocker, model,
2048+
response):
2049+
model._handle_update_emoji_event(response)
2050+
# For an already active emoji which has been deactivated
2051+
with pytest.raises(KeyError):
2052+
model.active_emoji_data['urwid']
2053+
# For a newly created custom emoji.
2054+
new_added_emoji = model.active_emoji_data['green_tick']['code']
2055+
assert new_added_emoji == response['realm_emoji']['1']['id']
2056+
# For deactivated custom emoji with same name as unicode emoji
2057+
assert model.active_emoji_data['joker']['type'] == 'unicode_emoji'
2058+
20182059
# Use LoopEnder with raising_event to cause the event loop to end without
20192060
# processing the event
20202061
class LoopEnder(Exception):

zulipterminal/api_types.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,17 @@ class UpdateMessageFlagsEvent(TypedDict):
107107
all: bool
108108

109109

110+
class UpdateRealmEmojiEvent(TypedDict):
111+
type: Literal['realm_emoji']
112+
realm_emoji: Dict[str, Any]
113+
114+
110115
Event = Union[
111116
MessageEvent,
112117
UpdateMessageEvent,
113118
ReactionEvent,
114119
SubscriptionEvent,
115120
TypingEvent,
116121
UpdateMessageFlagsEvent,
122+
UpdateRealmEmojiEvent,
117123
]

zulipterminal/model.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def __init__(self, controller: Any) -> None:
8989
('typing', self._handle_typing_event),
9090
('update_message_flags',
9191
self._handle_update_message_flags_event),
92+
('realm_emoji', self._handle_update_emoji_event),
9293
])
9394
)
9495

@@ -1149,6 +1150,14 @@ def formatted_local_time(self, timestamp: int,
11491150
else:
11501151
return local_time.strftime('%a %b %d %H:%M')
11511152

1153+
def _handle_update_emoji_event(self, event: Event) -> None:
1154+
"""
1155+
Handle update of emoji
1156+
"""
1157+
assert event['type'] == "realm_emoji"
1158+
self.active_emoji_data = self.generate_all_emoji_data(
1159+
event['realm_emoji'])
1160+
11521161
def _update_rendered_view(self, msg_id: int) -> None:
11531162
"""
11541163
Helper method called by various _handle_* methods

0 commit comments

Comments
 (0)