Skip to content

Commit 81e2c9d

Browse files
committed
compose box test: Test that message-send request is made on send-button tap
1 parent 495a57d commit 81e2c9d

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

test/widgets/compose_box_test.dart

+48
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,34 @@
11
import 'package:checks/checks.dart';
2+
import 'package:http/http.dart' as http;
23
import 'package:flutter/material.dart';
34
import 'package:flutter_gen/gen_l10n/zulip_localizations.dart';
45
import 'package:flutter_test/flutter_test.dart';
6+
import 'package:zulip/api/route/messages.dart';
7+
import 'package:zulip/model/localizations.dart';
58
import 'package:zulip/model/narrow.dart';
9+
import 'package:zulip/model/store.dart';
610
import 'package:zulip/widgets/compose_box.dart';
711
import 'package:zulip/widgets/store.dart';
812

13+
import '../api/fake_api.dart';
914
import '../example_data.dart' as eg;
1015
import '../flutter_checks.dart';
1116
import '../model/binding.dart';
17+
import '../stdlib_checks.dart';
1218

1319
void main() {
1420
TestZulipBinding.ensureInitialized();
1521

22+
late PerAccountStore store;
23+
late FakeApiConnection connection;
24+
1625
Future<GlobalKey<ComposeBoxController>> prepareComposeBox(WidgetTester tester, Narrow narrow) async {
1726
addTearDown(testBinding.reset);
1827
await testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot());
1928

29+
store = await testBinding.globalStore.perAccount(eg.selfAccount.id);
30+
connection = store.connection as FakeApiConnection;
31+
2032
final controllerKey = GlobalKey<ComposeBoxController>();
2133
await tester.pumpWidget(
2234
MaterialApp(
@@ -171,4 +183,40 @@ void main() {
171183
expectTopicTextField: false);
172184
});
173185
});
186+
187+
group('message-send request response', () {
188+
Future<void> setupAndTapSend(WidgetTester tester, {
189+
required void Function(int messageId) prepareResponse,
190+
}) async {
191+
final zulipLocalizations = GlobalLocalizations.zulipLocalizations;
192+
await prepareComposeBox(tester, const TopicNarrow(123, 'some topic'));
193+
194+
final contentInputFinder = find.byWidgetPredicate(
195+
(widget) => widget is TextField && widget.controller is ComposeContentController);
196+
await tester.enterText(contentInputFinder, 'hello world');
197+
198+
prepareResponse(456);
199+
await tester.tap(find.byTooltip(zulipLocalizations.composeBoxSendTooltip));
200+
await tester.pump(Duration.zero);
201+
202+
check(connection.lastRequest).isA<http.Request>()
203+
..method.equals('POST')
204+
..url.path.equals('/api/v1/messages')
205+
..bodyFields.deepEquals({
206+
'type': 'stream',
207+
'to': '123',
208+
'topic': 'some topic',
209+
'content': 'hello world',
210+
'read_by_sender': 'true',
211+
});
212+
}
213+
214+
testWidgets('success', (tester) async {
215+
await setupAndTapSend(tester, prepareResponse: (int messageId) {
216+
connection.prepare(json: SendMessageResult(id: messageId).toJson());
217+
});
218+
final errorDialogs = tester.widgetList(find.byType(AlertDialog));
219+
check(errorDialogs).isEmpty();
220+
});
221+
});
174222
}

0 commit comments

Comments
 (0)