@@ -6,13 +6,15 @@ import 'package:zulip/api/model/model.dart';
6
6
import 'package:zulip/api/route/messages.dart' ;
7
7
import 'package:zulip/model/compose.dart' ;
8
8
import 'package:zulip/model/narrow.dart' ;
9
+ import 'package:zulip/model/store.dart' ;
9
10
import 'package:zulip/widgets/message_list.dart' ;
10
11
import 'package:zulip/widgets/store.dart' ;
11
12
12
13
import '../api/fake_api.dart' ;
13
14
import '../example_data.dart' as eg;
14
15
import '../model/binding.dart' ;
15
16
import '../model/test_store.dart' ;
17
+ import 'content_test.dart' ;
16
18
17
19
/// Simulates loading a [MessageListPage] and tapping to focus the compose input.
18
20
///
@@ -39,6 +41,8 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
39
41
messages: [message],
40
42
).toJson ());
41
43
44
+ prepareBoringImageHttpClient ();
45
+
42
46
await tester.pumpWidget (
43
47
MaterialApp (
44
48
localizationsDelegates: ZulipLocalizations .localizationsDelegates,
@@ -65,10 +69,18 @@ void main() {
65
69
TestZulipBinding .ensureInitialized ();
66
70
67
71
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
+
68
80
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' );
72
84
final composeInputFinder = await setupToComposeInput (tester, users: [user1, user2, user3]);
73
85
final store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
74
86
@@ -77,34 +89,59 @@ void main() {
77
89
await tester.enterText (composeInputFinder, 'hello @user ' );
78
90
await tester.enterText (composeInputFinder, 'hello @user t' );
79
91
await tester.pumpAndSettle (); // async computation; options appear
92
+
80
93
// "User Two" and "User Three" appear, but not "User One"
81
94
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
+
82
99
tester.widget (find.text ('User Two' ));
100
+ final user2AvatarFinder =
101
+ findNetworkImage (store.tryResolveUrl ('user2.png' ).toString ());
102
+ tester.widget (user2AvatarFinder);
103
+
83
104
tester.widget (find.text ('User Three' ));
105
+ final user3AvatarFinder =
106
+ findNetworkImage (store.tryResolveUrl ('user3.png' ).toString ());
107
+ tester.widget (user3AvatarFinder);
84
108
85
109
// Finishing autocomplete updates compose box; causes options to disappear
86
110
await tester.tap (find.text ('User Three' ));
87
111
await tester.pump ();
88
112
check (tester.widget <TextField >(composeInputFinder).controller! .text)
89
113
.contains (mention (user3, users: store.users));
90
114
check (tester.widgetList (find.text ('User One' ))).isEmpty ();
115
+ check (tester.widgetList (user1AvatarFinder)).isEmpty ();
116
+
91
117
check (tester.widgetList (find.text ('User Two' ))).isEmpty ();
118
+ check (tester.widgetList (user2AvatarFinder)).isEmpty ();
119
+
92
120
check (tester.widgetList (find.text ('User Three' ))).isEmpty ();
121
+ check (tester.widgetList (user3AvatarFinder)).isEmpty ();
93
122
94
123
// Then a new autocomplete intent brings up options again
95
124
// TODO(#226): Remove this extra edit when this bug is fixed.
96
125
await tester.enterText (composeInputFinder, 'hello @user tw' );
97
126
await tester.enterText (composeInputFinder, 'hello @user two' );
98
127
await tester.pumpAndSettle (); // async computation; options appear
99
128
tester.widget (find.text ('User Two' ));
129
+ tester.widget (user2AvatarFinder);
100
130
101
131
// Removing autocomplete intent causes options to disappear
102
132
// TODO(#226): Remove one of these edits when this bug is fixed.
103
133
await tester.enterText (composeInputFinder, '' );
104
134
await tester.enterText (composeInputFinder, ' ' );
105
135
check (tester.widgetList (find.text ('User One' ))).isEmpty ();
136
+ check (tester.widgetList (user1AvatarFinder)).isEmpty ();
137
+
106
138
check (tester.widgetList (find.text ('User Two' ))).isEmpty ();
139
+ check (tester.widgetList (user2AvatarFinder)).isEmpty ();
140
+
107
141
check (tester.widgetList (find.text ('User Three' ))).isEmpty ();
142
+ check (tester.widgetList (user3AvatarFinder)).isEmpty ();
143
+
144
+ debugNetworkImageHttpClientProvider = null ;
108
145
});
109
146
});
110
147
}
0 commit comments