@@ -1145,13 +1145,15 @@ 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' )
1150+ set_count = mocker .patch ('zulipterminal.model.set_count' )
11501151
11511152 model .update_message_flag_status (event )
11521153
11531154 assert model .index == dict (messages = {})
11541155 model .update_rendered_view .assert_not_called ()
1156+ set_count .assert_not_called ()
11551157
11561158 def test_update_star_status_invalid_operation (self , mocker , model ):
11571159 model .index = dict (messages = {1 : {'flags' : None }}) # Minimal
@@ -1163,9 +1165,11 @@ def test_update_star_status_invalid_operation(self, mocker, model):
11631165 'all' : False ,
11641166 }
11651167 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1168+ set_count = mocker .patch ('zulipterminal.model.set_count' )
11661169 with pytest .raises (RuntimeError ):
11671170 model .update_message_flag_status (event )
11681171 model .update_rendered_view .assert_not_called ()
1172+ set_count .assert_not_called ()
11691173
11701174 @pytest .mark .parametrize ('event_message_ids, indexed_ids' , [
11711175 ([1 ], [1 ]),
@@ -1199,19 +1203,80 @@ def test_update_star_status(self, mocker, model, event_op,
11991203 'all' : False ,
12001204 }
12011205 mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1206+ set_count = mocker .patch ('zulipterminal.model.set_count' )
12021207
12031208 model .update_message_flag_status (event )
12041209
12051210 changed_ids = set (indexed_ids ) & set (event_message_ids )
12061211 for changed_id in changed_ids :
12071212 assert model .index ['messages' ][changed_id ]['flags' ] == flags_after
12081213 (model .update_rendered_view .
1209- has_calls ([mocker .call (changed_id ) for changed_id in changed_ids ]))
1214+ assert_has_calls ([mocker .call (changed_id )
1215+ for changed_id in changed_ids ]))
12101216
12111217 for unchanged_id in (set (indexed_ids ) - set (event_message_ids )):
12121218 assert (model .index ['messages' ][unchanged_id ]['flags' ] ==
12131219 flags_before )
12141220
1221+ set_count .assert_not_called ()
1222+
1223+ @pytest .mark .parametrize ('event_message_ids, indexed_ids' , [
1224+ ([1 ], [1 ]),
1225+ ([1 , 2 ], [1 ]),
1226+ ([1 , 2 ], [1 , 2 ]),
1227+ ([1 ], [1 , 2 ]),
1228+ ([], [1 , 2 ]),
1229+ ([1 , 2 ], []),
1230+ ])
1231+ @pytest .mark .parametrize ('event_op, flags_before, flags_after' , [
1232+ ('add' , [], ['read' ]),
1233+ ('add' , ['read' ], ['read' ]),
1234+ ('add' , ['starred' ], ['starred' , 'read' ]),
1235+ ('add' , ['read' , 'starred' ], ['read' , 'starred' ]),
1236+ ('remove' , [], []),
1237+ ('remove' , ['read' ], ['read' ]), # msg cannot be marked 'unread'
1238+ ('remove' , ['starred' ], ['starred' ]),
1239+ ('remove' , ['starred' , 'read' ], ['starred' , 'read' ]),
1240+ ('remove' , ['read' , 'starred' ], ['read' , 'starred' ]),
1241+ ])
1242+ def test_update_read_status (self , mocker , model , event_op ,
1243+ event_message_ids , indexed_ids ,
1244+ flags_before , flags_after ):
1245+ model .index = dict (messages = {msg_id : {'flags' : flags_before }
1246+ for msg_id in indexed_ids })
1247+ event = {
1248+ 'messages' : event_message_ids ,
1249+ 'type' : 'update_message_flags' ,
1250+ 'flag' : 'read' ,
1251+ 'operation' : event_op ,
1252+ 'all' : False ,
1253+ }
1254+
1255+ mocker .patch ('zulipterminal.model.Model.update_rendered_view' )
1256+ set_count = mocker .patch ('zulipterminal.model.set_count' )
1257+
1258+ model .update_message_flag_status (event )
1259+
1260+ changed_ids = set (indexed_ids ) & set (event_message_ids )
1261+ for changed_id in changed_ids :
1262+ assert model .index ['messages' ][changed_id ]['flags' ] == flags_after
1263+
1264+ if event_op == 'add' :
1265+ model .update_rendered_view .assert_has_calls (
1266+ [mocker .call (changed_id )])
1267+ elif event_op == 'remove' :
1268+ model .update_rendered_view .assert_not_called ()
1269+
1270+ for unchanged_id in (set (indexed_ids ) - set (event_message_ids )):
1271+ assert (model .index ['messages' ][unchanged_id ]['flags' ] ==
1272+ flags_before )
1273+
1274+ if event_op == 'add' :
1275+ set_count .assert_called_once_with (list (changed_ids ),
1276+ self .controller , - 1 )
1277+ elif event_op == 'remove' :
1278+ set_count .assert_not_called ()
1279+
12151280 @pytest .mark .parametrize ('narrow, event, called' , [
12161281 # Not in PM Narrow
12171282 ([], {}, False ),
0 commit comments