@@ -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' ;
@@ -1758,6 +1759,79 @@ void main() {
1758
1759
debugNetworkImageHttpClientProvider = null ;
1759
1760
});
1760
1761
1762
+ group ('User status' , () {
1763
+ void checkFindsStatusEmoji (WidgetTester tester, Finder emojiFinder) {
1764
+ final statusEmojiFinder = find.ancestor (of: emojiFinder,
1765
+ matching: find.byType (UserStatusEmoji ));
1766
+ check (statusEmojiFinder).findsOne ();
1767
+ check (tester.firstWidget <UserStatusEmoji >(statusEmojiFinder)
1768
+ .neverAnimate).isTrue ();
1769
+
1770
+ final senderRowFinder = find.ancestor (of: statusEmojiFinder,
1771
+ matching: find.byType (SenderRow ));
1772
+ check (senderRowFinder).findsOne ();
1773
+ }
1774
+
1775
+ testWidgets ('emoji (unicode) & text are set -> emoji is displayed, text is not' , (tester) async {
1776
+ final user = eg.user ();
1777
+ await setupMessageListPage (tester,
1778
+ users: [user], messages: [eg.streamMessage (sender: user)]);
1779
+ await store.changeUserStatus (user.userId, UserStatusChange (
1780
+ text: OptionSome ('Busy' ),
1781
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
1782
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji))));
1783
+ await tester.pump ();
1784
+
1785
+ checkFindsStatusEmoji (tester, find.text ('\u {1f6e0}' ));
1786
+ check (find.descendant (of: find.byType (SenderRow ),
1787
+ matching: find.text ('Busy' ))).findsNothing ();
1788
+ });
1789
+
1790
+ testWidgets ('emoji (image) & text are set -> emoji is displayed, text is not' , (tester) async {
1791
+ prepareBoringImageHttpClient ();
1792
+
1793
+ final user = eg.user ();
1794
+ await setupMessageListPage (tester,
1795
+ users: [user], messages: [eg.streamMessage (sender: user)]);
1796
+ await store.changeUserStatus (user.userId, UserStatusChange (
1797
+ text: OptionSome ('Coding' ),
1798
+ emoji: OptionSome (StatusEmoji (emojiName: 'zulip' ,
1799
+ emojiCode: 'zulip' , reactionType: ReactionType .zulipExtraEmoji))));
1800
+ await tester.pumpAndSettle ();
1801
+
1802
+ checkFindsStatusEmoji (tester, find.byType (Image ));
1803
+ check (find.descendant (of: find.byType (SenderRow ),
1804
+ matching: find.text ('Coding' ))).findsNothing ();
1805
+
1806
+ debugNetworkImageHttpClientProvider = null ;
1807
+ });
1808
+
1809
+ testWidgets ('longer user name -> emoji stays visible' , (tester) async {
1810
+ final user = eg.user (fullName: 'User with a very very very long name to check if emoji is still visible' );
1811
+ await setupMessageListPage (tester,
1812
+ users: [user], messages: [eg.streamMessage (sender: user)]);
1813
+ await store.changeUserStatus (user.userId, UserStatusChange (
1814
+ text: OptionNone (),
1815
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
1816
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji))));
1817
+ await tester.pump ();
1818
+
1819
+ checkFindsStatusEmoji (tester, find.text ('\u {1f6e0}' ));
1820
+ });
1821
+
1822
+ testWidgets ('emoji is not set, text is set -> text is not displayed' , (tester) async {
1823
+ final user = eg.user ();
1824
+ await setupMessageListPage (tester,
1825
+ users: [user], messages: [eg.streamMessage (sender: user)]);
1826
+ await store.changeUserStatus (user.userId, UserStatusChange (
1827
+ text: OptionSome ('Busy' ), emoji: OptionNone ()));
1828
+ await tester.pump ();
1829
+
1830
+ check (find.descendant (of: find.byType (SenderRow ),
1831
+ matching: find.text ('Busy' ))).findsNothing ();
1832
+ });
1833
+ });
1834
+
1761
1835
group ('Muted sender' , () {
1762
1836
void checkMessage (Message message, {required bool expectIsMuted}) {
1763
1837
final mutedLabel = 'Muted user' ;
0 commit comments