From 430a41a7bd62f40317d523463bf15507ce378629 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 4 Apr 2025 10:11:52 +0700 Subject: [PATCH] TF-3609 Add integration test for case display email address info dialog in EmailView Signed-off-by: dab246 --- .../robots/email_address_dialog_robot.dart | 12 ++++ integration_test/robots/email_robot.dart | 16 +++++ ...ay_email_address_info_dialog_scenario.dart | 59 +++++++++++++++++++ ...isplay_email_address_info_dialog_test.dart | 9 +++ .../widgets/email_address_detail_widget.dart | 1 + 5 files changed, 97 insertions(+) create mode 100644 integration_test/robots/email_address_dialog_robot.dart create mode 100644 integration_test/scenarios/email_detailed/display_email_address_info_dialog_scenario.dart create mode 100644 integration_test/tests/email_detailed/email_address_dialog/display_email_address_info_dialog_test.dart diff --git a/integration_test/robots/email_address_dialog_robot.dart b/integration_test/robots/email_address_dialog_robot.dart new file mode 100644 index 000000000..355cc191e --- /dev/null +++ b/integration_test/robots/email_address_dialog_robot.dart @@ -0,0 +1,12 @@ + +import 'package:flutter_test/flutter_test.dart'; + +import '../base/core_robot.dart'; + +class EmailAddressDialogRobot extends CoreRobot { + EmailAddressDialogRobot(super.$); + + Future tapCloseDialogButton() async { + await $(#email_address_dialog_close_button).tap(); + } +} \ No newline at end of file diff --git a/integration_test/robots/email_robot.dart b/integration_test/robots/email_robot.dart index f859660be..f1b818513 100644 --- a/integration_test/robots/email_robot.dart +++ b/integration_test/robots/email_robot.dart @@ -1,4 +1,6 @@ +import 'package:core/presentation/views/button/tmail_button_widget.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:tmail_ui_user/features/base/widget/material_text_button.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_back_button.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -60,4 +62,18 @@ class EmailRobot extends CoreRobot { Future tapArchiveMessageOptionInContextMenu() async { await $(#archiveMessage_action).tap(); } + + Future tapSenderEmailAddress(String email) async { + await $(MaterialTextButton) + .which((widget) => widget.label.contains(email)) + .first + .tap(); + } + + Future tapRecipientEmailAddress(String email) async { + await $(TMailButtonWidget) + .which((widget) => widget.text.contains(email)) + .first + .tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/display_email_address_info_dialog_scenario.dart b/integration_test/scenarios/email_detailed/display_email_address_info_dialog_scenario.dart new file mode 100644 index 000000000..31f0031a3 --- /dev/null +++ b/integration_test/scenarios/email_detailed/display_email_address_info_dialog_scenario.dart @@ -0,0 +1,59 @@ + +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/email_address_dialog_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/thread_robot.dart'; + +class DisplayEmailAddressInfoDialogScenario extends BaseTestScenario { + + const DisplayEmailAddressInfoDialogScenario(super.$); + + @override + Future runTestLogic() async { + const subject = 'Email address info dialog'; + const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL'); + final threadRobot = ThreadRobot($); + final emailRobot = EmailRobot($); + final emailAddressDialogRobot = EmailAddressDialogRobot($); + final appLocalizations = AppLocalizations(); + + await provisionEmail( + [ + ProvisioningEmail( + toEmail: emailUser, + subject: subject, + content: subject, + ), + ], + requestReadReceipt: false, + ); + await $.pumpAndSettle(); + + await threadRobot.openEmailWithSubject(subject); + await $.pumpAndSettle(); + + await emailRobot.tapSenderEmailAddress(emailUser); + await $.pumpAndSettle(); + await _expectEmailAddressInfoDialogVisible(appLocalizations); + + await emailAddressDialogRobot.tapCloseDialogButton(); + await $.pumpAndSettle(); + + await emailRobot.tapRecipientEmailAddress(emailUser); + await $.pumpAndSettle(); + + await _expectEmailAddressInfoDialogVisible(appLocalizations); + } + + Future _expectEmailAddressInfoDialogVisible( + AppLocalizations appLocalizations, + ) async { + await expectViewVisible($(appLocalizations.copy_email_address)); + await expectViewVisible($(appLocalizations.quickCreatingRule)); + await expectViewVisible($(appLocalizations.compose_email)); + } +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/email_address_dialog/display_email_address_info_dialog_test.dart b/integration_test/tests/email_detailed/email_address_dialog/display_email_address_info_dialog_test.dart new file mode 100644 index 000000000..00e04a642 --- /dev/null +++ b/integration_test/tests/email_detailed/email_address_dialog/display_email_address_info_dialog_test.dart @@ -0,0 +1,9 @@ +import '../../../base/test_base.dart'; +import '../../../scenarios/email_detailed/display_email_address_info_dialog_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see email address info dialog when open detailed email and click email address if sender or recipient', + scenarioBuilder: ($) => DisplayEmailAddressInfoDialogScenario($), + ); +} \ No newline at end of file diff --git a/lib/features/email/presentation/widgets/email_address_detail_widget.dart b/lib/features/email/presentation/widgets/email_address_detail_widget.dart index 2707ebdb2..a0af1377e 100644 --- a/lib/features/email/presentation/widgets/email_address_detail_widget.dart +++ b/lib/features/email/presentation/widgets/email_address_detail_widget.dart @@ -104,6 +104,7 @@ class EmailAddressDetailWidget extends StatelessWidget { top: 0, end: 0, child: TMailButtonWidget.fromIcon( + key: const Key('email_address_dialog_close_button'), icon: imagePaths.icCloseDialog, iconSize: 24, iconColor: AppColor.m3Tertiary,