@@ -450,6 +450,44 @@ void main() {
450
450
}
451
451
});
452
452
});
453
+
454
+ group ('MarkTopicAsReadButton' , () {
455
+ testWidgets ('visible if topic has unread messages' , (tester) async {
456
+ await prepare ();
457
+ final message = eg.streamMessage (stream: someChannel, topic: someTopic);
458
+ await store.handleEvent (MessageEvent (id: 0 , message: message));
459
+ await showFromAppBar (tester, messages: [message]);
460
+ check (find.text ('Mark topic as read' )).findsOne ();
461
+ });
462
+
463
+ testWidgets ('not visible if topic has no unread messages' , (tester) async {
464
+ await prepare ();
465
+ final message = eg.streamMessage (stream: someChannel, topic: someTopic);
466
+ await showFromAppBar (tester, messages: [message]);
467
+ check (find.text ('Mark topic as read' )).findsNothing ();
468
+ });
469
+
470
+ testWidgets ('marks topic as read when pressed' , (tester) async {
471
+ await prepare ();
472
+ final message = eg.streamMessage (stream: someChannel, topic: someTopic);
473
+ await store.handleEvent (MessageEvent (id: 0 , message: message));
474
+ await showFromAppBar (tester, messages: [message]);
475
+
476
+ connection.prepare (json: UpdateMessageFlagsForNarrowResult (
477
+ processedCount: 1 , updatedCount: 1 ,
478
+ firstProcessedId: message.id, lastProcessedId: message.id,
479
+ foundOldest: true , foundNewest: true ).toJson ());
480
+ await tester.tap (find.text ('Mark topic as read' ));
481
+ await tester.pumpAndSettle ();
482
+
483
+ check (connection.lastRequest).isA< http.Request > ()
484
+ ..url.path.equals ('/api/v1/messages/flags/narrow' )
485
+ ..bodyFields['narrow' ].equals (jsonEncode ([
486
+ ...TopicNarrow (someChannel.streamId, TopicName (someTopic)).apiEncode (),
487
+ {'operator' : 'is' , 'operand' : 'unread' }
488
+ ]));
489
+ });
490
+ });
453
491
});
454
492
455
493
group ('message action sheet' , () {
0 commit comments