@@ -13,6 +13,7 @@ import 'package:zulip/widgets/recent_dm_conversations.dart';
13
13
import 'package:zulip/widgets/store.dart' ;
14
14
15
15
import '../example_data.dart' as eg;
16
+ import '../flutter_checks.dart' ;
16
17
import '../model/binding.dart' ;
17
18
import '../model/test_store.dart' ;
18
19
import '../test_navigation.dart' ;
@@ -106,7 +107,7 @@ void main() {
106
107
});
107
108
108
109
group ('RecentDmConversationsItem' , () {
109
- group ('appearance' , () {
110
+ group ('content/ appearance' , () {
110
111
void checkAvatar (WidgetTester tester, DmNarrow narrow) {
111
112
final shape = tester.widget <AvatarShape >(
112
113
find.descendant (
@@ -145,6 +146,26 @@ void main() {
145
146
}
146
147
}
147
148
149
+ Future <void > markMessageAsRead (WidgetTester tester, Message message) async {
150
+ final store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
151
+ store.handleEvent (UpdateMessageFlagsAddEvent (
152
+ id: 1 , flag: MessageFlag .read, all: false , messages: [message.id]));
153
+ await tester.pump ();
154
+ }
155
+
156
+ void checkUnreadCount (WidgetTester tester, int expectedCount) {
157
+ final Text ? textWidget = tester.widgetList <Text >(find.descendant (
158
+ of: find.byType (RecentDmConversationsItem ),
159
+ matching: find.textContaining (RegExp (r'^\d+$' ),
160
+ ))).singleOrNull;
161
+
162
+ if (expectedCount == 0 ) {
163
+ check (textWidget).isNull ();
164
+ } else {
165
+ check (textWidget).isNotNull ().data.equals (expectedCount.toString ());
166
+ }
167
+ }
168
+
148
169
group ('self-1:1' , () {
149
170
testWidgets ('has right title/avatar' , (WidgetTester tester) async {
150
171
final message = eg.dmMessage (from: eg.selfUser, to: []);
@@ -169,6 +190,15 @@ void main() {
169
190
newNameForSelfUser: name);
170
191
checkTitle (tester, name, 2 );
171
192
});
193
+
194
+ testWidgets ('unread counts' , (WidgetTester tester) async {
195
+ final message = eg.dmMessage (from: eg.selfUser, to: []);
196
+ await setupPage (tester, users: [], dmMessages: [message]);
197
+
198
+ checkUnreadCount (tester, 1 );
199
+ await markMessageAsRead (tester, message);
200
+ checkUnreadCount (tester, 0 );
201
+ });
172
202
});
173
203
174
204
group ('1:1' , () {
@@ -206,6 +236,15 @@ void main() {
206
236
await setupPage (tester, users: [user], dmMessages: [message]);
207
237
checkTitle (tester, user.fullName, 2 );
208
238
});
239
+
240
+ testWidgets ('unread counts' , (WidgetTester tester) async {
241
+ final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
242
+ await setupPage (tester, users: [], dmMessages: [message]);
243
+
244
+ checkUnreadCount (tester, 1 );
245
+ await markMessageAsRead (tester, message);
246
+ checkUnreadCount (tester, 0 );
247
+ });
209
248
});
210
249
211
250
group ('group' , () {
@@ -255,6 +294,15 @@ void main() {
255
294
await setupPage (tester, users: users, dmMessages: [message]);
256
295
checkTitle (tester, users.map ((u) => u.fullName).join (', ' ), 2 );
257
296
});
297
+
298
+ testWidgets ('unread counts' , (WidgetTester tester) async {
299
+ final message = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser, eg.otherUser]);
300
+ await setupPage (tester, users: [], dmMessages: [message]);
301
+
302
+ checkUnreadCount (tester, 1 );
303
+ await markMessageAsRead (tester, message);
304
+ checkUnreadCount (tester, 0 );
305
+ });
258
306
});
259
307
});
260
308
0 commit comments