@@ -1150,13 +1150,15 @@ def test_update_reaction_remove_reaction(self, mocker, model, response,
11501150
11511151 def test_update_star_status_no_index (self , mocker , model ):
11521152 model .index = dict (messages = {}) # Not indexed
1153- event = dict (messages = [1 ], flag = 'starred' , all = False )
1153+ event = dict (messages = [1 ], flag = 'starred' , all = False , operation = 'add' )
11541154 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1155+ set_count = mocker .patch ('zulipterminal.model.set_count' )
11551156
11561157 model .update_message_flag_status (event )
11571158
11581159 assert model .index == dict (messages = {})
11591160 model .update_rendered_view .assert_not_called ()
1161+ set_count .assert_not_called ()
11601162
11611163 def test_update_star_status_invalid_operation (self , mocker , model ):
11621164 model .index = dict (messages = {1 : {'flags' : None }}) # Minimal
@@ -1168,9 +1170,11 @@ def test_update_star_status_invalid_operation(self, mocker, model):
11681170 'all' : False ,
11691171 }
11701172 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1173+ set_count = mocker .patch ('zulipterminal.model.set_count' )
11711174 with pytest .raises (RuntimeError ):
11721175 model .update_message_flag_status (event )
11731176 model .update_rendered_view .assert_not_called ()
1177+ set_count .assert_not_called ()
11741178
11751179 @pytest .mark .parametrize ('event_message_ids, indexed_ids' , [
11761180 ([1 ], [1 ]),
@@ -1204,19 +1208,80 @@ def test_update_star_status(self, mocker, model, event_op,
12041208 'all' : False ,
12051209 }
12061210 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1211+ set_count = mocker .patch ('zulipterminal.model.set_count' )
12071212
12081213 model .update_message_flag_status (event )
12091214
12101215 changed_ids = set (indexed_ids ) & set (event_message_ids )
12111216 for changed_id in changed_ids :
12121217 assert model .index ['messages' ][changed_id ]['flags' ] == flags_after
12131218 (model .update_rendered_view .
1214- has_calls ([mocker .call (changed_id ) for changed_id in changed_ids ]))
1219+ assert_has_calls ([mocker .call (changed_id )
1220+ for changed_id in changed_ids ]))
12151221
12161222 for unchanged_id in (set (indexed_ids ) - set (event_message_ids )):
12171223 assert (model .index ['messages' ][unchanged_id ]['flags' ] ==
12181224 flags_before )
12191225
1226+ set_count .assert_not_called ()
1227+
1228+ @pytest .mark .parametrize ('event_message_ids, indexed_ids' , [
1229+ ([1 ], [1 ]),
1230+ ([1 , 2 ], [1 ]),
1231+ ([1 , 2 ], [1 , 2 ]),
1232+ ([1 ], [1 , 2 ]),
1233+ ([], [1 , 2 ]),
1234+ ([1 , 2 ], []),
1235+ ])
1236+ @pytest .mark .parametrize ('event_op, flags_before, flags_after' , [
1237+ ('add' , [], ['read' ]),
1238+ ('add' , ['read' ], ['read' ]),
1239+ ('add' , ['starred' ], ['starred' , 'read' ]),
1240+ ('add' , ['read' , 'starred' ], ['read' , 'starred' ]),
1241+ ('remove' , [], []),
1242+ ('remove' , ['read' ], ['read' ]), # msg cannot be marked 'unread'
1243+ ('remove' , ['starred' ], ['starred' ]),
1244+ ('remove' , ['starred' , 'read' ], ['starred' , 'read' ]),
1245+ ('remove' , ['read' , 'starred' ], ['read' , 'starred' ]),
1246+ ])
1247+ def test_update_read_status (self , mocker , model , event_op ,
1248+ event_message_ids , indexed_ids ,
1249+ flags_before , flags_after ):
1250+ model .index = dict (messages = {msg_id : {'flags' : flags_before }
1251+ for msg_id in indexed_ids })
1252+ event = {
1253+ 'messages' : event_message_ids ,
1254+ 'type' : 'update_message_flags' ,
1255+ 'flag' : 'read' ,
1256+ 'operation' : event_op ,
1257+ 'all' : False ,
1258+ }
1259+
1260+ mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1261+ set_count = mocker .patch ('zulipterminal.model.set_count' )
1262+
1263+ model .update_message_flag_status (event )
1264+
1265+ changed_ids = set (indexed_ids ) & set (event_message_ids )
1266+ for changed_id in changed_ids :
1267+ assert model .index ['messages' ][changed_id ]['flags' ] == flags_after
1268+
1269+ if event_op == 'add' :
1270+ model .update_rendered_view .assert_has_calls (
1271+ [mocker .call (changed_id )])
1272+ elif event_op == 'remove' :
1273+ model .update_rendered_view .assert_not_called ()
1274+
1275+ for unchanged_id in (set (indexed_ids ) - set (event_message_ids )):
1276+ assert (model .index ['messages' ][unchanged_id ]['flags' ] ==
1277+ flags_before )
1278+
1279+ if event_op == 'add' :
1280+ set_count .assert_called_once_with (list (changed_ids ),
1281+ self .controller , - 1 )
1282+ elif event_op == 'remove' :
1283+ set_count .assert_not_called ()
1284+
12201285 @pytest .mark .parametrize ('narrow, event, called' , [
12211286 # Not in PM Narrow
12221287 ([], {}, False ),
0 commit comments