@@ -5,8 +5,10 @@ import 'package:flutter_checks/flutter_checks.dart';
5
5
import 'package:flutter_test/flutter_test.dart' ;
6
6
import 'package:zulip/api/model/events.dart' ;
7
7
import 'package:zulip/api/model/model.dart' ;
8
+ import 'package:zulip/basic.dart' ;
8
9
import 'package:zulip/model/narrow.dart' ;
9
10
import 'package:zulip/widgets/content.dart' ;
11
+ import 'package:zulip/widgets/emoji.dart' ;
10
12
import 'package:zulip/widgets/home.dart' ;
11
13
import 'package:zulip/widgets/icons.dart' ;
12
14
import 'package:zulip/widgets/message_list.dart' ;
@@ -21,13 +23,15 @@ import '../model/test_store.dart';
21
23
import '../test_navigation.dart' ;
22
24
import 'content_checks.dart' ;
23
25
import 'message_list_checks.dart' ;
26
+ import 'message_list_test.dart' ;
24
27
import 'page_checks.dart' ;
25
28
import 'test_app.dart' ;
26
29
27
30
Future <void > setupPage (WidgetTester tester, {
28
31
required List <DmMessage > dmMessages,
29
32
required List <User > users,
30
33
List <int >? mutedUserIds,
34
+ List <(int userId, UserStatusChange change)>? userStatuses,
31
35
NavigatorObserver ? navigatorObserver,
32
36
String ? newNameForSelfUser,
33
37
}) async {
@@ -44,6 +48,8 @@ Future<void> setupPage(WidgetTester tester, {
44
48
await store.setMutedUsers (mutedUserIds);
45
49
}
46
50
51
+ await store.changeUserStatuses (userStatuses ?? []);
52
+
47
53
await store.addMessages (dmMessages);
48
54
49
55
if (newNameForSelfUser != null ) {
@@ -176,7 +182,7 @@ void main() {
176
182
// TODO(#232): syntax like `check(find(…), findsOneWidget)`
177
183
final widget = tester.widget (find.descendant (
178
184
of: find.byType (RecentDmConversationsItem ),
179
- matching: find.text (expectedText),
185
+ matching: find.textContaining (expectedText),
180
186
));
181
187
if (expectedLines != null ) {
182
188
final renderObject = tester.renderObject <RenderParagraph >(find.byWidget (widget));
@@ -186,6 +192,17 @@ void main() {
186
192
}
187
193
}
188
194
195
+ void checkStatusEmoji ({required bool isPresent}) {
196
+ final statusEmojiFinder = findStatusEmoji (UnicodeEmojiWidget );
197
+ if (isPresent) {
198
+ checkUserStatusEmoji (statusEmojiFinder, isAnimated: false );
199
+ }
200
+ final itemFinder = find.descendant (
201
+ of: find.byType (RecentDmConversationsItem ),
202
+ matching: statusEmojiFinder);
203
+ check (itemFinder).findsExactly (isPresent ? 1 : 0 );
204
+ }
205
+
189
206
Future <void > markMessageAsRead (WidgetTester tester, Message message) async {
190
207
final store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
191
208
await store.handleEvent (UpdateMessageFlagsAddEvent (
@@ -231,6 +248,28 @@ void main() {
231
248
checkTitle (tester, name, 2 );
232
249
});
233
250
251
+ testWidgets ('status emoji is set -> emoji is displayed' , (tester) async {
252
+ final message = eg.dmMessage (from: eg.selfUser, to: []);
253
+ await setupPage (tester, dmMessages: [message], users: [],
254
+ userStatuses: [
255
+ (
256
+ eg.selfUser.userId,
257
+ UserStatusChange (
258
+ text: OptionSome ('Busy' ),
259
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
260
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji)))
261
+ ),
262
+ ]);
263
+ checkStatusEmoji (isPresent: true );
264
+ });
265
+
266
+ testWidgets ('status emoji is not set -> emoji is not displayed' , (tester) async {
267
+ final message = eg.dmMessage (from: eg.selfUser, to: []);
268
+ await setupPage (tester, dmMessages: [message], users: [],
269
+ userStatuses: []);
270
+ checkStatusEmoji (isPresent: false );
271
+ });
272
+
234
273
testWidgets ('unread counts' , (tester) async {
235
274
final message = eg.dmMessage (from: eg.selfUser, to: []);
236
275
await setupPage (tester, users: [], dmMessages: [message]);
@@ -291,6 +330,30 @@ void main() {
291
330
checkTitle (tester, user.fullName, 2 );
292
331
});
293
332
333
+ testWidgets ('status emoji is set -> emoji is displayed' , (tester) async {
334
+ final user = eg.user ();
335
+ final message = eg.dmMessage (from: eg.selfUser, to: [user]);
336
+ await setupPage (tester, users: [user], dmMessages: [message],
337
+ userStatuses: [
338
+ (
339
+ user.userId,
340
+ UserStatusChange (
341
+ text: OptionSome ('Busy' ),
342
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
343
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji)))
344
+ ),
345
+ ]);
346
+ checkStatusEmoji (isPresent: true );
347
+ });
348
+
349
+ testWidgets ('status emoji is not set -> emoji is not displayed' , (tester) async {
350
+ final user = eg.user ();
351
+ final message = eg.dmMessage (from: eg.selfUser, to: [user]);
352
+ await setupPage (tester, users: [user], dmMessages: [message],
353
+ userStatuses: []);
354
+ checkStatusEmoji (isPresent: false );
355
+ });
356
+
294
357
testWidgets ('unread counts' , (tester) async {
295
358
final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
296
359
await setupPage (tester, users: [], dmMessages: [message]);
@@ -379,6 +442,29 @@ void main() {
379
442
checkTitle (tester, users.map ((u) => u.fullName).join (', ' ), 2 );
380
443
});
381
444
445
+ testWidgets ('status emojis are set -> emoji are not displayed' , (tester) async {
446
+ final users = usersList (3 );
447
+ final message = eg.dmMessage (from: eg.selfUser, to: users);
448
+ await setupPage (tester, users: users, dmMessages: [message],
449
+ userStatuses: [
450
+ (
451
+ users.first.userId,
452
+ UserStatusChange (
453
+ text: OptionSome ('Busy' ),
454
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
455
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji)))
456
+ ),
457
+ (
458
+ users.last.userId,
459
+ UserStatusChange (
460
+ text: OptionSome ('In a meeting' ),
461
+ emoji: OptionSome (StatusEmoji (emojiName: 'calendar' ,
462
+ emojiCode: '1f4c5' , reactionType: ReactionType .unicodeEmoji)))
463
+ ),
464
+ ]);
465
+ checkStatusEmoji (isPresent: false );
466
+ });
467
+
382
468
testWidgets ('unread counts' , (tester) async {
383
469
final message = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser, eg.otherUser]);
384
470
await setupPage (tester, users: [], dmMessages: [message]);
0 commit comments