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