Skip to content

Commit d88adae

Browse files
rsashankneiljp
authored andcommittedNov 4, 2024·
model: Add handling for Submessage events.
Added _handle_submessage_event method to Model to handle new changes to widgets (polls, todo etc.). Tests added.
1 parent 4e71ea5 commit d88adae

File tree

2 files changed

+252
-0
lines changed

2 files changed

+252
-0
lines changed
 

‎tests/model/test_model.py

+230
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ def test_register_initial_desired_events(self, mocker, initial_data):
237237
"message",
238238
"update_message",
239239
"reaction",
240+
"submessage",
240241
"subscription",
241242
"typing",
242243
"update_message_flags",
@@ -2913,6 +2914,235 @@ def test__handle_reaction_event_for_msg_in_index(
29132914

29142915
model._update_rendered_view.assert_called_once_with(event_message_id)
29152916

2917+
@pytest.mark.parametrize(
2918+
"submessages, event, expected_updated_submessage",
2919+
[
2920+
case(
2921+
[
2922+
{
2923+
"id": 1,
2924+
"message_id": 1958326,
2925+
"sender_id": 27294,
2926+
"msg_type": "widget",
2927+
"content": (
2928+
'{"widget_type": "todo", "extra_data": '
2929+
'{"task_list_title": "Today\'s Work", "tasks": [{"task"'
2930+
': "Handle submessages events on ZT", "desc": ""}, {"task":'
2931+
' "Play ping pong", "desc": ""}]}}'
2932+
),
2933+
}
2934+
],
2935+
{
2936+
"type": "submessage",
2937+
"msg_type": "widget",
2938+
"message_id": 1958326,
2939+
"submessage_id": 1,
2940+
"sender_id": 27294,
2941+
"content": '{"type":"strike","key":"0,canned"}',
2942+
"id": 1,
2943+
},
2944+
[
2945+
{
2946+
"id": 1,
2947+
"message_id": 1958326,
2948+
"sender_id": 27294,
2949+
"msg_type": "widget",
2950+
"content": (
2951+
'{"widget_type": "todo", "extra_data": '
2952+
'{"task_list_title": "Today\'s Work", "tasks": '
2953+
'[{"task": "Handle submessages events on ZT", "desc": ""}, '
2954+
'{"task": "Play ping pong", "desc": ""}]}}'
2955+
),
2956+
},
2957+
{
2958+
"type": "submessage",
2959+
"msg_type": "widget",
2960+
"message_id": 1958326,
2961+
"submessage_id": 1,
2962+
"sender_id": 27294,
2963+
"content": '{"type":"strike","key":"0,canned"}',
2964+
},
2965+
],
2966+
id="submessage_strike_event_todo_widget",
2967+
),
2968+
case(
2969+
[
2970+
{
2971+
"id": 1,
2972+
"message_id": 1958326,
2973+
"sender_id": 27294,
2974+
"msg_type": "widget",
2975+
"content": (
2976+
'{"widget_type": "todo", "extra_data": '
2977+
'{"task_list_title": "Today\'s Work", "tasks": [{"task": '
2978+
'"Handle submessages events on ZT", "desc": ""}, {"task": '
2979+
'"Play ping pong", "desc": ""}]}}'
2980+
),
2981+
},
2982+
{
2983+
"id": 12154,
2984+
"message_id": 1958326,
2985+
"sender_id": 27294,
2986+
"msg_type": "widget",
2987+
"content": '{"type":"strike","key":"0,canned"}',
2988+
},
2989+
],
2990+
{
2991+
"type": "submessage",
2992+
"msg_type": "widget",
2993+
"message_id": 1958326,
2994+
"submessage_id": 12185,
2995+
"sender_id": 27294,
2996+
"content": (
2997+
'{"type":"new_task","key":2,"task":"Make a coffee",'
2998+
'"desc":"","completed":false}'
2999+
),
3000+
"id": 0,
3001+
},
3002+
[
3003+
{
3004+
"id": 1,
3005+
"message_id": 1958326,
3006+
"sender_id": 27294,
3007+
"msg_type": "widget",
3008+
"content": (
3009+
'{"widget_type": "todo", "extra_data": '
3010+
'{"task_list_title": "Today\'s Work", "tasks": [{"task": '
3011+
'"Handle submessages events on ZT", "desc": ""}, {"task": '
3012+
'"Play ping pong", "desc": ""}]}}'
3013+
),
3014+
},
3015+
{
3016+
"id": 12154,
3017+
"message_id": 1958326,
3018+
"sender_id": 27294,
3019+
"msg_type": "widget",
3020+
"content": '{"type":"strike","key":"0,canned"}',
3021+
},
3022+
{
3023+
"type": "submessage",
3024+
"msg_type": "widget",
3025+
"message_id": 1958326,
3026+
"submessage_id": 12185,
3027+
"sender_id": 27294,
3028+
"content": (
3029+
'{"type":"new_task","key":2,"task":"Make a coffee",'
3030+
'"desc":"","completed":false}'
3031+
),
3032+
},
3033+
],
3034+
id="submessage_new_task_event_todo_widget",
3035+
),
3036+
case(
3037+
[
3038+
{
3039+
"id": 12153,
3040+
"message_id": 1958326,
3041+
"sender_id": 27294,
3042+
"msg_type": "widget",
3043+
"content": (
3044+
'{"widget_type": "todo", "extra_data": '
3045+
'{"task_list_title": "Today\'s Work", "tasks": [{"task": '
3046+
'"Handle submessages events on ZT", "desc": ""}, {"task": '
3047+
'"Play ping pong", "desc": ""}]}}'
3048+
),
3049+
},
3050+
{
3051+
"id": 12154,
3052+
"message_id": 1958326,
3053+
"sender_id": 27294,
3054+
"msg_type": "widget",
3055+
"content": '{"type":"strike","key":"0,canned"}',
3056+
},
3057+
{
3058+
"type": "submessage",
3059+
"msg_type": "widget",
3060+
"message_id": 1958326,
3061+
"submessage_id": 12185,
3062+
"sender_id": 27294,
3063+
"content": (
3064+
'{"type":"new_task","key":2,"task":"Make a coffee"'
3065+
',"desc":"","completed":false}'
3066+
),
3067+
"id": 0,
3068+
},
3069+
],
3070+
{
3071+
"type": "submessage",
3072+
"msg_type": "widget",
3073+
"message_id": 1958326,
3074+
"submessage_id": 12186,
3075+
"sender_id": 27294,
3076+
"content": (
3077+
'{"type":"new_task_list_title","title":"Today\'s Work '
3078+
'[Updated]"}'
3079+
),
3080+
"id": 11,
3081+
},
3082+
[
3083+
{
3084+
"id": 12153,
3085+
"message_id": 1958326,
3086+
"sender_id": 27294,
3087+
"msg_type": "widget",
3088+
"content": (
3089+
'{"widget_type": "todo", "extra_data": '
3090+
'{"task_list_title": "Today\'s Work", "tasks": [{"task": '
3091+
'"Handle submessages events on ZT", "desc": ""}, {"task": '
3092+
'"Play ping pong", "desc": ""}]}}'
3093+
),
3094+
},
3095+
{
3096+
"id": 12154,
3097+
"message_id": 1958326,
3098+
"sender_id": 27294,
3099+
"msg_type": "widget",
3100+
"content": '{"type":"strike","key":"0,canned"}',
3101+
},
3102+
{
3103+
"type": "submessage",
3104+
"msg_type": "widget",
3105+
"message_id": 1958326,
3106+
"submessage_id": 12185,
3107+
"sender_id": 27294,
3108+
"content": (
3109+
'{"type":"new_task","key":2,"task":"Make a coffee"'
3110+
',"desc":"","completed":false}'
3111+
),
3112+
"id": 0,
3113+
},
3114+
{
3115+
"type": "submessage",
3116+
"msg_type": "widget",
3117+
"message_id": 1958326,
3118+
"submessage_id": 12186,
3119+
"sender_id": 27294,
3120+
"content": (
3121+
'{"type":"new_task_list_title",'
3122+
'"title":"Today\'s Work [Updated]"}'
3123+
),
3124+
},
3125+
],
3126+
id="submessage_new_task_list_title_event_todo_widget",
3127+
),
3128+
],
3129+
)
3130+
def test__handle_submessage_event(
3131+
self,
3132+
mocker,
3133+
model,
3134+
submessages,
3135+
event,
3136+
expected_updated_submessage,
3137+
id=1958326,
3138+
):
3139+
model.index["messages"][id]["submessages"] = submessages
3140+
model._update_rendered_view = mocker.Mock()
3141+
3142+
model._handle_submessage_event(event)
3143+
3144+
assert model.index["messages"][id]["submessages"] == expected_updated_submessage
3145+
29163146
@pytest.fixture(
29173147
params=[
29183148
("op", 32), # At server feature level 32, event uses standard field

‎zulipterminal/model.py

+22
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ def __init__(self, controller: Any) -> None:
152152
"message": self._handle_message_event,
153153
"update_message": self._handle_update_message_event,
154154
"reaction": self._handle_reaction_event,
155+
"submessage": self._handle_submessage_event,
155156
"subscription": self._handle_subscription_event,
156157
"typing": self._handle_typing_event,
157158
"update_message_flags": self._handle_update_message_flags_event,
@@ -1860,6 +1861,27 @@ def _handle_reaction_event(self, event: Event) -> None:
18601861
self.index["messages"][message_id] = message
18611862
self._update_rendered_view(message_id)
18621863

1864+
def _handle_submessage_event(self, event: Event) -> None:
1865+
"""
1866+
Handle change to submessages on a message (todo, poll etc.)
1867+
"""
1868+
assert event["type"] == "submessage"
1869+
message_id = event["message_id"]
1870+
if message_id in self.index["messages"]:
1871+
message = self.index["messages"][message_id]
1872+
message["submessages"].append(
1873+
{
1874+
"type": event["type"],
1875+
"msg_type": event["msg_type"],
1876+
"message_id": event["message_id"],
1877+
"submessage_id": event["submessage_id"],
1878+
"sender_id": event["sender_id"],
1879+
"content": event["content"],
1880+
}
1881+
)
1882+
self.index["messages"][message_id] = message
1883+
self._update_rendered_view(message_id)
1884+
18631885
def _handle_update_message_flags_event(self, event: Event) -> None:
18641886
"""
18651887
Handle change to message flags (eg. starred, read)

0 commit comments

Comments
 (0)
Please sign in to comment.