From 371716fb800ff6924deff6bb661d96f916ddcd16 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 1 Apr 2025 23:31:33 +0700 Subject: [PATCH] TF-3570 Add integration test for case move email to folder in EmailView Signed-off-by: dab246 --- .../robots/destination_picker_robot.dart | 17 ++++++ integration_test/robots/email_robot.dart | 4 ++ .../move_email_to_folder_scenario.dart | 60 +++++++++++++++++++ ..._folder_when_open_detailed_email_test.dart | 9 +++ .../widgets/email_view_app_bar_widget.dart | 1 + 5 files changed, 91 insertions(+) create mode 100644 integration_test/robots/destination_picker_robot.dart create mode 100644 integration_test/scenarios/email_detailed/move_email_to_folder_scenario.dart create mode 100644 integration_test/tests/email_detailed/move_email_to_folder_when_open_detailed_email_test.dart diff --git a/integration_test/robots/destination_picker_robot.dart b/integration_test/robots/destination_picker_robot.dart new file mode 100644 index 000000000..8b881d04e --- /dev/null +++ b/integration_test/robots/destination_picker_robot.dart @@ -0,0 +1,17 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart'; + +import '../base/core_robot.dart'; + +class DestinationPickerRobot extends CoreRobot { + DestinationPickerRobot(super.$); + + Future selectFolderByName(String name) async { + await $(MailboxItemWidget) + .$(LabelMailboxItemWidget) + .$(find.text(name)) + .tap(); + } +} \ No newline at end of file diff --git a/integration_test/robots/email_robot.dart b/integration_test/robots/email_robot.dart index 38493e6d3..f3c33984a 100644 --- a/integration_test/robots/email_robot.dart +++ b/integration_test/robots/email_robot.dart @@ -44,4 +44,8 @@ class EmailRobot extends CoreRobot { Future tapEmailDetailedStarButton() async { await $(#email_detailed_star_button).tap(); } + + Future tapEmailDetailedMoveEmailButton() async { + await $(#email_detailed_move_email_button).tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/move_email_to_folder_scenario.dart b/integration_test/scenarios/email_detailed/move_email_to_folder_scenario.dart new file mode 100644 index 000000000..e37e98d21 --- /dev/null +++ b/integration_test/scenarios/email_detailed/move_email_to_folder_scenario.dart @@ -0,0 +1,60 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../models/provisioning_email.dart'; +import '../../robots/destination_picker_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/mailbox_menu_robot.dart'; +import '../../robots/thread_robot.dart'; + +class MoveEmailToFolderScenario extends BaseTestScenario { + + const MoveEmailToFolderScenario(super.$); + + @override + Future runTestLogic() async { + const subject = 'Move email to folder'; + const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL'); + final threadRobot = ThreadRobot($); + final emailRobot = EmailRobot($); + final mailboxMenuRobot = MailboxMenuRobot($); + final destinationPickerRobot = DestinationPickerRobot($); + final appLocalizations = AppLocalizations(); + + await provisionEmail( + [ + ProvisioningEmail( + toEmail: emailUser, + subject: subject, + content: subject, + ), + ], + requestReadReceipt: false, + ); + await $.pumpAndSettle(); + + await threadRobot.openEmailWithSubject(subject); + await $.pumpAndSettle(); + + await emailRobot.tapEmailDetailedMoveEmailButton(); + await $.pumpAndSettle(duration: const Duration(seconds: 2)); + + await destinationPickerRobot.selectFolderByName(appLocalizations.templatesMailboxDisplayName); + await $.pumpAndSettle(duration: const Duration(seconds: 3)); + _expectEmailWithSubjectInCurrentFolderInvisible(subject); + + await threadRobot.openMailbox(); + await mailboxMenuRobot.openFolderByName(appLocalizations.templatesMailboxDisplayName); + await _expectEmailWithSubjectInDestinationFolderVisible(subject); + } + + void _expectEmailWithSubjectInCurrentFolderInvisible(String subject) { + expect($(subject), findsNothing); + } + + Future _expectEmailWithSubjectInDestinationFolderVisible(String subject) async { + await expectViewVisible($(subject)); + } +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/move_email_to_folder_when_open_detailed_email_test.dart b/integration_test/tests/email_detailed/move_email_to_folder_when_open_detailed_email_test.dart new file mode 100644 index 000000000..dac353150 --- /dev/null +++ b/integration_test/tests/email_detailed/move_email_to_folder_when_open_detailed_email_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/move_email_to_folder_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see email in destination folder when open detailed email and move email to destination folder successfully', + scenarioBuilder: ($) => MoveEmailToFolderScenario($), + ); +} \ No newline at end of file diff --git a/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart b/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart index 81ab68f3d..1534c24ab 100644 --- a/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart +++ b/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart @@ -162,6 +162,7 @@ class EmailViewAppBarWidget extends StatelessWidget { ); Widget _getMoveEmailButton(AppLocalizations appLocalizations) => TMailButtonWidget.fromIcon( + key: const Key('email_detailed_move_email_button'), icon: _imagePaths.icMoveEmail, iconSize: EmailViewAppBarWidgetStyles.buttonIconSize, iconColor: EmailViewAppBarWidgetStyles.iconColor,