@@ -131,16 +131,18 @@ void main() {
131
131
Finder findAvatarImage (int userId) =>
132
132
find.byWidgetPredicate ((widget) => widget is AvatarImage && widget.userId == userId);
133
133
134
- void checkUserShown (User user, PerAccountStore store, {required bool expected}) {
134
+ void checkUserShown (User user, {required bool expected, bool ? deliveryEmailExpected}) {
135
+ deliveryEmailExpected ?? = expected;
135
136
check (find.text (user.fullName).evaluate ().length).equals (expected ? 1 : 0 );
137
+ check (find.text (user.deliveryEmail?? "" ).evaluate ().length).equals (deliveryEmailExpected ? 1 : 0 );
136
138
final avatarFinder = findAvatarImage (user.userId);
137
139
check (avatarFinder.evaluate ().length).equals (expected ? 1 : 0 );
138
140
}
139
141
140
142
testWidgets ('options appear, disappear, and change correctly' , (tester) async {
141
- final user1 = eg.user (userId: 1 , fullName: 'User One' , avatarUrl: 'user1.png' );
142
- final user2 = eg.user (userId: 2 , fullName: 'User Two' , avatarUrl: 'user2.png' );
143
- final user3 = eg.user (userId: 3 , fullName: 'User Three' , avatarUrl: 'user3.png' );
143
+ final user1
= eg.
user (userId
: 1 , fullName
: 'User One' , avatarUrl
: 'user1.png' ,deliveryEmail : '[email protected] ' );
144
+ final user2
= eg.
user (userId
: 2 , fullName
: 'User Two' , avatarUrl
: 'user2.png' , deliveryEmail : '[email protected] ' );
145
+ final user3
= eg.
user (userId
: 3 , fullName
: 'User Three' , avatarUrl
: 'user3.png' , deliveryEmail : '[email protected] ' );
144
146
final composeInputFinder = await setupToComposeInput (tester, users: [user1, user2, user3]);
145
147
final store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
146
148
@@ -151,33 +153,70 @@ void main() {
151
153
await tester.pumpAndSettle (); // async computation; options appear
152
154
153
155
// "User Two" and "User Three" appear, but not "User One"
154
- checkUserShown (user1, store, expected: false );
155
- checkUserShown (user2, store, expected: true );
156
- checkUserShown (user3, store, expected: true );
156
+ checkUserShown (user1, expected: false );
157
+ checkUserShown (user2, expected: true );
158
+ checkUserShown (user3, expected: true );
157
159
158
160
// Finishing autocomplete updates compose box; causes options to disappear
159
161
await tester.tap (find.text ('User Three' ));
160
162
await tester.pump ();
161
163
check (tester.widget <TextField >(composeInputFinder).controller! .text)
162
164
.contains (mention (user3, users: store.users));
163
- checkUserShown (user1, store, expected: false );
164
- checkUserShown (user2, store, expected: false );
165
- checkUserShown (user3, store, expected: false );
165
+ checkUserShown (user1, expected: false );
166
+ checkUserShown (user2, expected: false );
167
+ checkUserShown (user3, expected: false );
166
168
167
169
// Then a new autocomplete intent brings up options again
168
170
// TODO(#226): Remove this extra edit when this bug is fixed.
169
171
await tester.enterText (composeInputFinder, 'hello @user tw' );
170
172
await tester.enterText (composeInputFinder, 'hello @user two' );
171
173
await tester.pumpAndSettle (); // async computation; options appear
172
- checkUserShown (user2, store, expected: true );
174
+ checkUserShown (user2, expected: true );
173
175
174
176
// Removing autocomplete intent causes options to disappear
175
177
// TODO(#226): Remove one of these edits when this bug is fixed.
176
178
await tester.enterText (composeInputFinder, '' );
177
179
await tester.enterText (composeInputFinder, ' ' );
178
- checkUserShown (user1, store, expected: false );
179
- checkUserShown (user2, store, expected: false );
180
- checkUserShown (user3, store, expected: false );
180
+ checkUserShown (user1, expected: false );
181
+ checkUserShown (user2, expected: false );
182
+ checkUserShown (user3, expected: false );
183
+
184
+ debugNetworkImageHttpClientProvider = null ;
185
+ });
186
+
187
+ testWidgets ('delivery email not visible when unavailable' , (tester) async {
188
+ final user1 = eg.user (userId: 1 , fullName: 'User One' , avatarUrl: 'user1.png' ,);
189
+ final composeInputFinder = await setupToComposeInput (tester, users: [user1]);
190
+
191
+ TypingNotifier .debugEnable = false ;
192
+ addTearDown (TypingNotifier .debugReset);
193
+
194
+ // Options are filtered correctly for query
195
+ // TODO(#226): Remove this extra edit when this bug is fixed.
196
+ await tester.enterText (composeInputFinder, 'hello @user ' );
197
+ await tester.enterText (composeInputFinder, 'hello @user o' );
198
+ await tester.pumpAndSettle (); // async computation; options appear
199
+
200
+ // Check "User One"'s delivery email is not visible
201
+ checkUserShown (user1, expected: true , deliveryEmailExpected: false );
202
+
203
+ debugNetworkImageHttpClientProvider = null ;
204
+ });
205
+ testWidgets ('delivery email visible when available' , (tester) async {
206
+ final user1
= eg.
user (userId
: 1 , fullName
: 'User One' , avatarUrl
: 'user1.png' , deliveryEmail
: '[email protected] ' );
207
+ final composeInputFinder = await setupToComposeInput (tester, users: [user1]);
208
+
209
+ TypingNotifier .debugEnable = false ;
210
+ addTearDown (TypingNotifier .debugReset);
211
+
212
+ // Options are filtered correctly for query
213
+ // TODO(#226): Remove this extra edit when this bug is fixed.
214
+ await tester.enterText (composeInputFinder, 'hello @user ' );
215
+ await tester.enterText (composeInputFinder, 'hello @user o' );
216
+ await tester.pumpAndSettle (); // async computation; options appear
217
+
218
+ // Check "User One"'s delivery email is visible
219
+ checkUserShown (user1, expected: true , deliveryEmailExpected: true );
181
220
182
221
debugNetworkImageHttpClientProvider = null ;
183
222
});
0 commit comments