From 19326621fdffbe4ef8cd6be607dcd57a60ebcc19 Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 14 Apr 2025 14:26:44 +0700 Subject: [PATCH] TF-3649 Fix reply to own sent email --- .../presentation_email_extension.dart | 6 ++++ .../presentation_email_extension_test.dart | 34 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/features/email/presentation/extensions/presentation_email_extension.dart b/lib/features/email/presentation/extensions/presentation_email_extension.dart index fd7ae0f24..4070dcbb8 100644 --- a/lib/features/email/presentation/extensions/presentation_email_extension.dart +++ b/lib/features/email/presentation/extensions/presentation_email_extension.dart @@ -6,6 +6,7 @@ import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/email_address_extension.dart'; import 'package:model/extensions/list_email_address_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; extension PresentationEmailExtension on PresentationEmail { @@ -29,6 +30,7 @@ extension PresentationEmailExtension on PresentationEmail { newFromAddress: newFromAddress, newBccAddress: newBccAddress, newReplyToAddress: newReplyToAddress, + replyOwnSentEmail: mailboxContain?.isSent == true, userName: userName, ); @@ -57,9 +59,13 @@ extension PresentationEmailExtension on PresentationEmail { required List newFromAddress, required List newBccAddress, required List newReplyToAddress, + required replyOwnSentEmail, String? userName, }) { if (isSender) { + if (replyOwnSentEmail) { + return Tuple4(newToAddress, [], [], []); + } if (newBccAddress.isNotEmpty) { return Tuple4(newToAddress, [], [], newReplyToAddress); } diff --git a/test/model/lib/extensions/presentation_email_extension_test.dart b/test/model/lib/extensions/presentation_email_extension_test.dart index b476c8224..bb2a7a246 100644 --- a/test/model/lib/extensions/presentation_email_extension_test.dart +++ b/test/model/lib/extensions/presentation_email_extension_test.dart @@ -1,9 +1,12 @@ import 'package:dartz/dartz.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/email_address_extension.dart'; +import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/presentation_email_extension.dart'; void main() { @@ -254,6 +257,35 @@ void main() { expect(result.value4, containsAll(expectedResult.value4)); }); + test( + 'Email has Reply To' + 'AND user is replying to own sent email' + 'THEN user A clicks reply, generateRecipientsEmailAddressForComposer\n' + 'SHOULD return all email address in To field in To tuple', + () { + final emailToReply = PresentationEmail( + from: {userAEmailAddress}, + to: {userBEmailAddress, userAEmailAddress}, + cc: {userCEmailAddress}, + replyTo: {replyToEmailAddress}, + mailboxContain: PresentationMailbox( + MailboxId(Id('value')), + role: PresentationMailbox.roleSent, + ), + ); + + final result = emailToReply.generateRecipientsEmailAddressForComposer( + emailActionType: EmailActionType.reply, + isSender: true, + listPost: listPost, + ); + + expect(result.value1, equals([userBEmailAddress, userAEmailAddress])); + expect(result.value2, isEmpty); + expect(result.value3, isEmpty); + expect(result.value4, isEmpty); + }); + test( 'Email has Reply To and not List-Post' 'THEN user A clicks reply, generateRecipientsEmailAddressForComposer\n' @@ -541,4 +573,4 @@ void main() { }); }); }); -} \ No newline at end of file +}