Skip to content

Commit 39f366f

Browse files
committed
msglist test: Verify whether the MarkNarrowAsRead dialog appears
1 parent 32fe02f commit 39f366f

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

test/widgets/message_list_test.dart

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,128 @@ 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+
1245+
await showsConfirmDialog(tester,
1246+
narrow: CombinedFeedNarrow(),
1247+
messages: [message],
1248+
unreadMsgs: eg.unreadMsgs(channels: [
1249+
UnreadChannelSnapshot(
1250+
streamId: message.streamId,
1251+
topic: message.topic,
1252+
unreadMessageIds: [message.id]),
1253+
]));
1254+
});
1255+
1256+
testWidgets('MentionsNarrow: show dialog', (tester) async {
1257+
final message = eg.streamMessage(flags: [MessageFlag.mentioned]);
1258+
1259+
await showsConfirmDialog(tester,
1260+
narrow: CombinedFeedNarrow(),
1261+
messages: [message],
1262+
unreadMsgs: eg.unreadMsgs(
1263+
mentions: [message.id],
1264+
channels: [
1265+
UnreadChannelSnapshot(
1266+
streamId: message.streamId,
1267+
topic: message.topic,
1268+
unreadMessageIds: [message.id]),
1269+
]));
1270+
});
1271+
1272+
testWidgets('ChannelNarrow: show dialog', (tester) async {
1273+
final message = eg.streamMessage(flags: []);
1274+
await showsConfirmDialog(tester,
1275+
narrow: ChannelNarrow(message.streamId),
1276+
messages: [message],
1277+
unreadMsgs: eg.unreadMsgs(channels: [
1278+
UnreadChannelSnapshot(
1279+
streamId: message.streamId,
1280+
topic: message.topic,
1281+
unreadMessageIds: [message.id]),
1282+
]));
1283+
});
1284+
1285+
testWidgets('DmNarrow: do not show dialog', (tester) async {
1286+
final message = eg.dmMessage(flags: [], from: eg.selfUser, to: [eg.otherUser]);
1287+
1288+
await doesNotShowConfirmDialog(tester,
1289+
narrow: DmNarrow.ofMessage(message, selfUserId: eg.selfUser.userId),
1290+
messages: [message],
1291+
unreadMsgs: eg.unreadMsgs(dms: [
1292+
UnreadDmSnapshot(otherUserId: eg.otherUser.userId,
1293+
unreadMessageIds: [message.id])]),
1294+
updateResult: UpdateMessageFlagsForNarrowResult(
1295+
processedCount: 1, updatedCount: 1,
1296+
firstProcessedId: message.id, lastProcessedId: message.id,
1297+
foundOldest: true, foundNewest: true));
1298+
});
1299+
1300+
testWidgets('TopicNarrow: do not show dialog', (tester) async {
1301+
final message = eg.streamMessage(flags: []);
1302+
1303+
await doesNotShowConfirmDialog(tester,
1304+
narrow: TopicNarrow.ofMessage(message),
1305+
messages: [message],
1306+
unreadMsgs: eg.unreadMsgs(channels: [
1307+
UnreadChannelSnapshot(topic: message.topic,
1308+
streamId: message.streamId, unreadMessageIds: [message.id])]),
1309+
updateResult: UpdateMessageFlagsForNarrowResult(
1310+
processedCount: 1, updatedCount: 1,
1311+
firstProcessedId: message.id, lastProcessedId: message.id,
1312+
foundOldest: true, foundNewest: true));
1313+
});
1314+
});
1315+
11941316
testWidgets('from read to unread', (tester) async {
11951317
final message = eg.streamMessage(flags: [MessageFlag.read]);
11961318
await setupMessageListPage(tester, messages: [message]);

0 commit comments

Comments
 (0)