1
1
import 'package:checks/checks.dart' ;
2
2
import 'package:flutter/material.dart' ;
3
+ import 'package:flutter_checks/flutter_checks.dart' ;
3
4
import 'package:flutter_test/flutter_test.dart' ;
4
5
import 'package:url_launcher/url_launcher.dart' ;
5
6
import 'package:zulip/api/model/initial_snapshot.dart' ;
6
7
import 'package:zulip/api/model/model.dart' ;
8
+ import 'package:zulip/model/localizations.dart' ;
7
9
import 'package:zulip/model/narrow.dart' ;
10
+ import 'package:zulip/model/store.dart' ;
8
11
import 'package:zulip/widgets/content.dart' ;
12
+ import 'package:zulip/widgets/icons.dart' ;
9
13
import 'package:zulip/widgets/message_list.dart' ;
10
14
import 'package:zulip/widgets/page.dart' ;
11
15
import 'package:zulip/widgets/profile.dart' ;
12
16
13
17
import '../example_data.dart' as eg;
14
18
import '../model/binding.dart' ;
15
19
import '../model/test_store.dart' ;
20
+ import '../test_images.dart' ;
16
21
import '../test_navigation.dart' ;
17
22
import 'message_list_checks.dart' ;
18
23
import 'page_checks.dart' ;
19
24
import 'profile_page_checks.dart' ;
20
25
import 'test_app.dart' ;
21
26
27
+ late PerAccountStore store;
28
+
22
29
Future <void > setupPage (WidgetTester tester, {
23
30
required int pageUserId,
24
31
List <User >? users,
32
+ List <int >? mutedUserIds,
25
33
List <CustomProfileField >? customProfileFields,
26
34
Map <String , RealmDefaultExternalAccount >? realmDefaultExternalAccounts,
27
35
NavigatorObserver ? navigatorObserver,
@@ -32,12 +40,13 @@ Future<void> setupPage(WidgetTester tester, {
32
40
customProfileFields: customProfileFields,
33
41
realmDefaultExternalAccounts: realmDefaultExternalAccounts);
34
42
await testBinding.globalStore.add (eg.selfAccount, initialSnapshot);
35
- final store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
43
+ store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
36
44
37
45
await store.addUser (eg.selfUser);
38
46
if (users != null ) {
39
47
await store.addUsers (users);
40
48
}
49
+ await store.muteUsers (mutedUserIds ?? []);
41
50
42
51
await tester.pumpWidget (TestZulipApp (
43
52
accountId: eg.selfAccount.id,
@@ -276,6 +285,42 @@ void main() {
276
285
.deepEquals ([1 , 2 , 3 ]);
277
286
});
278
287
288
+ testWidgets ('page builds; muted user displayed as muted' , (tester) async {
289
+ Finder avatarFinder (String url) => find.descendant (
290
+ of: find.byType (AvatarShape ),
291
+ matching: find.byWidgetPredicate ((widget) => switch (widget) {
292
+ RealmContentNetworkImage (: final src) => src == store.realmUrl.resolve (url),
293
+ _ => false ,
294
+ }));
295
+
296
+ final users = [
297
+ eg.user (userId: 1 , profileData: {
298
+ 0 : ProfileFieldUserData (value: '[2,3]' ),
299
+ }),
300
+ eg.user (userId: 2 , fullName: 'test user2' , avatarUrl: '/foo.png' ),
301
+ eg.user (userId: 3 , fullName: 'test user3' , avatarUrl: '/bar.png' ),
302
+ ];
303
+
304
+ prepareBoringImageHttpClient ();
305
+
306
+ await setupPage (tester,
307
+ users: users,
308
+ mutedUserIds: [2 ],
309
+ pageUserId: 1 ,
310
+ customProfileFields: [mkCustomProfileField (0 , CustomProfileFieldType .user)],
311
+ );
312
+
313
+ final localizations = GlobalLocalizations .zulipLocalizations;
314
+ check (find.text (localizations.mutedUser)).findsOne ();
315
+ check (find.byIcon (ZulipIcons .person)).findsOne ();
316
+ check (avatarFinder ('/foo.png' )).findsNothing ();
317
+
318
+ check (find.text ('test user3' )).findsOne ();
319
+ check (avatarFinder ('/bar.png' )).findsOne ();
320
+
321
+ debugNetworkImageHttpClientProvider = null ;
322
+ });
323
+
279
324
testWidgets ('page builds; ensure long name does not overflow' , (tester) async {
280
325
final longString = 'X' * 400 ;
281
326
final user = eg.user (userId: 1 , fullName: longString);
0 commit comments