@@ -1192,6 +1192,110 @@ void main() {
11921192 );
11931193 }
11941194
1195+ group ('confirmation dialog' , () {
1196+ Future <void > showsConfirmDialog ({required WidgetTester tester,
1197+ required Narrow narrow, required List <Message > messages,
1198+ required UnreadMessagesSnapshot unreadMsgs,
1199+ }) async {
1200+ await setupMessageListPage (tester, narrow: narrow,
1201+ messages: messages, unreadMsgs: unreadMsgs);
1202+ check (isMarkAsReadButtonVisible (tester)).isTrue ();
1203+
1204+ await tester.tap (find.byType (MarkAsReadWidget ));
1205+ await tester.pump ();
1206+
1207+ final unreadCount = store.unreads.countInNarrow (narrow);
1208+ checkConfirmDialog (tester, unreadCount);
1209+ }
1210+
1211+ Future <void > doesNotShowConfirmDialog ({required WidgetTester tester,
1212+ required Narrow narrow, required List <Message > messages,
1213+ required UnreadMessagesSnapshot unreadMsgs,
1214+ required UpdateMessageFlagsForNarrowResult updateResult,
1215+ }) async {
1216+ await setupMessageListPage (tester,
1217+ narrow: narrow, messages: messages, unreadMsgs: unreadMsgs);
1218+
1219+ check (isMarkAsReadButtonVisible (tester)).isTrue ();
1220+
1221+ connection.prepare (json: updateResult.toJson ());
1222+ await tester.tap (find.byType (MarkAsReadWidget ));
1223+ await tester.pump ();
1224+
1225+ checkNoDialog (tester);
1226+ await tester.pump (Duration .zero);
1227+ }
1228+
1229+ testWidgets ('CombinedFeedNarrow: show dialog' , (tester) async {
1230+ final message = eg.streamMessage (flags: []);
1231+ final unreadMsgs = eg.unreadMsgs (channels: [
1232+ UnreadChannelSnapshot (topic: message.topic,
1233+ streamId: message.streamId, unreadMessageIds: [message.id])
1234+ ]);
1235+ final narrow = CombinedFeedNarrow ();
1236+
1237+ await showsConfirmDialog (tester: tester,
1238+ narrow: narrow, messages: [message],unreadMsgs: unreadMsgs);
1239+ });
1240+
1241+ testWidgets ('MentionsNarrow: show dialog' , (tester) async {
1242+ final message = eg.streamMessage (flags: []);
1243+ final unreadMsgs = eg.unreadMsgs (mentions: [message.id],
1244+ channels: [UnreadChannelSnapshot (topic: message.topic,
1245+ streamId: message.streamId, unreadMessageIds: [message.id])
1246+ ]);
1247+ final narrow = MentionsNarrow ();
1248+
1249+ await showsConfirmDialog (tester: tester,
1250+ narrow: narrow, messages: [message],unreadMsgs: unreadMsgs);
1251+ });
1252+
1253+ testWidgets ('ChannelNarrow: show dialog' , (tester) async {
1254+ final message = eg.streamMessage (flags: []);
1255+ final unreadMsgs = eg.unreadMsgs (channels: [
1256+ UnreadChannelSnapshot (topic: message.topic,
1257+ streamId: message.streamId, unreadMessageIds: [message.id])
1258+ ]);
1259+ final narrow = ChannelNarrow (message.streamId);
1260+
1261+ await showsConfirmDialog (tester: tester,
1262+ narrow: narrow, messages: [message],unreadMsgs: unreadMsgs);
1263+ });
1264+
1265+ testWidgets ('DmNarrow: do not show dialog' , (tester) async {
1266+ final selfUser = eg.selfUser;
1267+ final otherUser = eg.otherUser;
1268+ final message = eg.dmMessage (flags: [], from: selfUser, to: [otherUser]);
1269+ final unreadMsgs = eg.unreadMsgs (dms: [
1270+ UnreadDmSnapshot (otherUserId: otherUser.userId, unreadMessageIds: [message.id])
1271+ ]);
1272+ final narrow = DmNarrow .ofMessage (message, selfUserId: eg.selfUser.userId);
1273+
1274+ final updateResult = UpdateMessageFlagsForNarrowResult (
1275+ processedCount: 1 , updatedCount: 1 ,
1276+ firstProcessedId: message.id, lastProcessedId: message.id,
1277+ foundOldest: true , foundNewest: true );
1278+ await doesNotShowConfirmDialog (tester: tester, narrow: narrow,
1279+ messages: [message], unreadMsgs: unreadMsgs, updateResult: updateResult);
1280+ });
1281+
1282+ testWidgets ('TopicNarrow: do not show dialog' , (tester) async {
1283+ final message = eg.streamMessage (flags: []);
1284+ final unreadMsgs = eg.unreadMsgs (channels: [
1285+ UnreadChannelSnapshot (topic: message.topic,
1286+ streamId: message.streamId, unreadMessageIds: [message.id])
1287+ ]);
1288+ final narrow = TopicNarrow .ofMessage (message);
1289+
1290+ final updateResult = UpdateMessageFlagsForNarrowResult (
1291+ processedCount: 1 , updatedCount: 1 ,
1292+ firstProcessedId: message.id, lastProcessedId: message.id,
1293+ foundOldest: true , foundNewest: true );
1294+ await doesNotShowConfirmDialog (tester: tester, narrow: narrow,
1295+ messages: [message], unreadMsgs: unreadMsgs, updateResult: updateResult);
1296+ });
1297+ });
1298+
11951299 testWidgets ('from read to unread' , (tester) async {
11961300 final message = eg.streamMessage (flags: [MessageFlag .read]);
11971301 await setupMessageListPage (tester, messages: [message]);
0 commit comments