@@ -6,13 +6,15 @@ import 'package:zulip/api/model/model.dart';
66import 'package:zulip/api/route/messages.dart' ;
77import 'package:zulip/model/compose.dart' ;
88import 'package:zulip/model/narrow.dart' ;
9+ import 'package:zulip/model/store.dart' ;
910import 'package:zulip/widgets/message_list.dart' ;
1011import 'package:zulip/widgets/store.dart' ;
1112
1213import '../api/fake_api.dart' ;
1314import '../example_data.dart' as eg;
1415import '../model/binding.dart' ;
1516import '../model/test_store.dart' ;
17+ import 'content_test.dart' ;
1618
1719/// Simulates loading a [MessageListPage] and tapping to focus the compose input.
1820///
@@ -39,6 +41,8 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
3941 messages: [message],
4042 ).toJson ());
4143
44+ prepareBoringImageHttpClient ();
45+
4246 await tester.pumpWidget (
4347 MaterialApp (
4448 localizationsDelegates: ZulipLocalizations .localizationsDelegates,
@@ -65,10 +69,18 @@ void main() {
6569 TestZulipBinding .ensureInitialized ();
6670
6771 group ('ComposeAutocomplete' , () {
72+
73+ Finder findNetworkImage (String url) {
74+ return find.byWidgetPredicate ((widget) =>
75+ widget is Image &&
76+ widget.image is NetworkImage &&
77+ (widget.image as NetworkImage ).url == url);
78+ }
79+
6880 testWidgets ('options appear, disappear, and change correctly' , (WidgetTester tester) async {
69- final user1 = eg.user (userId: 1 , fullName: 'User One' );
70- final user2 = eg.user (userId: 2 , fullName: 'User Two' );
71- final user3 = eg.user (userId: 3 , fullName: 'User Three' );
81+ final user1 = eg.user (userId: 1 , fullName: 'User One' , avatarUrl : 'user1.png' );
82+ final user2 = eg.user (userId: 2 , fullName: 'User Two' , avatarUrl : 'user2.png' );
83+ final user3 = eg.user (userId: 3 , fullName: 'User Three' , avatarUrl : 'user3.png' );
7284 final composeInputFinder = await setupToComposeInput (tester, users: [user1, user2, user3]);
7385 final store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
7486
@@ -77,34 +89,59 @@ void main() {
7789 await tester.enterText (composeInputFinder, 'hello @user ' );
7890 await tester.enterText (composeInputFinder, 'hello @user t' );
7991 await tester.pumpAndSettle (); // async computation; options appear
92+
8093 // "User Two" and "User Three" appear, but not "User One"
8194 check (tester.widgetList (find.text ('User One' ))).isEmpty ();
95+ final user1AvatarFinder =
96+ findNetworkImage (store.tryResolveUrl ('user1.png' ).toString ());
97+ check (tester.widgetList (user1AvatarFinder)).isEmpty ();
98+
8299 tester.widget (find.text ('User Two' ));
100+ final user2AvatarFinder =
101+ findNetworkImage (store.tryResolveUrl ('user2.png' ).toString ());
102+ tester.widget (user2AvatarFinder);
103+
83104 tester.widget (find.text ('User Three' ));
105+ final user3AvatarFinder =
106+ findNetworkImage (store.tryResolveUrl ('user3.png' ).toString ());
107+ tester.widget (user3AvatarFinder);
84108
85109 // Finishing autocomplete updates compose box; causes options to disappear
86110 await tester.tap (find.text ('User Three' ));
87111 await tester.pump ();
88112 check (tester.widget <TextField >(composeInputFinder).controller! .text)
89113 .contains (mention (user3, users: store.users));
90114 check (tester.widgetList (find.text ('User One' ))).isEmpty ();
115+ check (tester.widgetList (user1AvatarFinder)).isEmpty ();
116+
91117 check (tester.widgetList (find.text ('User Two' ))).isEmpty ();
118+ check (tester.widgetList (user2AvatarFinder)).isEmpty ();
119+
92120 check (tester.widgetList (find.text ('User Three' ))).isEmpty ();
121+ check (tester.widgetList (user3AvatarFinder)).isEmpty ();
93122
94123 // Then a new autocomplete intent brings up options again
95124 // TODO(#226): Remove this extra edit when this bug is fixed.
96125 await tester.enterText (composeInputFinder, 'hello @user tw' );
97126 await tester.enterText (composeInputFinder, 'hello @user two' );
98127 await tester.pumpAndSettle (); // async computation; options appear
99128 tester.widget (find.text ('User Two' ));
129+ tester.widget (user2AvatarFinder);
100130
101131 // Removing autocomplete intent causes options to disappear
102132 // TODO(#226): Remove one of these edits when this bug is fixed.
103133 await tester.enterText (composeInputFinder, '' );
104134 await tester.enterText (composeInputFinder, ' ' );
105135 check (tester.widgetList (find.text ('User One' ))).isEmpty ();
136+ check (tester.widgetList (user1AvatarFinder)).isEmpty ();
137+
106138 check (tester.widgetList (find.text ('User Two' ))).isEmpty ();
139+ check (tester.widgetList (user2AvatarFinder)).isEmpty ();
140+
107141 check (tester.widgetList (find.text ('User Three' ))).isEmpty ();
142+ check (tester.widgetList (user3AvatarFinder)).isEmpty ();
143+
144+ debugNetworkImageHttpClientProvider = null ;
108145 });
109146 });
110147}
0 commit comments