Skip to content

Commit d2672ce

Browse files
committed
compose box test: Test that message-send request is made on send-button tap
1 parent 6f28582 commit d2672ce

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

test/widgets/compose_box_test.dart

+49
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,35 @@
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/model/model.dart';
7+
import 'package:zulip/api/route/messages.dart';
8+
import 'package:zulip/model/localizations.dart';
59
import 'package:zulip/model/narrow.dart';
10+
import 'package:zulip/model/store.dart';
611
import 'package:zulip/widgets/compose_box.dart';
712
import 'package:zulip/widgets/store.dart';
813

14+
import '../api/fake_api.dart';
915
import '../example_data.dart' as eg;
1016
import '../flutter_checks.dart';
1117
import '../model/binding.dart';
18+
import '../stdlib_checks.dart';
1219

1320
void main() {
1421
TestZulipBinding.ensureInitialized();
1522

23+
late PerAccountStore store;
24+
late FakeApiConnection connection;
25+
1626
Future<GlobalKey<ComposeBoxController>> prepareComposeBox(WidgetTester tester, Narrow narrow) async {
1727
addTearDown(testBinding.reset);
1828
await testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot());
1929

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

0 commit comments

Comments
 (0)