@@ -45,27 +45,14 @@ void main() {
45
45
(widget) => widget is TextField && widget.controller is ComposeContentController );
46
46
47
47
Future <void > prepareComposeBox (WidgetTester tester, {
48
+ required Account account,
48
49
required Narrow narrow,
49
- User ? selfUser,
50
- List <User > users = const [],
51
- List <ZulipStream > streams = const [],
52
50
}) async {
53
51
if (narrow case ChannelNarrow (: var streamId) || TopicNarrow (: var streamId)) {
54
- assert (streams.any ((stream) => stream.streamId == streamId),
52
+ assert (store. streams.values .any ((stream) => stream.streamId == streamId),
55
53
'Add a channel with "streamId" the same as of $narrow .streamId to the store.' );
56
54
}
57
- addTearDown (testBinding.reset);
58
- selfUser ?? = eg.selfUser;
59
- final selfAccount = eg.account (user: selfUser);
60
- await testBinding.globalStore.add (selfAccount, eg.initialSnapshot ());
61
-
62
- store = await testBinding.globalStore.perAccount (selfAccount.id);
63
-
64
- await store.addUsers ([selfUser, ...users]);
65
- await store.addStreams (streams);
66
- connection = store.connection as FakeApiConnection ;
67
-
68
- await tester.pumpWidget (TestZulipApp (accountId: selfAccount.id,
55
+ await tester.pumpWidget (TestZulipApp (accountId: account.id,
69
56
child: Column (
70
57
// This positions the compose box at the bottom of the screen,
71
58
// simulating the layout of the message list page.
@@ -78,6 +65,25 @@ void main() {
78
65
controller = tester.state <ComposeBoxState >(find.byType (ComposeBox )).controller;
79
66
}
80
67
68
+ Future <void > prepare (WidgetTester tester, {
69
+ required Narrow narrow,
70
+ User ? selfUser,
71
+ List <User > users = const [],
72
+ List <ZulipStream > streams = const [],
73
+ }) async {
74
+ addTearDown (testBinding.reset);
75
+ selfUser ?? = eg.selfUser;
76
+ final selfAccount = eg.account (user: selfUser);
77
+ await testBinding.globalStore.add (selfAccount, eg.initialSnapshot ());
78
+
79
+ store = await testBinding.globalStore.perAccount (selfAccount.id);
80
+
81
+ await store.addUsers ([selfUser, ...users]);
82
+ await store.addStreams (streams);
83
+ connection = store.connection as FakeApiConnection ;
84
+ await prepareComposeBox (tester, account: selfAccount, narrow: narrow);
85
+ }
86
+
81
87
Future <void > enterTopic (WidgetTester tester, {
82
88
required ChannelNarrow narrow,
83
89
required String topic,
@@ -220,14 +226,14 @@ void main() {
220
226
221
227
testWidgets ('_StreamComposeBox' , (tester) async {
222
228
final channel = eg.stream ();
223
- await prepareComposeBox (tester,
229
+ await prepare (tester,
224
230
narrow: ChannelNarrow (channel.streamId), streams: [channel]);
225
231
checkComposeBoxTextFields (tester, expectTopicTextField: true );
226
232
});
227
233
228
234
testWidgets ('_FixedDestinationComposeBox' , (tester) async {
229
235
final channel = eg.stream ();
230
- await prepareComposeBox (tester,
236
+ await prepare (tester,
231
237
narrow: eg.topicNarrow (channel.streamId, 'topic' ), streams: [channel]);
232
238
checkComposeBoxTextFields (tester, expectTopicTextField: false );
233
239
});
@@ -247,7 +253,7 @@ void main() {
247
253
}
248
254
249
255
testWidgets ('smoke TopicNarrow' , (tester) async {
250
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
256
+ await prepare (tester, narrow: narrow, streams: [channel]);
251
257
252
258
await checkStartTyping (tester, narrow);
253
259
@@ -259,7 +265,7 @@ void main() {
259
265
testWidgets ('smoke DmNarrow' , (tester) async {
260
266
final narrow = DmNarrow .withUsers (
261
267
[eg.otherUser.userId], selfUserId: eg.selfUser.userId);
262
- await prepareComposeBox (tester, narrow: narrow);
268
+ await prepare (tester, narrow: narrow);
263
269
264
270
await checkStartTyping (tester, narrow);
265
271
@@ -271,7 +277,7 @@ void main() {
271
277
testWidgets ('smoke ChannelNarrow' , (tester) async {
272
278
final narrow = ChannelNarrow (channel.streamId);
273
279
final destinationNarrow = eg.topicNarrow (narrow.streamId, 'test topic' );
274
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
280
+ await prepare (tester, narrow: narrow, streams: [channel]);
275
281
await enterTopic (tester, narrow: narrow, topic: 'test topic' );
276
282
277
283
await checkStartTyping (tester, destinationNarrow);
@@ -282,7 +288,7 @@ void main() {
282
288
});
283
289
284
290
testWidgets ('clearing text sends a "typing stopped" notice' , (tester) async {
285
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
291
+ await prepare (tester, narrow: narrow, streams: [channel]);
286
292
287
293
await checkStartTyping (tester, narrow);
288
294
@@ -292,7 +298,7 @@ void main() {
292
298
});
293
299
294
300
testWidgets ('hitting send button sends a "typing stopped" notice' , (tester) async {
295
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
301
+ await prepare (tester, narrow: narrow, streams: [channel]);
296
302
297
303
await checkStartTyping (tester, narrow);
298
304
@@ -338,7 +344,7 @@ void main() {
338
344
testWidgets ('for content input, unfocusing sends a "typing stopped" notice' , (tester) async {
339
345
final narrow = ChannelNarrow (channel.streamId);
340
346
final destinationNarrow = eg.topicNarrow (narrow.streamId, 'test topic' );
341
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
347
+ await prepare (tester, narrow: narrow, streams: [channel]);
342
348
await enterTopic (tester, narrow: narrow, topic: 'test topic' );
343
349
344
350
await checkStartTyping (tester, destinationNarrow);
@@ -350,7 +356,7 @@ void main() {
350
356
});
351
357
352
358
testWidgets ('selection change sends a "typing started" notice' , (tester) async {
353
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
359
+ await prepare (tester, narrow: narrow, streams: [channel]);
354
360
355
361
await checkStartTyping (tester, narrow);
356
362
@@ -370,7 +376,7 @@ void main() {
370
376
});
371
377
372
378
testWidgets ('unfocusing app sends a "typing stopped" notice' , (tester) async {
373
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
379
+ await prepare (tester, narrow: narrow, streams: [channel]);
374
380
375
381
await checkStartTyping (tester, narrow);
376
382
@@ -400,7 +406,7 @@ void main() {
400
406
addTearDown (TypingNotifier .debugReset);
401
407
402
408
final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
403
- await prepareComposeBox (tester, narrow: eg.topicNarrow (123 , 'some topic' ),
409
+ await prepare (tester, narrow: eg.topicNarrow (123 , 'some topic' ),
404
410
streams: [eg.stream (streamId: 123 )]);
405
411
406
412
await tester.enterText (contentInputFinder, 'hello world' );
@@ -469,7 +475,7 @@ void main() {
469
475
470
476
final channel = eg.stream ();
471
477
final narrow = ChannelNarrow (channel.streamId);
472
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
478
+ await prepare (tester, narrow: narrow, streams: [channel]);
473
479
474
480
// (When we check that the send button looks disabled, it should be because
475
481
// the file is uploading, not a pre-existing reason.)
@@ -529,7 +535,7 @@ void main() {
529
535
530
536
final channel = eg.stream ();
531
537
final narrow = ChannelNarrow (channel.streamId);
532
- await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
538
+ await prepare (tester, narrow: narrow, streams: [channel]);
533
539
534
540
// (When we check that the send button looks disabled, it should be because
535
541
// the file is uploading, not a pre-existing reason.)
@@ -637,15 +643,15 @@ void main() {
637
643
group ('1:1 DMs' , () {
638
644
testWidgets ('compose box replaced with a banner' , (tester) async {
639
645
final deactivatedUser = eg.user (isActive: false );
640
- await prepareComposeBox (tester, narrow: dmNarrowWith (deactivatedUser),
646
+ await prepare (tester, narrow: dmNarrowWith (deactivatedUser),
641
647
users: [deactivatedUser]);
642
648
checkComposeBox (isShown: false );
643
649
});
644
650
645
651
testWidgets ('active user becomes deactivated -> '
646
652
'compose box is replaced with a banner' , (tester) async {
647
653
final activeUser = eg.user (isActive: true );
648
- await prepareComposeBox (tester, narrow: dmNarrowWith (activeUser),
654
+ await prepare (tester, narrow: dmNarrowWith (activeUser),
649
655
users: [activeUser]);
650
656
checkComposeBox (isShown: true );
651
657
@@ -656,7 +662,7 @@ void main() {
656
662
testWidgets ('deactivated user becomes active -> '
657
663
'banner is replaced with the compose box' , (tester) async {
658
664
final deactivatedUser = eg.user (isActive: false );
659
- await prepareComposeBox (tester, narrow: dmNarrowWith (deactivatedUser),
665
+ await prepare (tester, narrow: dmNarrowWith (deactivatedUser),
660
666
users: [deactivatedUser]);
661
667
checkComposeBox (isShown: false );
662
668
@@ -668,15 +674,15 @@ void main() {
668
674
group ('group DMs' , () {
669
675
testWidgets ('compose box replaced with a banner' , (tester) async {
670
676
final deactivatedUsers = [eg.user (isActive: false ), eg.user (isActive: false )];
671
- await prepareComposeBox (tester, narrow: groupDmNarrowWith (deactivatedUsers),
677
+ await prepare (tester, narrow: groupDmNarrowWith (deactivatedUsers),
672
678
users: deactivatedUsers);
673
679
checkComposeBox (isShown: false );
674
680
});
675
681
676
682
testWidgets ('at least one user becomes deactivated -> '
677
683
'compose box is replaced with a banner' , (tester) async {
678
684
final activeUsers = [eg.user (isActive: true ), eg.user (isActive: true )];
679
- await prepareComposeBox (tester, narrow: groupDmNarrowWith (activeUsers),
685
+ await prepare (tester, narrow: groupDmNarrowWith (activeUsers),
680
686
users: activeUsers);
681
687
checkComposeBox (isShown: true );
682
688
@@ -687,7 +693,7 @@ void main() {
687
693
testWidgets ('all deactivated users become active -> '
688
694
'banner is replaced with the compose box' , (tester) async {
689
695
final deactivatedUsers = [eg.user (isActive: false ), eg.user (isActive: false )];
690
- await prepareComposeBox (tester, narrow: groupDmNarrowWith (deactivatedUsers),
696
+ await prepare (tester, narrow: groupDmNarrowWith (deactivatedUsers),
691
697
users: deactivatedUsers);
692
698
checkComposeBox (isShown: false );
693
699
@@ -711,7 +717,7 @@ void main() {
711
717
712
718
for (final (String narrowType, Narrow narrow) in narrowTestCases) {
713
719
testWidgets ('compose box is shown in $narrowType narrow' , (tester) async {
714
- await prepareComposeBox (tester,
720
+ await prepare (tester,
715
721
narrow: narrow,
716
722
selfUser: eg.user (role: UserRole .administrator),
717
723
streams: [eg.stream (streamId: 1 ,
@@ -720,7 +726,7 @@ void main() {
720
726
});
721
727
722
728
testWidgets ('error banner is shown in $narrowType narrow' , (tester) async {
723
- await prepareComposeBox (tester,
729
+ await prepare (tester,
724
730
narrow: narrow,
725
731
selfUser: eg.user (role: UserRole .moderator),
726
732
streams: [eg.stream (streamId: 1 ,
@@ -731,7 +737,7 @@ void main() {
731
737
732
738
testWidgets ('user loses privilege -> compose box is replaced with the banner' , (tester) async {
733
739
final selfUser = eg.user (role: UserRole .administrator);
734
- await prepareComposeBox (tester,
740
+ await prepare (tester,
735
741
narrow: const ChannelNarrow (1 ),
736
742
selfUser: selfUser,
737
743
streams: [eg.stream (streamId: 1 ,
@@ -746,7 +752,7 @@ void main() {
746
752
747
753
testWidgets ('user gains privilege -> banner is replaced with the compose box' , (tester) async {
748
754
final selfUser = eg.user (role: UserRole .guest);
749
- await prepareComposeBox (tester,
755
+ await prepare (tester,
750
756
narrow: const ChannelNarrow (1 ),
751
757
selfUser: selfUser,
752
758
streams: [eg.stream (streamId: 1 ,
@@ -764,7 +770,7 @@ void main() {
764
770
final channel = eg.stream (streamId: 1 ,
765
771
channelPostPolicy: ChannelPostPolicy .any);
766
772
767
- await prepareComposeBox (tester,
773
+ await prepare (tester,
768
774
narrow: const ChannelNarrow (1 ),
769
775
selfUser: selfUser,
770
776
streams: [channel]);
@@ -782,7 +788,7 @@ void main() {
782
788
final channel = eg.stream (streamId: 1 ,
783
789
channelPostPolicy: ChannelPostPolicy .administrators);
784
790
785
- await prepareComposeBox (tester,
791
+ await prepare (tester,
786
792
narrow: const ChannelNarrow (1 ),
787
793
selfUser: selfUser,
788
794
streams: [channel]);
@@ -829,7 +835,7 @@ void main() {
829
835
}
830
836
831
837
testWidgets ('normal text scale factor' , (tester) async {
832
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
838
+ await prepare (tester, narrow: narrow, streams: [stream]);
833
839
834
840
await checkContentInputMaxHeight (tester,
835
841
maxHeight: verticalPadding + 170 , maxVisibleLines: 8 );
@@ -838,23 +844,23 @@ void main() {
838
844
testWidgets ('lower text scale factor' , (tester) async {
839
845
tester.platformDispatcher.textScaleFactorTestValue = 0.8 ;
840
846
addTearDown (tester.platformDispatcher.clearTextScaleFactorTestValue);
841
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
847
+ await prepare (tester, narrow: narrow, streams: [stream]);
842
848
await checkContentInputMaxHeight (tester,
843
849
maxHeight: verticalPadding + 170 * 0.8 , maxVisibleLines: 8 );
844
850
});
845
851
846
852
testWidgets ('higher text scale factor' , (tester) async {
847
853
tester.platformDispatcher.textScaleFactorTestValue = 1.5 ;
848
854
addTearDown (tester.platformDispatcher.clearTextScaleFactorTestValue);
849
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
855
+ await prepare (tester, narrow: narrow, streams: [stream]);
850
856
await checkContentInputMaxHeight (tester,
851
857
maxHeight: verticalPadding + 170 * 1.5 , maxVisibleLines: 8 );
852
858
});
853
859
854
860
testWidgets ('higher text scale factor exceeding threshold' , (tester) async {
855
861
tester.platformDispatcher.textScaleFactorTestValue = 2 ;
856
862
addTearDown (tester.platformDispatcher.clearTextScaleFactorTestValue);
857
- await prepareComposeBox (tester, narrow: narrow, streams: [stream]);
863
+ await prepare (tester, narrow: narrow, streams: [stream]);
858
864
await checkContentInputMaxHeight (tester,
859
865
maxHeight: verticalPadding + 170 * 1.5 , maxVisibleLines: 6 );
860
866
});
0 commit comments