Skip to content

Commit 3f65665

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

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

test/widgets/compose_box_test.dart

+55
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,46 @@ void main() {
171184
expectTopicTextField: false);
172185
});
173186
});
187+
188+
group('message-send request response', () {
189+
Future<void> setupAndTapSend(WidgetTester tester, {
190+
required void Function(Message) prepareResponse,
191+
}) async {
192+
final zulipLocalizations = GlobalLocalizations.zulipLocalizations;
193+
final stream = eg.stream(streamId: 123);
194+
final message = eg.streamMessage(
195+
stream: stream,
196+
topic: 'some topic',
197+
content: 'hello world',
198+
);
199+
await prepareComposeBox(tester, TopicNarrow.ofMessage(message));
200+
201+
final contentInputFinder = find.byWidgetPredicate(
202+
(widget) => widget is TextField && widget.controller is ComposeContentController);
203+
await tester.enterText(contentInputFinder, 'hello world');
204+
205+
prepareResponse(message);
206+
await tester.tap(find.byTooltip(zulipLocalizations.composeBoxSendTooltip));
207+
await tester.pump(Duration.zero);
208+
209+
check(connection.lastRequest).isA<http.Request>()
210+
..method.equals('POST')
211+
..url.path.equals('/api/v1/messages')
212+
..bodyFields.deepEquals({
213+
'type': 'stream',
214+
'to': '123',
215+
'topic': 'some topic',
216+
'content': 'hello world',
217+
'read_by_sender': 'true',
218+
});
219+
}
220+
221+
testWidgets('success', (tester) async {
222+
await setupAndTapSend(tester, prepareResponse: (message) {
223+
connection.prepare(json: SendMessageResult(id: message.id).toJson());
224+
});
225+
final errorDialogs = tester.widgetList(find.byType(AlertDialog));
226+
check(errorDialogs).isEmpty();
227+
});
228+
});
174229
}

0 commit comments

Comments
 (0)