@@ -1145,7 +1145,7 @@ def test_update_reaction_remove_reaction(self, mocker, model, response,
11451145
11461146 def test_update_star_status_no_index (self , mocker , model ):
11471147 model .index = dict (messages = {}) # Not indexed
1148- event = dict (messages = [1 ], flag = 'starred' , all = False )
1148+ event = dict (messages = [1 ], flag = 'starred' , all = False , operation = 'add' )
11491149 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
11501150
11511151 model .update_message_flag_status (event )
@@ -1199,6 +1199,7 @@ def test_update_star_status(self, mocker, model, event_op,
11991199 'all' : False ,
12001200 }
12011201 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1202+ set_count = mocker .patch ('zulipterminal.model.set_count' )
12021203
12031204 model .update_message_flag_status (event )
12041205
@@ -1212,6 +1213,65 @@ def test_update_star_status(self, mocker, model, event_op,
12121213 assert (model .index ['messages' ][unchanged_id ]['flags' ] ==
12131214 flags_before )
12141215
1216+ set_count .assert_not_called ()
1217+
1218+ @pytest .mark .parametrize ('event_message_ids, indexed_ids' , [
1219+ ([1 ], [1 ]),
1220+ ([1 , 2 ], [1 ]),
1221+ ([1 , 2 ], [1 , 2 ]),
1222+ ([1 ], [1 , 2 ]),
1223+ ([], [1 , 2 ]),
1224+ ([1 , 2 ], []),
1225+ ])
1226+ @pytest .mark .parametrize ('event_op, flags_before, flags_after' , [
1227+ ('add' , [], ['read' ]),
1228+ ('add' , ['read' ], ['read' ]),
1229+ ('add' , ['starred' ], ['starred' , 'read' ]),
1230+ ('add' , ['read' , 'starred' ], ['read' , 'starred' ]),
1231+ ('remove' , [], []),
1232+ ('remove' , ['read' ], ['read' ]), # msg cannot be marked 'unread'
1233+ ('remove' , ['starred' ], ['starred' ]),
1234+ ('remove' , ['starred' , 'read' ], ['starred' , 'read' ]),
1235+ ('remove' , ['read' , 'starred' ], ['read' , 'starred' ]),
1236+ ])
1237+ def test_update_read_status (self , mocker , model , event_op ,
1238+ event_message_ids , indexed_ids ,
1239+ flags_before , flags_after ):
1240+ model .index = dict (messages = {msg_id : {'flags' : flags_before }
1241+ for msg_id in indexed_ids })
1242+ event = {
1243+ 'messages' : event_message_ids ,
1244+ 'type' : 'update_message_flags' ,
1245+ 'flag' : 'read' ,
1246+ 'operation' : event_op ,
1247+ 'all' : False ,
1248+ }
1249+
1250+ mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1251+ set_count = mocker .patch ('zulipterminal.model.set_count' )
1252+
1253+ model .update_message_flag_status (event )
1254+
1255+ changed_ids = set (indexed_ids ) & set (event_message_ids )
1256+ for changed_id in changed_ids :
1257+ assert model .index ['messages' ][changed_id ]['flags' ] == flags_after
1258+
1259+ if event_op == 'add' :
1260+ model .update_rendered_view .assert_has_calls (
1261+ [mocker .call (changed_id )])
1262+ elif event_op == 'remove' :
1263+ model .update_rendered_view .assert_not_called ()
1264+
1265+ for unchanged_id in (set (indexed_ids ) - set (event_message_ids )):
1266+ assert (model .index ['messages' ][unchanged_id ]['flags' ] ==
1267+ flags_before )
1268+
1269+ if event_op == 'add' :
1270+ set_count .assert_called_once_with (list (changed_ids ),
1271+ self .controller , - 1 )
1272+ elif event_op == 'remove' :
1273+ set_count .assert_not_called ()
1274+
12151275 @pytest .mark .parametrize ('narrow, event, called' , [
12161276 # Not in PM Narrow
12171277 ([], {}, False ),
0 commit comments