@@ -32,8 +32,18 @@ void main() {
32
32
late PerAccountStore store;
33
33
late FakeApiConnection connection;
34
34
35
- Future <GlobalKey <ComposeBoxController >> prepareComposeBox (WidgetTester tester,
36
- {required Narrow narrow, List <User > users = const []}) async {
35
+ final topicInputFinder = find.byWidgetPredicate (
36
+ (widget) => widget is TextField && widget.controller is ComposeTopicController );
37
+ final contentInputFinder = find.byWidgetPredicate (
38
+ (widget) => widget is TextField && widget.controller is ComposeContentController );
39
+
40
+ Future <GlobalKey <ComposeBoxController >> prepareComposeBox (
41
+ WidgetTester tester, {
42
+ required Narrow narrow,
43
+ String ? topic,
44
+ String ? content,
45
+ List <User > users = const [],
46
+ }) async {
37
47
addTearDown (testBinding.reset);
38
48
await testBinding.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
39
49
@@ -42,16 +52,26 @@ void main() {
42
52
await store.addUsers ([eg.selfUser, ...users]);
43
53
connection = store.connection as FakeApiConnection ;
44
54
45
- if (narrow is ChannelNarrow ) {
46
- // Ensure topics are loaded before testing actual logic.
47
- connection.prepare (body:
48
- jsonEncode (GetStreamTopicsResult (topics: [eg.getStreamTopicsEntry ()]).toJson ()));
49
- }
50
55
final controllerKey = GlobalKey <ComposeBoxController >();
51
56
await tester.pumpWidget (TestZulipApp (accountId: eg.selfAccount.id,
52
57
child: ComposeBox (controllerKey: controllerKey, narrow: narrow)));
53
58
await tester.pumpAndSettle ();
54
59
60
+ if (topic != null ) {
61
+ // The topic input is currently only available to ChannelNarrow.
62
+ narrow as ChannelNarrow ;
63
+ connection.prepare (body:
64
+ jsonEncode (GetStreamTopicsResult (topics: [eg.getStreamTopicsEntry ()]).toJson ()));
65
+ await tester.enterText (topicInputFinder, topic);
66
+ check (connection.takeRequests ()).single
67
+ ..method.equals ('GET' )
68
+ ..url.path.equals ('/api/v1/users/me/${narrow .streamId }/topics' );
69
+ }
70
+ if (content != null ) {
71
+ await tester.enterText (contentInputFinder, content);
72
+ }
73
+ await tester.pump ();
74
+
55
75
return controllerKey;
56
76
}
57
77
@@ -206,8 +226,6 @@ void main() {
206
226
final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
207
227
await prepareComposeBox (tester, narrow: const TopicNarrow (123 , 'some topic' ));
208
228
209
- final contentInputFinder = find.byWidgetPredicate (
210
- (widget) => widget is TextField && widget.controller is ComposeContentController );
211
229
await tester.enterText (contentInputFinder, 'hello world' );
212
230
213
231
prepareResponse (456 );
@@ -271,14 +289,12 @@ void main() {
271
289
TypingNotifier .debugEnable = false ;
272
290
addTearDown (TypingNotifier .debugReset);
273
291
274
- final controllerKey = await prepareComposeBox (tester, narrow: ChannelNarrow (eg.stream ().streamId));
292
+ final controllerKey = await prepareComposeBox (tester,
293
+ narrow: ChannelNarrow (eg.stream ().streamId),
294
+ topic: 'some topic' , content: 'see image: ' );
275
295
final composeBoxController = controllerKey.currentState! ;
276
-
277
296
// (When we check that the send button looks disabled, it should be because
278
297
// the file is uploading, not a pre-existing reason.)
279
- composeBoxController.topicController! .value = const TextEditingValue (text: 'some topic' );
280
- composeBoxController.contentController.value = const TextEditingValue (text: 'see image: ' );
281
- await tester.pump ();
282
298
checkAppearsLoading (tester, false );
283
299
284
300
testBinding.pickFilesResult = FilePickerResult ([PlatformFile (
@@ -330,14 +346,12 @@ void main() {
330
346
TypingNotifier .debugEnable = false ;
331
347
addTearDown (TypingNotifier .debugReset);
332
348
333
- final controllerKey = await prepareComposeBox (tester, narrow: ChannelNarrow (eg.stream ().streamId));
349
+ final controllerKey = await prepareComposeBox (tester,
350
+ narrow: ChannelNarrow (eg.stream ().streamId),
351
+ topic: 'some topic' , content: 'see image: ' );
334
352
final composeBoxController = controllerKey.currentState! ;
335
-
336
353
// (When we check that the send button looks disabled, it should be because
337
354
// the file is uploading, not a pre-existing reason.)
338
- composeBoxController.topicController! .value = const TextEditingValue (text: 'some topic' );
339
- composeBoxController.contentController.value = const TextEditingValue (text: 'see image: ' );
340
- await tester.pump ();
341
355
checkAppearsLoading (tester, false );
342
356
343
357
testBinding.pickImageResult = XFile .fromData (
0 commit comments