diff --git a/docs/adr/0059-reply-to-own-sent-email.md b/docs/adr/0059-reply-to-own-sent-email.md index 4f4cc51de..73e5e4d3b 100644 --- a/docs/adr/0059-reply-to-own-sent-email.md +++ b/docs/adr/0059-reply-to-own-sent-email.md @@ -12,7 +12,6 @@ Accepted ## Decision -- PresentationEmailExtension._handleReply is modified - When `isSender` is `true`, all "To" recipients will be kept ## Consequences diff --git a/integration_test/mixin/scenario_utils_mixin.dart b/integration_test/mixin/scenario_utils_mixin.dart index c64df2e07..5c4713e91 100644 --- a/integration_test/mixin/scenario_utils_mixin.dart +++ b/integration_test/mixin/scenario_utils_mixin.dart @@ -198,4 +198,14 @@ mixin ScenarioUtilsMixin { }, ); } + + bool isMatchingEmailList(List emailList, Set allowedEmails) { + if (emailList.length != allowedEmails.length) { + return false; + } + + final Set emails = emailList.map((e) => e.email).whereType().toSet(); + + return emails.length == allowedEmails.length && emails.containsAll(allowedEmails); + } } \ No newline at end of file diff --git a/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart b/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart new file mode 100644 index 000000000..73a32687e --- /dev/null +++ b/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart @@ -0,0 +1,45 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/mailbox_menu_robot.dart'; +import '../../robots/thread_robot.dart'; +import '../send_email_scenario.dart'; + +class ReplyToOwnSentEmailScenario extends BaseTestScenario { + const ReplyToOwnSentEmailScenario(super.$); + + @override + Future runTestLogic() async { + final threadRobot = ThreadRobot($); + final mailboxMenuRobot = MailboxMenuRobot($); + final emailRobot = EmailRobot($); + final sendEmailScenario = SendEmailScenario($); + final appLocalizations = AppLocalizations(); + + await sendEmailScenario.runTestLogic(); + await threadRobot.openMailbox(); + await mailboxMenuRobot.openFolderByName( + appLocalizations.sentMailboxDisplayName, + ); + await threadRobot.openEmailWithSubject('Test subject'); + await emailRobot.onTapReplyEmail(); + _expectToFieldContainListEmailAddressCorrectly(); + } + + void _expectToFieldContainListEmailAddressCorrectly() { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.to && + isMatchingEmailList( + widget.listEmailAddress, + {'bob@example.com', 'alice@example.com'} + ) + ).visible, + isTrue, + ); + } +} \ No newline at end of file diff --git a/integration_test/tests/compose/reply_to_own_sent_email_test.dart b/integration_test/tests/compose/reply_to_own_sent_email_test.dart new file mode 100644 index 000000000..cdb291f75 --- /dev/null +++ b/integration_test/tests/compose/reply_to_own_sent_email_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email/reply_to_own_sent_email_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should all To recipients when reply to own sent email', + scenarioBuilder: ($) => ReplyToOwnSentEmailScenario($), + ); +} \ No newline at end of file