@@ -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' ;
@@ -1755,6 +1757,104 @@ void main() {
1755
1757
debugNetworkImageHttpClientProvider = null ;
1756
1758
});
1757
1759
1760
+ group ('User status' , () {
1761
+ void checkStatusEmoji (WidgetTester tester,
1762
+ {required Type type, required bool isPresent}) {
1763
+ final statusEmojiFinder = find.ancestor (of: find.byType (type),
1764
+ matching: find.byType (UserStatusEmoji ));
1765
+ if (isPresent) {
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
+ } else {
1774
+ check (statusEmojiFinder).findsNothing ();
1775
+ }
1776
+ }
1777
+
1778
+ testWidgets ('status emoji (unicode) & text are set -> emoji is displayed, text is not' , (tester) async {
1779
+ final user = eg.user ();
1780
+ await setupMessageListPage (tester,
1781
+ users: [user],
1782
+ messages: [eg.streamMessage (sender: user)],
1783
+ );
1784
+ await store.changeUserStatuses ({
1785
+ user.userId: UserStatusChange (
1786
+ text: OptionSome ('Busy' ),
1787
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
1788
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji))),
1789
+ });
1790
+ await tester.pump ();
1791
+
1792
+ checkStatusEmoji (tester, type: UnicodeEmojiWidget , isPresent: true );
1793
+ check (find.text ('Busy' )).findsNothing ();
1794
+ });
1795
+
1796
+ testWidgets ('status emoji (image) & text are set -> emoji is displayed, text is not' , (tester) async {
1797
+ final user = eg.user ();
1798
+ await setupMessageListPage (tester,
1799
+ users: [user],
1800
+ messages: [eg.streamMessage (sender: user)],
1801
+ );
1802
+ await store.changeUserStatuses ({
1803
+ user.userId: UserStatusChange (
1804
+ text: OptionSome ('Coding' ),
1805
+ emoji: OptionSome (StatusEmoji (emojiName: 'zulip' ,
1806
+ emojiCode: 'zulip' , reactionType: ReactionType .zulipExtraEmoji))),
1807
+ });
1808
+ await tester.pump ();
1809
+
1810
+ checkStatusEmoji (tester, type: ImageEmojiWidget , isPresent: true );
1811
+ check (find.text ('Coding' )).findsNothing ();
1812
+ });
1813
+
1814
+ testWidgets ('longer user name -> emoji stays visible' , (tester) async {
1815
+ final user = eg.user (fullName: 'User with a very very very long name to check if emoji is still visible' );
1816
+ await setupMessageListPage (tester,
1817
+ users: [user],
1818
+ messages: [eg.streamMessage (sender: user)],
1819
+ );
1820
+ await store.changeUserStatuses ({
1821
+ user.userId: UserStatusChange (
1822
+ text: OptionNone (),
1823
+ emoji: OptionSome (StatusEmoji (emojiName: 'working_on_it' ,
1824
+ emojiCode: '1f6e0' , reactionType: ReactionType .unicodeEmoji))),
1825
+ });
1826
+ await tester.pump ();
1827
+
1828
+ checkStatusEmoji (tester, type: UnicodeEmojiWidget , isPresent: true );
1829
+ });
1830
+
1831
+ testWidgets ('status emoji is not set, text is set -> none of them is displayed' , (tester) async {
1832
+ final user = eg.user ();
1833
+ await setupMessageListPage (tester,
1834
+ users: [user],
1835
+ messages: [eg.streamMessage (sender: user)],
1836
+ );
1837
+ await store.changeUserStatuses ({
1838
+ user.userId: UserStatusChange (
1839
+ text: OptionSome ('Busy' ),
1840
+ emoji: OptionNone ()),
1841
+ });
1842
+ await tester.pump ();
1843
+
1844
+ checkStatusEmoji (tester, type: UnicodeEmojiWidget , isPresent: false );
1845
+ check (find.text ('Busy' )).findsNothing ();
1846
+ });
1847
+
1848
+ testWidgets ('status is not set -> emoji is not displayed' , (tester) async {
1849
+ final user = eg.user ();
1850
+ await setupMessageListPage (tester,
1851
+ users: [user],
1852
+ messages: [eg.streamMessage (sender: user)],
1853
+ );
1854
+ checkStatusEmoji (tester, type: UnicodeEmojiWidget , isPresent: false );
1855
+ });
1856
+ });
1857
+
1758
1858
group ('Muted sender' , () {
1759
1859
void checkMessage (Message message, {required bool expectIsMuted}) {
1760
1860
final mutedLabel = 'Muted user' ;
0 commit comments