Skip to content

Commit 20870b5

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 f96e7c0 commit 20870b5

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

tests/model/test_model.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ def test_register_initial_desired_events(self, mocker, initial_data):
177177
'subscription',
178178
'typing',
179179
'update_message_flags',
180+
'realm_emoji',
180181
]
181182
fetch_event_types = [
182183
'realm',
@@ -2033,6 +2034,45 @@ def test_process_realm_emoji_data(self, mocker, model,
20332034

20342035
assert fetched_custom_emojis == custom_emojis
20352036

2037+
@pytest.mark.parametrize('response', [
2038+
({
2039+
"last_event_id": -1,
2040+
"msg": "",
2041+
"queue_id": "1517975029:0",
2042+
"realm_emoji": {
2043+
"100": {
2044+
"id": "100",
2045+
"name": "urwid",
2046+
"deactivated": True
2047+
},
2048+
"1": {
2049+
"id": "1",
2050+
"name": "green_tick",
2051+
"deactivated": False
2052+
},
2053+
"202020": {
2054+
"id": "202020",
2055+
"name": "joker",
2056+
"deactivated": True
2057+
},
2058+
},
2059+
"result": "success",
2060+
"zulip_feature_level": 2,
2061+
"zulip_version": "2.1.0"
2062+
})
2063+
])
2064+
def test__handle_update_emoji_event(self, mocker, model,
2065+
response):
2066+
model._handle_update_emoji_event(response)
2067+
# For an already active emoji which has been deactivated
2068+
with pytest.raises(KeyError):
2069+
model.active_emoji_data['urwid']
2070+
# For a newly created custom emoji.
2071+
new_added_emoji = model.active_emoji_data['green_tick']['code']
2072+
assert new_added_emoji == response['realm_emoji']['1']['id']
2073+
# For deactivated custom emoji with same name as unicode emoji
2074+
assert model.active_emoji_data['joker']['type'] == 'unicode_emoji'
2075+
20362076
# Use LoopEnder with raising_event to cause the event loop to end without
20372077
# processing the event
20382078
class LoopEnder(Exception):

zulipterminal/model.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ def __init__(self, controller: Any) -> None:
105105
('subscription', self._handle_subscription_event),
106106
('typing', self._handle_typing_event),
107107
('update_message_flags', self._handle_update_message_flags_event),
108+
('realm_emoji', self._handle_update_emoji_event),
108109
]) # type: OrderedDict[str, Callable[[Event], None]]
109110

110111
self.initial_data = {} # type: Dict[str, Any]
@@ -1135,6 +1136,15 @@ def _handle_update_message_flags_event(self, event: Event) -> None:
11351136
set_count(list(message_ids_to_mark & indexed_message_ids),
11361137
self.controller, -1)
11371138

1139+
def _handle_update_emoji_event(self, event: Event) -> None:
1140+
"""
1141+
Handle update of emoji
1142+
"""
1143+
realm_emoji_update = event['realm_emoji']
1144+
all_emoji_data = self.generate_all_emoji_data(realm_emoji_update)
1145+
self.active_emoji_data = OrderedDict(sorted(all_emoji_data.items(),
1146+
key=lambda e: e[0]))
1147+
11381148
def _update_rendered_view(self, msg_id: int) -> None:
11391149
"""
11401150
Helper method called by various _handle_* methods

0 commit comments

Comments
 (0)