@@ -42,27 +42,14 @@ void main() {
42
42
late ComposeBoxController ? controller;
43
43
44
44
Future <void > prepareComposeBox (WidgetTester tester, {
45
+ required Account account,
45
46
required Narrow narrow,
46
- User ? selfUser,
47
- List <User > users = const [],
48
- List <ZulipStream > streams = const [],
49
47
}) async {
50
48
if (narrow case ChannelNarrow (: var streamId) || TopicNarrow (: var streamId)) {
51
- assert (streams.any ((stream) => stream.streamId == streamId),
49
+ assert (store. streams.values .any ((stream) => stream.streamId == streamId),
52
50
'Add a channel with "streamId" the same as of $narrow .streamId to the store.' );
53
51
}
54
- addTearDown (testBinding.reset);
55
- selfUser ?? = eg.selfUser;
56
- final selfAccount = eg.account (user: selfUser);
57
- await testBinding.globalStore.add (selfAccount, eg.initialSnapshot ());
58
-
59
- store = await testBinding.globalStore.perAccount (selfAccount.id);
60
-
61
- await store.addUsers ([selfUser, ...users]);
62
- await store.addStreams (streams);
63
- connection = store.connection as FakeApiConnection ;
64
-
65
- await tester.pumpWidget (TestZulipApp (accountId: selfAccount.id,
52
+ await tester.pumpWidget (TestZulipApp (accountId: account.id,
66
53
child: Column (
67
54
// This positions the compose box at the bottom of the screen,
68
55
// simulating the layout of the message list page.
@@ -75,6 +62,25 @@ void main() {
75
62
controller = tester.state <ComposeBoxState >(find.byType (ComposeBox )).controller;
76
63
}
77
64
65
+ Future <void > prepare (WidgetTester tester, {
66
+ required Narrow narrow,
67
+ User ? selfUser,
68
+ List <User > users = const [],
69
+ List <ZulipStream > streams = const [],
70
+ }) async {
71
+ addTearDown (testBinding.reset);
72
+ selfUser ?? = eg.selfUser;
73
+ final selfAccount = eg.account (user: selfUser);
74
+ await testBinding.globalStore.add (selfAccount, eg.initialSnapshot ());
75
+
76
+ store = await testBinding.globalStore.perAccount (selfAccount.id);
77
+
78
+ await store.addUsers ([selfUser, ...users]);
79
+ await store.addStreams (streams);
80
+ connection = store.connection as FakeApiConnection ;
81
+ await prepareComposeBox (tester, account: selfAccount, narrow: narrow);
82
+ }
83
+
78
84
/// Set the topic input's text to [topic] , using [WidgetTester.enterText] .
79
85
Future <void > enterTopic (WidgetTester tester, {
80
86
required ChannelNarrow narrow,
@@ -236,7 +242,7 @@ void main() {
236
242
addTearDown (TypingNotifier .debugReset);
237
243
238
244
final narrow = ChannelNarrow (channel.streamId);
239
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
245
+ await prepare (tester, narrow: narrow, streams: [channel]);
240
246
await enterTopic (tester, narrow: narrow, topic: 'some topic' );
241
247
await enterContent (tester, content);
242
248
}
@@ -273,7 +279,7 @@ void main() {
273
279
addTearDown (TypingNotifier .debugReset);
274
280
275
281
final narrow = ChannelNarrow (channel.streamId);
276
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
282
+ await prepare (tester, narrow: narrow, streams: [channel]);
277
283
await enterTopic (tester, narrow: narrow, topic: topic);
278
284
await enterContent (tester, 'some content' );
279
285
}
@@ -331,14 +337,14 @@ void main() {
331
337
332
338
testWidgets ('_StreamComposeBox' , (tester) async {
333
339
final channel = eg.stream ();
334
- await prepareComposeBox (tester,
340
+ await prepare (tester,
335
341
narrow: ChannelNarrow (channel.streamId), streams: [channel]);
336
342
checkComposeBoxTextFields (tester, expectTopicTextField: true );
337
343
});
338
344
339
345
testWidgets ('_FixedDestinationComposeBox' , (tester) async {
340
346
final channel = eg.stream ();
341
- await prepareComposeBox (tester,
347
+ await prepare (tester,
342
348
narrow: eg.topicNarrow (channel.streamId, 'topic' ), streams: [channel]);
343
349
checkComposeBoxTextFields (tester, expectTopicTextField: false );
344
350
});
@@ -358,7 +364,7 @@ void main() {
358
364
}
359
365
360
366
testWidgets ('smoke TopicNarrow' , (tester) async {
361
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
367
+ await prepare (tester, narrow: narrow, streams: [channel]);
362
368
363
369
await checkStartTyping (tester, narrow);
364
370
@@ -370,7 +376,7 @@ void main() {
370
376
testWidgets ('smoke DmNarrow' , (tester) async {
371
377
final narrow = DmNarrow .withUsers (
372
378
[eg.otherUser.userId], selfUserId: eg.selfUser.userId);
373
- await prepareComposeBox (tester, narrow: narrow);
379
+ await prepare (tester, narrow: narrow);
374
380
375
381
await checkStartTyping (tester, narrow);
376
382
@@ -382,7 +388,7 @@ void main() {
382
388
testWidgets ('smoke ChannelNarrow' , (tester) async {
383
389
final narrow = ChannelNarrow (channel.streamId);
384
390
final destinationNarrow = eg.topicNarrow (narrow.streamId, 'test topic' );
385
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
391
+ await prepare (tester, narrow: narrow, streams: [channel]);
386
392
await enterTopic (tester, narrow: narrow, topic: 'test topic' );
387
393
388
394
await checkStartTyping (tester, destinationNarrow);
@@ -393,7 +399,7 @@ void main() {
393
399
});
394
400
395
401
testWidgets ('clearing text sends a "typing stopped" notice' , (tester) async {
396
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
402
+ await prepare (tester, narrow: narrow, streams: [channel]);
397
403
398
404
await checkStartTyping (tester, narrow);
399
405
@@ -403,7 +409,7 @@ void main() {
403
409
});
404
410
405
411
testWidgets ('hitting send button sends a "typing stopped" notice' , (tester) async {
406
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
412
+ await prepare (tester, narrow: narrow, streams: [channel]);
407
413
408
414
await checkStartTyping (tester, narrow);
409
415
@@ -449,7 +455,7 @@ void main() {
449
455
testWidgets ('for content input, unfocusing sends a "typing stopped" notice' , (tester) async {
450
456
final narrow = ChannelNarrow (channel.streamId);
451
457
final destinationNarrow = eg.topicNarrow (narrow.streamId, 'test topic' );
452
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
458
+ await prepare (tester, narrow: narrow, streams: [channel]);
453
459
await enterTopic (tester, narrow: narrow, topic: 'test topic' );
454
460
455
461
await checkStartTyping (tester, destinationNarrow);
@@ -461,7 +467,7 @@ void main() {
461
467
});
462
468
463
469
testWidgets ('selection change sends a "typing started" notice' , (tester) async {
464
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
470
+ await prepare (tester, narrow: narrow, streams: [channel]);
465
471
466
472
await checkStartTyping (tester, narrow);
467
473
@@ -481,7 +487,7 @@ void main() {
481
487
});
482
488
483
489
testWidgets ('unfocusing app sends a "typing stopped" notice' , (tester) async {
484
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
490
+ await prepare (tester, narrow: narrow, streams: [channel]);
485
491
486
492
await checkStartTyping (tester, narrow);
487
493
@@ -511,7 +517,7 @@ void main() {
511
517
addTearDown (TypingNotifier .debugReset);
512
518
513
519
final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
514
- await prepareComposeBox (tester, narrow: eg.topicNarrow (123 , 'some topic' ),
520
+ await prepare (tester, narrow: eg.topicNarrow (123 , 'some topic' ),
515
521
streams: [eg.stream (streamId: 123 )]);
516
522
517
523
await enterContent (tester, 'hello world' );
@@ -579,7 +585,7 @@ void main() {
579
585
580
586
final channel = eg.stream ();
581
587
final narrow = ChannelNarrow (channel.streamId);
582
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
588
+ await prepare (tester, narrow: narrow, streams: [channel]);
583
589
584
590
// (When we check that the send button looks disabled, it should be because
585
591
// the file is uploading, not a pre-existing reason.)
@@ -638,7 +644,7 @@ void main() {
638
644
639
645
final channel = eg.stream ();
640
646
final narrow = ChannelNarrow (channel.streamId);
641
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
647
+ await prepare (tester, narrow: narrow, streams: [channel]);
642
648
643
649
// (When we check that the send button looks disabled, it should be because
644
650
// the file is uploading, not a pre-existing reason.)
@@ -745,15 +751,15 @@ void main() {
745
751
group ('1:1 DMs' , () {
746
752
testWidgets ('compose box replaced with a banner' , (tester) async {
747
753
final deactivatedUser = eg.user (isActive: false );
748
- await prepareComposeBox (tester, narrow: dmNarrowWith (deactivatedUser),
754
+ await prepare (tester, narrow: dmNarrowWith (deactivatedUser),
749
755
users: [deactivatedUser]);
750
756
checkComposeBox (isShown: false );
751
757
});
752
758
753
759
testWidgets ('active user becomes deactivated -> '
754
760
'compose box is replaced with a banner' , (tester) async {
755
761
final activeUser = eg.user (isActive: true );
756
- await prepareComposeBox (tester, narrow: dmNarrowWith (activeUser),
762
+ await prepare (tester, narrow: dmNarrowWith (activeUser),
757
763
users: [activeUser]);
758
764
checkComposeBox (isShown: true );
759
765
@@ -764,7 +770,7 @@ void main() {
764
770
testWidgets ('deactivated user becomes active -> '
765
771
'banner is replaced with the compose box' , (tester) async {
766
772
final deactivatedUser = eg.user (isActive: false );
767
- await prepareComposeBox (tester, narrow: dmNarrowWith (deactivatedUser),
773
+ await prepare (tester, narrow: dmNarrowWith (deactivatedUser),
768
774
users: [deactivatedUser]);
769
775
checkComposeBox (isShown: false );
770
776
@@ -776,15 +782,15 @@ void main() {
776
782
group ('group DMs' , () {
777
783
testWidgets ('compose box replaced with a banner' , (tester) async {
778
784
final deactivatedUsers = [eg.user (isActive: false ), eg.user (isActive: false )];
779
- await prepareComposeBox (tester, narrow: groupDmNarrowWith (deactivatedUsers),
785
+ await prepare (tester, narrow: groupDmNarrowWith (deactivatedUsers),
780
786
users: deactivatedUsers);
781
787
checkComposeBox (isShown: false );
782
788
});
783
789
784
790
testWidgets ('at least one user becomes deactivated -> '
785
791
'compose box is replaced with a banner' , (tester) async {
786
792
final activeUsers = [eg.user (isActive: true ), eg.user (isActive: true )];
787
- await prepareComposeBox (tester, narrow: groupDmNarrowWith (activeUsers),
793
+ await prepare (tester, narrow: groupDmNarrowWith (activeUsers),
788
794
users: activeUsers);
789
795
checkComposeBox (isShown: true );
790
796
@@ -795,7 +801,7 @@ void main() {
795
801
testWidgets ('all deactivated users become active -> '
796
802
'banner is replaced with the compose box' , (tester) async {
797
803
final deactivatedUsers = [eg.user (isActive: false ), eg.user (isActive: false )];
798
- await prepareComposeBox (tester, narrow: groupDmNarrowWith (deactivatedUsers),
804
+ await prepare (tester, narrow: groupDmNarrowWith (deactivatedUsers),
799
805
users: deactivatedUsers);
800
806
checkComposeBox (isShown: false );
801
807
@@ -819,7 +825,7 @@ void main() {
819
825
820
826
for (final (String narrowType, Narrow narrow) in narrowTestCases) {
821
827
testWidgets ('compose box is shown in $narrowType narrow' , (tester) async {
822
- await prepareComposeBox (tester,
828
+ await prepare (tester,
823
829
narrow: narrow,
824
830
selfUser: eg.user (role: UserRole .administrator),
825
831
streams: [eg.stream (streamId: 1 ,
@@ -828,7 +834,7 @@ void main() {
828
834
});
829
835
830
836
testWidgets ('error banner is shown in $narrowType narrow' , (tester) async {
831
- await prepareComposeBox (tester,
837
+ await prepare (tester,
832
838
narrow: narrow,
833
839
selfUser: eg.user (role: UserRole .moderator),
834
840
streams: [eg.stream (streamId: 1 ,
@@ -839,7 +845,7 @@ void main() {
839
845
840
846
testWidgets ('user loses privilege -> compose box is replaced with the banner' , (tester) async {
841
847
final selfUser = eg.user (role: UserRole .administrator);
842
- await prepareComposeBox (tester,
848
+ await prepare (tester,
843
849
narrow: const ChannelNarrow (1 ),
844
850
selfUser: selfUser,
845
851
streams: [eg.stream (streamId: 1 ,
@@ -854,7 +860,7 @@ void main() {
854
860
855
861
testWidgets ('user gains privilege -> banner is replaced with the compose box' , (tester) async {
856
862
final selfUser = eg.user (role: UserRole .guest);
857
- await prepareComposeBox (tester,
863
+ await prepare (tester,
858
864
narrow: const ChannelNarrow (1 ),
859
865
selfUser: selfUser,
860
866
streams: [eg.stream (streamId: 1 ,
@@ -872,7 +878,7 @@ void main() {
872
878
final channel = eg.stream (streamId: 1 ,
873
879
channelPostPolicy: ChannelPostPolicy .any);
874
880
875
- await prepareComposeBox (tester,
881
+ await prepare (tester,
876
882
narrow: const ChannelNarrow (1 ),
877
883
selfUser: selfUser,
878
884
streams: [channel]);
@@ -890,7 +896,7 @@ void main() {
890
896
final channel = eg.stream (streamId: 1 ,
891
897
channelPostPolicy: ChannelPostPolicy .administrators);
892
898
893
- await prepareComposeBox (tester,
899
+ await prepare (tester,
894
900
narrow: const ChannelNarrow (1 ),
895
901
selfUser: selfUser,
896
902
streams: [channel]);
@@ -937,7 +943,7 @@ void main() {
937
943
}
938
944
939
945
testWidgets ('normal text scale factor' , (tester) async {
940
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
946
+ await prepare (tester, narrow: narrow, streams: [stream]);
941
947
942
948
await checkContentInputMaxHeight (tester,
943
949
maxHeight: verticalPadding + 170 , maxVisibleLines: 8 );
@@ -946,23 +952,23 @@ void main() {
946
952
testWidgets ('lower text scale factor' , (tester) async {
947
953
tester.platformDispatcher.textScaleFactorTestValue = 0.8 ;
948
954
addTearDown (tester.platformDispatcher.clearTextScaleFactorTestValue);
949
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
955
+ await prepare (tester, narrow: narrow, streams: [stream]);
950
956
await checkContentInputMaxHeight (tester,
951
957
maxHeight: verticalPadding + 170 * 0.8 , maxVisibleLines: 8 );
952
958
});
953
959
954
960
testWidgets ('higher text scale factor' , (tester) async {
955
961
tester.platformDispatcher.textScaleFactorTestValue = 1.5 ;
956
962
addTearDown (tester.platformDispatcher.clearTextScaleFactorTestValue);
957
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
963
+ await prepare (tester, narrow: narrow, streams: [stream]);
958
964
await checkContentInputMaxHeight (tester,
959
965
maxHeight: verticalPadding + 170 * 1.5 , maxVisibleLines: 8 );
960
966
});
961
967
962
968
testWidgets ('higher text scale factor exceeding threshold' , (tester) async {
963
969
tester.platformDispatcher.textScaleFactorTestValue = 2 ;
964
970
addTearDown (tester.platformDispatcher.clearTextScaleFactorTestValue);
965
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
971
+ await prepare (tester, narrow: narrow, streams: [stream]);
966
972
await checkContentInputMaxHeight (tester,
967
973
maxHeight: verticalPadding + 170 * 1.5 , maxVisibleLines: 6 );
968
974
});
0 commit comments