Skip to content

Commit 8f54b00

Browse files
committed
msglist test: Verify whether the MarkNarrowAsRead dialog appears
1 parent 169ad4c commit 8f54b00

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

test/widgets/message_list_test.dart

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,124 @@ void main() {
11911191
expectedActionButtonText: zulipLocalizations.markAllAsReadConfirmationDialogConfirmButton);
11921192
}
11931193

1194+
group('confirmation dialog', () {
1195+
Future<void> showsConfirmDialog(WidgetTester tester, {
1196+
required Narrow narrow,
1197+
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(WidgetTester tester, {
1212+
required Narrow narrow,
1213+
required List<Message> messages,
1214+
required UnreadMessagesSnapshot unreadMsgs,
1215+
required UpdateMessageFlagsForNarrowResult updateResult,
1216+
}) async {
1217+
await setupMessageListPage(tester,
1218+
narrow: narrow, messages: messages, unreadMsgs: unreadMsgs);
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+
final apiNarrow = narrow.apiEncode()..add(ApiNarrowIs(IsOperand.unread));
1228+
check(connection.lastRequest).isA<http.Request>()
1229+
..method.equals('POST')
1230+
..url.path.equals('/api/v1/messages/flags/narrow')
1231+
..bodyFields.deepEquals({
1232+
'anchor': 'oldest',
1233+
'include_anchor': 'false',
1234+
'num_before': '0',
1235+
'num_after': '1000',
1236+
'narrow': jsonEncode(resolveApiNarrowForServer(apiNarrow, connection.zulipFeatureLevel!)),
1237+
'op': 'add',
1238+
'flag': 'read',
1239+
});
1240+
}
1241+
1242+
testWidgets('CombinedFeedNarrow: show dialog', (tester) async {
1243+
final message = eg.streamMessage(flags: []);
1244+
await showsConfirmDialog(tester,
1245+
narrow: CombinedFeedNarrow(),
1246+
messages: [message],
1247+
unreadMsgs: eg.unreadMsgs(channels: [
1248+
UnreadChannelSnapshot(
1249+
streamId: message.streamId,
1250+
topic: message.topic,
1251+
unreadMessageIds: [message.id]),
1252+
]));
1253+
});
1254+
1255+
testWidgets('MentionsNarrow: show dialog', (tester) async {
1256+
final message = eg.streamMessage(flags: [MessageFlag.mentioned]);
1257+
await showsConfirmDialog(tester,
1258+
narrow: CombinedFeedNarrow(),
1259+
messages: [message],
1260+
unreadMsgs: eg.unreadMsgs(
1261+
mentions: [message.id],
1262+
channels: [
1263+
UnreadChannelSnapshot(
1264+
streamId: message.streamId,
1265+
topic: message.topic,
1266+
unreadMessageIds: [message.id]),
1267+
]));
1268+
});
1269+
1270+
testWidgets('ChannelNarrow: show dialog', (tester) async {
1271+
final message = eg.streamMessage(flags: []);
1272+
await showsConfirmDialog(tester,
1273+
narrow: ChannelNarrow(message.streamId),
1274+
messages: [message],
1275+
unreadMsgs: eg.unreadMsgs(channels: [
1276+
UnreadChannelSnapshot(
1277+
streamId: message.streamId,
1278+
topic: message.topic,
1279+
unreadMessageIds: [message.id]),
1280+
]));
1281+
});
1282+
1283+
testWidgets('DmNarrow: do not show dialog', (tester) async {
1284+
final message = eg.dmMessage(flags: [], from: eg.selfUser, to: [eg.otherUser]);
1285+
await doesNotShowConfirmDialog(tester,
1286+
narrow: DmNarrow.ofMessage(message, selfUserId: eg.selfUser.userId),
1287+
messages: [message],
1288+
unreadMsgs: eg.unreadMsgs(dms: [
1289+
UnreadDmSnapshot(otherUserId: eg.otherUser.userId,
1290+
unreadMessageIds: [message.id])]),
1291+
updateResult: UpdateMessageFlagsForNarrowResult(
1292+
processedCount: 1, updatedCount: 1,
1293+
firstProcessedId: message.id, lastProcessedId: message.id,
1294+
foundOldest: true, foundNewest: true));
1295+
});
1296+
1297+
testWidgets('TopicNarrow: do not show dialog', (tester) async {
1298+
final message = eg.streamMessage(flags: []);
1299+
await doesNotShowConfirmDialog(tester,
1300+
narrow: TopicNarrow.ofMessage(message),
1301+
messages: [message],
1302+
unreadMsgs: eg.unreadMsgs(channels: [
1303+
UnreadChannelSnapshot(topic: message.topic,
1304+
streamId: message.streamId, unreadMessageIds: [message.id])]),
1305+
updateResult: UpdateMessageFlagsForNarrowResult(
1306+
processedCount: 1, updatedCount: 1,
1307+
firstProcessedId: message.id, lastProcessedId: message.id,
1308+
foundOldest: true, foundNewest: true));
1309+
});
1310+
});
1311+
11941312
testWidgets('from read to unread', (tester) async {
11951313
final message = eg.streamMessage(flags: [MessageFlag.read]);
11961314
await setupMessageListPage(tester, messages: [message]);

0 commit comments

Comments
 (0)