From 12b9ad4a4060b7e69078d33e6b443d30f2ced41f Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 10 Mar 2026 13:43:41 +0700 Subject: [PATCH] TF-4367 Add E2E test for test case reply email is replied when change language on mobile --- ...replied_when_change_language_scenario.dart | 177 ++++++++++++++++++ ...ail_replied_when_change_language_test.dart | 10 + 2 files changed, 187 insertions(+) create mode 100644 integration_test/scenarios/email_detailed/reply_email_replied_when_change_language_scenario.dart create mode 100644 integration_test/tests/email_detailed/reply_email_replied_when_change_language_test.dart diff --git a/integration_test/scenarios/email_detailed/reply_email_replied_when_change_language_scenario.dart b/integration_test/scenarios/email_detailed/reply_email_replied_when_change_language_scenario.dart new file mode 100644 index 000000000..61544469a --- /dev/null +++ b/integration_test/scenarios/email_detailed/reply_email_replied_when_change_language_scenario.dart @@ -0,0 +1,177 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/email_view.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/main/localizations/localization_service.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../models/provisioning_email.dart'; +import '../../robots/composer_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/language_robot.dart'; +import '../../robots/mailbox_menu_robot.dart'; +import '../../robots/setting_robot.dart'; +import '../../robots/thread_robot.dart'; + +class ReplyEmailRepliedWhenChangeLanguageScenario extends BaseTestScenario { + const ReplyEmailRepliedWhenChangeLanguageScenario(super.$); + + @override + Future runTestLogic() async { + const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL'); + + final threadRobot = ThreadRobot($); + final emailRobot = EmailRobot($); + final composerRobot = ComposerRobot($); + final settingRobot = SettingRobot($); + final languageRobot = LanguageRobot($); + final mailboxMenuRobot = MailboxMenuRobot($); + final imagePaths = ImagePaths(); + + for (var locale in LocalizationService.supportedLocales) { + final appLocalizations = await AppLocalizations.load(locale); + + String subject = + '${appLocalizations.prefix_reply_email} Email by locale ${locale.languageCode}'; + + await _goToSettingToChangeLanguage( + threadRobot: threadRobot, + settingRobot: settingRobot, + mailboxMenuRobot: mailboxMenuRobot, + languageRobot: languageRobot, + appLocalizations: appLocalizations, + locale: locale, + ); + + await _generateEmail(emailUser, subject); + + await _replyEmailBySubject( + threadRobot: threadRobot, + emailRobot: emailRobot, + composerRobot: composerRobot, + subject: subject, + appLocalizations: appLocalizations, + ); + + await _closeComposer( + composerRobot: composerRobot, + imagePaths: imagePaths, + ); + + await _closeEmailDetailedView(emailRobot: emailRobot); + + await $.pumpAndTrySettle(); + } + } + + Future _goToSettingToChangeLanguage({ + required ThreadRobot threadRobot, + required SettingRobot settingRobot, + required MailboxMenuRobot mailboxMenuRobot, + required LanguageRobot languageRobot, + required AppLocalizations appLocalizations, + required Locale locale, + }) async { + await threadRobot.openMailbox(); + await mailboxMenuRobot.openSetting(); + await _expectLanguageMenuItemVisible(); + + await settingRobot.openLanguageMenuItem(); + await languageRobot.openLanguageContextMenu(); + await languageRobot.selectLanguage(locale, appLocalizations); + await _expectLanguageViewByLocaleTitleVisible(appLocalizations); + + await settingRobot.backToSettingsFromFirstLevel(); + await settingRobot.closeSettings(); + } + + Future _generateEmail(String emailUser, String subject) async { + await provisionEmail( + [ + ProvisioningEmail( + toEmail: emailUser, + subject: subject, + content: subject, + ), + ], + requestReadReceipt: false, + ); + await $.pumpAndTrySettle(); + } + + Future _replyEmailBySubject({ + required ThreadRobot threadRobot, + required EmailRobot emailRobot, + required ComposerRobot composerRobot, + required String subject, + required AppLocalizations appLocalizations, + }) async { + await threadRobot.openEmailWithSubject(subject); + await _expectEmailViewVisible(); + await _expectReplyEmailButtonVisible(); + + await emailRobot.onTapReplyEmail(); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + await $.pumpAndTrySettle(); + + await _expectComposerSubjectIsNotChanged( + appLocalizations: appLocalizations, + subject: subject, + ); + } + + Future _closeComposer({ + required ComposerRobot composerRobot, + required ImagePaths imagePaths, + }) async { + await composerRobot.tapCloseComposer(imagePaths); + await composerRobot.tapDiscardChanges(); + } + + Future _closeEmailDetailedView({required EmailRobot emailRobot}) async { + await emailRobot.onTapBackButton(); + } + + Future _expectLanguageMenuItemVisible() async { + await $(#setting_language_region).scrollTo( + scrollDirection: AxisDirection.down, + ); + await expectViewVisible($(#setting_language_region)); + } + + Future _expectLanguageViewByLocaleTitleVisible( + AppLocalizations appLocalizations, + ) async { + await expectViewVisible($(find.text(appLocalizations.language))); + } + + Future _expectEmailViewVisible() async { + await expectViewVisible($(EmailView)); + } + + Future _expectReplyEmailButtonVisible() async { + await expectViewVisible($(#reply_email_button)); + } + + Future _expectComposerViewVisible() async { + await expectViewVisible($(ComposerView)); + } + + Future _expectComposerSubjectIsNotChanged({ + required AppLocalizations appLocalizations, + required String subject, + }) async { + expect( + $(SubjectComposerWidget) + .which( + (widget) => widget.textController.text == subject) + .visible, + isTrue, + ); + } +} diff --git a/integration_test/tests/email_detailed/reply_email_replied_when_change_language_test.dart b/integration_test/tests/email_detailed/reply_email_replied_when_change_language_test.dart new file mode 100644 index 000000000..363f1e905 --- /dev/null +++ b/integration_test/tests/email_detailed/reply_email_replied_when_change_language_test.dart @@ -0,0 +1,10 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/reply_email_replied_when_change_language_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: + 'The subject line of an email should not be changed when replying to an email that has already been replied to.', + scenarioBuilder: ($) => ReplyEmailRepliedWhenChangeLanguageScenario($), + ); +}