From 5d7c9fc13208d2b0856d862579b7cc51f3b53274 Mon Sep 17 00:00:00 2001 From: KhaledNjim <160496984+KhaledNjim@users.noreply.github.com> Date: Mon, 13 Jan 2025 23:48:35 +0100 Subject: [PATCH 1/3] TW-2206 added patrol test for sending text message --- .../robots/send_text_message_robot.dart | 5 ++++ .../scenarios/send_text_message_scenario.dart | 24 +++++++++++++++++++ .../tests/chat/send_text_message_test.dart | 24 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 integration_test/robots/send_text_message_robot.dart create mode 100644 integration_test/scenarios/send_text_message_scenario.dart create mode 100644 integration_test/tests/chat/send_text_message_test.dart diff --git a/integration_test/robots/send_text_message_robot.dart b/integration_test/robots/send_text_message_robot.dart new file mode 100644 index 000000000..70c1507b0 --- /dev/null +++ b/integration_test/robots/send_text_message_robot.dart @@ -0,0 +1,5 @@ +import '../base/core_robot.dart'; + +class SendTextMessageRobot extends CoreRobot { + SendTextMessageRobot(super.$); +} diff --git a/integration_test/scenarios/send_text_message_scenario.dart b/integration_test/scenarios/send_text_message_scenario.dart new file mode 100644 index 000000000..6ca9ef867 --- /dev/null +++ b/integration_test/scenarios/send_text_message_scenario.dart @@ -0,0 +1,24 @@ +import 'package:fluffychat/pages/chat/chat_input_row_send_btn.dart'; +import 'package:fluffychat/pages/chat/chat_view.dart'; +import 'package:fluffychat/pages/chat/input_bar/input_bar.dart'; +import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; +import 'package:flutter_test/flutter_test.dart'; +import '../base/base_scenario.dart'; +import 'login_scenario.dart'; + +class SendTextMessageScenario extends BaseScenario { + LoginScenario loginScenario; + SendTextMessageScenario( + super.$, { + required this.loginScenario, + }); + + @override + Future execute() async { + await loginScenario.execute(); + await $.tap($(ChatListItem)); + await $.waitUntilVisible($(ChatView)); + await $.enterText($(InputBar), "test message"); + await $.tap($(ChatInputRowSendBtn)); + } +} diff --git a/integration_test/tests/chat/send_text_message_test.dart b/integration_test/tests/chat/send_text_message_test.dart new file mode 100644 index 000000000..214f3826a --- /dev/null +++ b/integration_test/tests/chat/send_text_message_test.dart @@ -0,0 +1,24 @@ +import 'package:patrol/patrol.dart'; + +import '../../base/test_base.dart'; +import '../../scenarios/login_scenario.dart'; +import '../../scenarios/send_text_message_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see Message bubble after sending text message', + test: ($) async { + final loginScenario = LoginScenario( + $, + username: const String.fromEnvironment('USERNAME'), + serverUrl: const String.fromEnvironment('SERVER_URL'), + password: const String.fromEnvironment('PASSWORD'), + ); + final sendTextMessageScenario = SendTextMessageScenario( + $, + loginScenario: loginScenario, + ); + await sendTextMessageScenario.execute(); + }, + ); +} From fdd8b6acc6d74a891040e2e03729e1e20a1e1db4 Mon Sep 17 00:00:00 2001 From: "khaled.njim" Date: Tue, 21 Jan 2025 17:40:04 +0100 Subject: [PATCH 2/3] fixup! TW-2206 added patrol test for sending text message --- integration_test/base/test_base.dart | 5 ++++- integration_test/robots/login_robot.dart | 3 ++- .../robots/send_text_message_robot.dart | 21 +++++++++++++++++++ .../scenarios/login_scenario.dart | 11 ++++++++++ .../scenarios/send_text_message_scenario.dart | 16 ++++++++++---- .../tests/chat/send_text_message_test.dart | 2 -- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/integration_test/base/test_base.dart b/integration_test/base/test_base.dart index a40a8469b..127cddd37 100644 --- a/integration_test/base/test_base.dart +++ b/integration_test/base/test_base.dart @@ -15,7 +15,10 @@ class TestBase { visibleTimeout: Duration(minutes: 1), ), nativeAutomatorConfig: - nativeAutomatorConfig ?? const NativeAutomatorConfig(), + nativeAutomatorConfig ?? + const NativeAutomatorConfig( + keyboardBehavior: KeyboardBehavior.alternative, + ), framePolicy: LiveTestWidgetsFlutterBindingFramePolicy.fullyLive, ($) async { await initTwakeChat(); diff --git a/integration_test/robots/login_robot.dart b/integration_test/robots/login_robot.dart index db8e29c93..328b8716a 100644 --- a/integration_test/robots/login_robot.dart +++ b/integration_test/robots/login_robot.dart @@ -16,7 +16,8 @@ class LoginRobot extends CoreRobot { } } - Future tapOnUseYourCompanyServer() async { + Future + tapOnUseYourCompanyServer() async { await $('Use your company server').tap(); } diff --git a/integration_test/robots/send_text_message_robot.dart b/integration_test/robots/send_text_message_robot.dart index 70c1507b0..699352fce 100644 --- a/integration_test/robots/send_text_message_robot.dart +++ b/integration_test/robots/send_text_message_robot.dart @@ -1,5 +1,26 @@ +import 'package:fluffychat/pages/chat/chat_input_row_send_btn.dart'; +import 'package:fluffychat/pages/chat/input_bar/input_bar.dart'; +import 'package:flutter_test/flutter_test.dart'; + import '../base/core_robot.dart'; class SendTextMessageRobot extends CoreRobot { SendTextMessageRobot(super.$); + + Future enterTextMessage(String message) async { + try { + await $.enterText($(InputBar), message); + } catch (e) { + ignoreException(); + } + } + + Future tapOnSendButton() async { + try { + await $.tap($(ChatInputRowSendBtn)); + } catch (e) { + ignoreException(); + } + } + } diff --git a/integration_test/scenarios/login_scenario.dart b/integration_test/scenarios/login_scenario.dart index 1912fdb1c..d1f0193cc 100644 --- a/integration_test/scenarios/login_scenario.dart +++ b/integration_test/scenarios/login_scenario.dart @@ -1,6 +1,7 @@ import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart'; import 'package:fluffychat/pages/twake_welcome/twake_welcome.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:patrol/patrol.dart'; import '../base/base_scenario.dart'; @@ -34,6 +35,16 @@ class LoginScenario extends BaseScenario { await loginRobot.pressSignInSsoLogin(); await _handleWaitUntilVisibleHomeServerPickerView(loginRobot); await loginRobot.grantNotificationPermission($.nativeAutomator); + try{ + await $.tap( + find.descendant( + of: find.byType(AppBar), + matching: find.byType(IconButton), + ), + ); + }catch(e){ + loginRobot.ignoreException(); + } await expectViewVisible($(ChatList)); } diff --git a/integration_test/scenarios/send_text_message_scenario.dart b/integration_test/scenarios/send_text_message_scenario.dart index 6ca9ef867..cb046d9de 100644 --- a/integration_test/scenarios/send_text_message_scenario.dart +++ b/integration_test/scenarios/send_text_message_scenario.dart @@ -1,9 +1,10 @@ -import 'package:fluffychat/pages/chat/chat_input_row_send_btn.dart'; import 'package:fluffychat/pages/chat/chat_view.dart'; -import 'package:fluffychat/pages/chat/input_bar/input_bar.dart'; +import 'package:fluffychat/pages/chat/events/message/message.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import '../base/base_scenario.dart'; +import '../robots/send_text_message_robot.dart'; import 'login_scenario.dart'; class SendTextMessageScenario extends BaseScenario { @@ -15,10 +16,17 @@ class SendTextMessageScenario extends BaseScenario { @override Future execute() async { + final SendTextMessageRobot sendTextMessageRobot = SendTextMessageRobot($); await loginScenario.execute(); + await $.pumpAndSettle(); await $.tap($(ChatListItem)); await $.waitUntilVisible($(ChatView)); - await $.enterText($(InputBar), "test message"); - await $.tap($(ChatInputRowSendBtn)); + final messagesCount = $(ListView).$(Message).evaluate().length; + await sendTextMessageRobot.enterTextMessage('Hello World'); + await sendTextMessageRobot.tapOnSendButton(); + await $.pumpAndSettle(); + await Future.delayed(const Duration(seconds: 5)); + final messagesCountAfterSending = $(ListView).$(Message).evaluate().length; + expect(messagesCountAfterSending, messagesCount + 1); } } diff --git a/integration_test/tests/chat/send_text_message_test.dart b/integration_test/tests/chat/send_text_message_test.dart index 214f3826a..696d7b121 100644 --- a/integration_test/tests/chat/send_text_message_test.dart +++ b/integration_test/tests/chat/send_text_message_test.dart @@ -1,5 +1,3 @@ -import 'package:patrol/patrol.dart'; - import '../../base/test_base.dart'; import '../../scenarios/login_scenario.dart'; import '../../scenarios/send_text_message_scenario.dart'; From 7b26a37076645238929a428aa57a1c11aae77fa5 Mon Sep 17 00:00:00 2001 From: "khaled.njim" Date: Wed, 22 Jan 2025 17:47:27 +0100 Subject: [PATCH 3/3] TW-2206 added patrol test for sending image --- .../robots/send_text_message_robot.dart | 47 +++++++++++++++++++ .../scenarios/send_image_scenario.dart | 31 ++++++++++++ .../tests/chat/send_image_test.dart | 22 +++++++++ 3 files changed, 100 insertions(+) create mode 100644 integration_test/scenarios/send_image_scenario.dart create mode 100644 integration_test/tests/chat/send_image_test.dart diff --git a/integration_test/robots/send_text_message_robot.dart b/integration_test/robots/send_text_message_robot.dart index 699352fce..54e12c091 100644 --- a/integration_test/robots/send_text_message_robot.dart +++ b/integration_test/robots/send_text_message_robot.dart @@ -1,6 +1,11 @@ +import 'package:fluffychat/pages/chat/chat_input_row.dart'; import 'package:fluffychat/pages/chat/chat_input_row_send_btn.dart'; import 'package:fluffychat/pages/chat/input_bar/input_bar.dart'; +import 'package:fluffychat/widgets/twake_components/twake_icon_button.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:linagora_design_flutter/images_picker/image_item_widget.dart'; +import 'package:patrol/patrol.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import '../base/core_robot.dart'; @@ -23,4 +28,46 @@ class SendTextMessageRobot extends CoreRobot { } } + Future tapOnAddAttachmentButton() async { + try { + await $.tap($(ChatInputRow).$(TwakeIconButton)); + } catch (e) { + ignoreException(); + } + } + + Future selectImage() async { + try { + await $.tap($(ImagePickerItemWidget)); + } catch (e) { + ignoreException(); + } + } + + Future sendImage() async { + try { + await $.tap($((SvgPicture))); + } catch (e) { + ignoreException(); + } + } + + Future dismissMediaPopUp() async { + try { + await $.tap($('Next')); + } catch (e) { + ignoreException(); + } + } + + Future grantPhotosAndVideosPermission( + NativeAutomator nativeAutomator, + ) async { + if (await nativeAutomator.isPermissionDialogVisible( + timeout: const Duration(seconds: 15), + )) { + await nativeAutomator.grantPermissionWhenInUse(); + } + } + } diff --git a/integration_test/scenarios/send_image_scenario.dart b/integration_test/scenarios/send_image_scenario.dart new file mode 100644 index 000000000..42c24fbe4 --- /dev/null +++ b/integration_test/scenarios/send_image_scenario.dart @@ -0,0 +1,31 @@ +import 'package:fluffychat/pages/chat/chat_view.dart'; +import 'package:fluffychat/pages/chat/events/images_builder/image_bubble.dart'; +import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:linagora_design_flutter/images_picker/images_picker_grid.dart'; +import '../base/base_scenario.dart'; +import '../robots/send_text_message_robot.dart'; +import 'login_scenario.dart'; + +class SendImageScenario extends BaseScenario { + LoginScenario loginScenario; + SendImageScenario( + super.$, { + required this.loginScenario, + }); + + @override + Future execute() async { + final SendTextMessageRobot sendMessageRobot = SendTextMessageRobot($); + await loginScenario.execute(); + await $.tap($(ChatListItem)); + await $.waitUntilVisible($(ChatView)); + await sendMessageRobot.tapOnAddAttachmentButton(); + await sendMessageRobot.dismissMediaPopUp(); + await sendMessageRobot.grantPhotosAndVideosPermission($.nativeAutomator); + await $.waitUntilVisible($(ImagesPickerGrid)); + await sendMessageRobot.selectImage(); + await sendMessageRobot.sendImage(); + expect(ImageBubble, findsAtLeast(1)); + } +} diff --git a/integration_test/tests/chat/send_image_test.dart b/integration_test/tests/chat/send_image_test.dart new file mode 100644 index 000000000..146f6798a --- /dev/null +++ b/integration_test/tests/chat/send_image_test.dart @@ -0,0 +1,22 @@ +import '../../base/test_base.dart'; +import '../../scenarios/login_scenario.dart'; +import '../../scenarios/send_image_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see Message image after sending image in chat', + test: ($) async { + final loginScenario = LoginScenario( + $, + username: const String.fromEnvironment('USERNAME'), + serverUrl: const String.fromEnvironment('SERVER_URL'), + password: const String.fromEnvironment('PASSWORD'), + ); + final sendImageScenario = SendImageScenario( + $, + loginScenario: loginScenario, + ); + await sendImageScenario.execute(); + }, + ); +}