@@ -14,6 +14,7 @@ import 'package:zulip/api/model/model.dart';
14
14
import 'package:zulip/api/model/narrow.dart' ;
15
15
import 'package:zulip/api/route/channels.dart' ;
16
16
import 'package:zulip/api/route/messages.dart' ;
17
+ import 'package:zulip/basic.dart' ;
17
18
import 'package:zulip/model/actions.dart' ;
18
19
import 'package:zulip/model/localizations.dart' ;
19
20
import 'package:zulip/model/message.dart' ;
@@ -26,6 +27,7 @@ import 'package:zulip/widgets/autocomplete.dart';
26
27
import 'package:zulip/widgets/color.dart' ;
27
28
import 'package:zulip/widgets/compose_box.dart' ;
28
29
import 'package:zulip/widgets/content.dart' ;
30
+ import 'package:zulip/widgets/emoji.dart' ;
29
31
import 'package:zulip/widgets/icons.dart' ;
30
32
import 'package:zulip/widgets/message_list.dart' ;
31
33
import 'package:zulip/widgets/page.dart' ;
@@ -66,6 +68,7 @@ void main() {
66
68
List <ZulipStream >? streams,
67
69
List <User >? users,
68
70
List <int >? mutedUserIds,
71
+ List <(int userId, UserStatusChange change)>? userStatuses,
69
72
List <Subscription >? subscriptions,
70
73
UnreadMessagesSnapshot ? unreadMsgs,
71
74
int ? zulipFeatureLevel,
@@ -91,6 +94,7 @@ void main() {
91
94
if (mutedUserIds != null ) {
92
95
await store.setMutedUsers (mutedUserIds);
93
96
}
97
+ await store.changeUserStatuses (userStatuses ?? []);
94
98
if (fetchResult != null ) {
95
99
assert (foundOldest && messageCount == null && messages == null );
96
100
} else {
@@ -1722,6 +1726,57 @@ void main() {
1722
1726
debugNetworkImageHttpClientProvider = null ;
1723
1727
});
1724
1728
1729
+ group ('User status emoji' , () {
1730
+ void checkStatusEmoji (User user, {required bool isPresent}) {
1731
+ final nameFinder = find.text (user.fullName);
1732
+ final statusEmojiFinder = find.ancestor (of: find.byType (UnicodeEmojiWidget ),
1733
+ matching: find.byType (UserStatusEmoji ));
1734
+
1735
+ check (nameFinder).findsOne ();
1736
+ check (statusEmojiFinder).findsExactly (isPresent ? 1 : 0 );
1737
+
1738
+ final senderRowFinder = find.ancestor (
1739
+ of: nameFinder,
1740
+ matching: find.ancestor (
1741
+ of: statusEmojiFinder,
1742
+ matching: find.byType (Row ),
1743
+ ),
1744
+ );
1745
+ isPresent
1746
+ ? check (senderRowFinder).findsAny ()
1747
+ : check (senderRowFinder).findsNothing ();
1748
+ }
1749
+
1750
+ final user = eg.user (userId: 1 ,
1751
+ fullName: 'User with a very very very long name to check if emoji is still visible' );
1752
+
1753
+ testWidgets ('status emoji is set -> emoji is displayed' , (tester) async {
1754
+ await setupMessageListPage (tester,
1755
+ users: [user],
1756
+ messages: [eg.streamMessage (sender: user)],
1757
+ userStatuses: [
1758
+ (
1759
+ user.userId,
1760
+ UserStatusChange (
1761
+ text: OptionSome ('Busy' ),
1762
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
1763
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji)))
1764
+ ),
1765
+ ],
1766
+ );
1767
+ checkStatusEmoji (user, isPresent: true );
1768
+ });
1769
+
1770
+ testWidgets ('status emoji is not set -> emoji is not displayed' , (tester) async {
1771
+ await setupMessageListPage (tester,
1772
+ users: [user],
1773
+ messages: [eg.streamMessage (sender: user)],
1774
+ userStatuses: [],
1775
+ );
1776
+ checkStatusEmoji (user, isPresent: false );
1777
+ });
1778
+ });
1779
+
1725
1780
group ('Muted sender' , () {
1726
1781
void checkMessage (Message message, {required bool expectIsMuted}) {
1727
1782
final mutedLabel = 'Muted user' ;
0 commit comments