From adaa4b95cd0be5e77b5dfc158762717f48c707db Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 6 Mar 2025 20:13:37 +0700 Subject: [PATCH] TF-3449 Add integration test for send email with mark as important Signed-off-by: dab246 --- integration_test/robots/composer_robot.dart | 8 ++ ...email_with_mark_as_important_scenario.dart | 84 +++++++++++++++++++ ...end_email_with_mark_as_important_test.dart | 9 ++ .../composer/presentation/composer_view.dart | 1 + .../mobile/app_bar_composer_widget.dart | 1 + .../mixin/base_email_item_tile.dart | 1 + 6 files changed, 104 insertions(+) create mode 100644 integration_test/scenarios/send_email_with_mark_as_important_scenario.dart create mode 100644 integration_test/tests/compose/send_email_with_mark_as_important_test.dart diff --git a/integration_test/robots/composer_robot.dart b/integration_test/robots/composer_robot.dart index dfb80fc9b..918b4da37 100644 --- a/integration_test/robots/composer_robot.dart +++ b/integration_test/robots/composer_robot.dart @@ -85,4 +85,12 @@ class ComposerRobot extends CoreRobot { Future tapSaveButtonOnSaveDraftConfirmDialog(AppLocalizations appLocalizations) async { await $(find.text(appLocalizations.save)).tap(); } + + Future tapMoreOptionOnAppBar() async { + await $(#composer_more_button).tap(); + } + + Future tapMarkAsImportantPopupItemOnMenu() async { + await $(#mark_as_important_popup_item).tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/send_email_with_mark_as_important_scenario.dart b/integration_test/scenarios/send_email_with_mark_as_important_scenario.dart new file mode 100644 index 000000000..9eee8254d --- /dev/null +++ b/integration_test/scenarios/send_email_with_mark_as_important_scenario.dart @@ -0,0 +1,84 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../base/base_test_scenario.dart'; +import '../robots/composer_robot.dart'; +import '../robots/thread_robot.dart'; + +class SendEmailWithMarkAsImportantScenario extends BaseTestScenario { + const SendEmailWithMarkAsImportantScenario(super.$); + + @override + Future runTestLogic() async { + const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL'); + const emailContent = 'Mark email as important'; + + final threadRobot = ThreadRobot($); + final composerRobot = ComposerRobot($); + final imagePaths = ImagePaths(); + final appLocalizations = AppLocalizations(); + + await threadRobot.openComposer(); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + + await composerRobot.addRecipientIntoField( + prefixEmailAddress: PrefixEmailAddress.to, + email: emailUser, + ); + await composerRobot.addSubject(emailContent); + await composerRobot.addContent(emailContent); + + await composerRobot.tapMoreOptionOnAppBar(); + await $.pump(const Duration(seconds: 2)); + await _expectMoreOptionPopupMenuVisible(); + + await composerRobot.tapMarkAsImportantPopupItemOnMenu(); + await $.pump(const Duration(seconds: 2)); + await _expectToastDisplayWithMessageMarkAsImportantIsEnabled(appLocalizations); + + await composerRobot.sendEmail(imagePaths); + await _expectSendEmailSuccessToast(appLocalizations); + await $.pump(const Duration(seconds: 2)); + + await _expectDisplayedEmailHasImportantFlagIcon(); + } + + Future _expectComposerViewVisible() => expectViewVisible($(ComposerView)); + + Future _expectMoreOptionPopupMenuVisible() async { + await expectViewVisible($(#mark_as_important_popup_item)); + } + + Future _expectToastDisplayWithMessageMarkAsImportantIsEnabled( + AppLocalizations appLocalizations, + ) async { + await expectViewVisible( + $(find.text(appLocalizations.markAsImportantIsEnabled)), + ); + } + + Future _expectSendEmailSuccessToast( + AppLocalizations appLocalizations, + ) async { + await expectViewVisible( + $(find.text(appLocalizations.message_has_been_sent_successfully)), + ); + } + + Future _expectDisplayedEmailHasImportantFlagIcon() async { + await expectViewVisible( + $(EmailTileBuilder) + .which( + (widget) => widget.presentationEmail.isMarkAsImportant + && widget.isSenderImportantFlagEnabled + ), + ); + await expectViewVisible($(#important_flag_icon)); + } +} \ No newline at end of file diff --git a/integration_test/tests/compose/send_email_with_mark_as_important_test.dart b/integration_test/tests/compose/send_email_with_mark_as_important_test.dart new file mode 100644 index 000000000..c5d1b049d --- /dev/null +++ b/integration_test/tests/compose/send_email_with_mark_as_important_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/send_email_with_mark_as_important_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see email item has important flag icon when send email with mark as important successfully', + scenarioBuilder: ($) => SendEmailWithMarkAsImportantScenario($), + ); +} \ No newline at end of file diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index 5d9b91c28..a086dc6f2 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -500,6 +500,7 @@ class ComposerView extends GetWidget { PopupMenuItem( padding: EdgeInsets.zero, child: PopupItemWidget( + key: const Key('mark_as_important_popup_item'), iconAction: controller.imagePaths.icMarkAsImportant, nameAction: AppLocalizations.of(context).markAsImportant, styleName: ComposerStyle.popupItemTextStyle, diff --git a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart index f230fa3ef..f0159c87e 100644 --- a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart @@ -91,6 +91,7 @@ class AppBarComposerWidget extends StatelessWidget { ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( + key: const Key('composer_more_button'), icon: imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, diff --git a/lib/features/thread/presentation/mixin/base_email_item_tile.dart b/lib/features/thread/presentation/mixin/base_email_item_tile.dart index 3a84cabb4..75f83932d 100644 --- a/lib/features/thread/presentation/mixin/base_email_item_tile.dart +++ b/lib/features/thread/presentation/mixin/base_email_item_tile.dart @@ -357,6 +357,7 @@ mixin BaseEmailItemTile { Widget buildMarkAsImportantIcon(BuildContext context) { return Padding( + key: const Key('important_flag_icon'), padding: ItemEmailTileStyles.getSpaceCalendarEventIcon( context, responsiveUtils,