From d2672ce4c5b776d55476f97c1427a7512a62b468 Mon Sep 17 00:00:00 2001 From: Chris Bobbe Date: Wed, 17 Jul 2024 12:17:52 -0700 Subject: [PATCH] compose box test: Test that message-send request is made on send-button tap --- test/widgets/compose_box_test.dart | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/test/widgets/compose_box_test.dart b/test/widgets/compose_box_test.dart index 7908bb15b4..b64061ec91 100644 --- a/test/widgets/compose_box_test.dart +++ b/test/widgets/compose_box_test.dart @@ -1,22 +1,35 @@ import 'package:checks/checks.dart'; +import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/zulip_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:zulip/api/model/model.dart'; +import 'package:zulip/api/route/messages.dart'; +import 'package:zulip/model/localizations.dart'; import 'package:zulip/model/narrow.dart'; +import 'package:zulip/model/store.dart'; import 'package:zulip/widgets/compose_box.dart'; import 'package:zulip/widgets/store.dart'; +import '../api/fake_api.dart'; import '../example_data.dart' as eg; import '../flutter_checks.dart'; import '../model/binding.dart'; +import '../stdlib_checks.dart'; void main() { TestZulipBinding.ensureInitialized(); + late PerAccountStore store; + late FakeApiConnection connection; + Future> prepareComposeBox(WidgetTester tester, Narrow narrow) async { addTearDown(testBinding.reset); await testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot()); + store = await testBinding.globalStore.perAccount(eg.selfAccount.id); + connection = store.connection as FakeApiConnection; + final controllerKey = GlobalKey(); await tester.pumpWidget( MaterialApp( @@ -171,4 +184,40 @@ void main() { expectTopicTextField: false); }); }); + + group('message-send request response', () { + Future setupAndTapSend(WidgetTester tester, { + required void Function(int) prepareResponse, + }) async { + final zulipLocalizations = GlobalLocalizations.zulipLocalizations; + await prepareComposeBox(tester, const TopicNarrow(123, 'some topic')); + + final contentInputFinder = find.byWidgetPredicate( + (widget) => widget is TextField && widget.controller is ComposeContentController); + await tester.enterText(contentInputFinder, 'hello world'); + + prepareResponse(456); + await tester.tap(find.byTooltip(zulipLocalizations.composeBoxSendTooltip)); + await tester.pump(Duration.zero); + + check(connection.lastRequest).isA() + ..method.equals('POST') + ..url.path.equals('/api/v1/messages') + ..bodyFields.deepEquals({ + 'type': 'stream', + 'to': '123', + 'topic': 'some topic', + 'content': 'hello world', + 'read_by_sender': 'true', + }); + } + + testWidgets('success', (tester) async { + await setupAndTapSend(tester, prepareResponse: (int messageId) { + connection.prepare(json: SendMessageResult(id: messageId).toJson()); + }); + final errorDialogs = tester.widgetList(find.byType(AlertDialog)); + check(errorDialogs).isEmpty(); + }); + }); }