TF-3517 Fix "Reply to *me*" field is added when save an email as draft
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -54,11 +54,7 @@ mixin ScenarioUtilsMixin {
|
|||||||
emailActionType: EmailActionType.compose,
|
emailActionType: EmailActionType.compose,
|
||||||
subject: provisioningEmail.subject,
|
subject: provisioningEmail.subject,
|
||||||
emailContent: provisioningEmail.content,
|
emailContent: provisioningEmail.content,
|
||||||
fromSender: {},
|
|
||||||
toRecipients: {EmailAddress(null, provisioningEmail.toEmail)},
|
toRecipients: {EmailAddress(null, provisioningEmail.toEmail)},
|
||||||
ccRecipients: {},
|
|
||||||
bccRecipients: {},
|
|
||||||
replyToRecipients: {},
|
|
||||||
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
||||||
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
||||||
identity: identity,
|
identity: identity,
|
||||||
|
|||||||
@@ -46,7 +46,10 @@ class ComposerRepositoryImpl extends ComposerRepository {
|
|||||||
@override
|
@override
|
||||||
Future<Email> generateEmail(
|
Future<Email> generateEmail(
|
||||||
CreateEmailRequest createEmailRequest,
|
CreateEmailRequest createEmailRequest,
|
||||||
{bool withIdentityHeader = false}
|
{
|
||||||
|
bool withIdentityHeader = false,
|
||||||
|
bool isDraft = false,
|
||||||
|
}
|
||||||
) async {
|
) async {
|
||||||
String emailContent = createEmailRequest.emailContent;
|
String emailContent = createEmailRequest.emailContent;
|
||||||
Set<EmailBodyPart> emailAttachments = Set.from(createEmailRequest.createAttachments());
|
Set<EmailBodyPart> emailAttachments = Set.from(createEmailRequest.createAttachments());
|
||||||
@@ -72,6 +75,7 @@ class ComposerRepositoryImpl extends ComposerRepository {
|
|||||||
userAgent: userAgent,
|
userAgent: userAgent,
|
||||||
partId: emailBodyPartId,
|
partId: emailBodyPartId,
|
||||||
withIdentityHeader: withIdentityHeader,
|
withIdentityHeader: withIdentityHeader,
|
||||||
|
isDraft: isDraft,
|
||||||
);
|
);
|
||||||
|
|
||||||
return emailObject;
|
return emailObject;
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ import 'package:tmail_ui_user/features/upload/domain/model/upload_attachment.dar
|
|||||||
abstract class ComposerRepository {
|
abstract class ComposerRepository {
|
||||||
Future<Email> generateEmail(
|
Future<Email> generateEmail(
|
||||||
CreateEmailRequest createEmailRequest,
|
CreateEmailRequest createEmailRequest,
|
||||||
{bool withIdentityHeader = false});
|
{
|
||||||
|
bool withIdentityHeader = false,
|
||||||
|
bool isDraft = false,
|
||||||
|
});
|
||||||
|
|
||||||
Future<UploadAttachment> uploadAttachment(FileInfo fileInfo, Uri uploadUri, {CancelToken? cancelToken});
|
Future<UploadAttachment> uploadAttachment(FileInfo fileInfo, Uri uploadUri, {CancelToken? cancelToken});
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -89,7 +89,9 @@ class CreateNewAndSaveEmailToDraftsInteractor {
|
|||||||
try {
|
try {
|
||||||
final emailCreated = await _composerRepository.generateEmail(
|
final emailCreated = await _composerRepository.generateEmail(
|
||||||
createEmailRequest,
|
createEmailRequest,
|
||||||
withIdentityHeader: true);
|
withIdentityHeader: true,
|
||||||
|
isDraft: true,
|
||||||
|
);
|
||||||
return emailCreated;
|
return emailCreated;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('CreateNewAndSaveEmailToDraftsInteractor::_createEmailObject: Exception: $e');
|
logError('CreateNewAndSaveEmailToDraftsInteractor::_createEmailObject: Exception: $e');
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ class SaveComposerCacheOnWebInteractor {
|
|||||||
try {
|
try {
|
||||||
final emailCreated = await _composerRepository.generateEmail(
|
final emailCreated = await _composerRepository.generateEmail(
|
||||||
createEmailRequest,
|
createEmailRequest,
|
||||||
withIdentityHeader: true);
|
withIdentityHeader: true,
|
||||||
|
isDraft: true,
|
||||||
|
);
|
||||||
await _composerCacheRepository.saveComposerCacheOnWeb(
|
await _composerCacheRepository.saveComposerCacheOnWeb(
|
||||||
accountId: accountId,
|
accountId: accountId,
|
||||||
userName: userName,
|
userName: userName,
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import 'package:tmail_ui_user/main/localizations/localization_service.dart';
|
|||||||
|
|
||||||
extension CreateEmailRequestExtension on CreateEmailRequest {
|
extension CreateEmailRequestExtension on CreateEmailRequest {
|
||||||
|
|
||||||
Set<EmailAddress> createSenders() {
|
Set<EmailAddress>? createSenders() {
|
||||||
if (identity?.email?.isNotEmpty == true) {
|
if (identity?.email?.isNotEmpty == true) {
|
||||||
return { identity!.toEmailAddress() };
|
return { identity!.toEmailAddress() };
|
||||||
} else {
|
} else {
|
||||||
@@ -31,23 +31,26 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String createMdnEmailAddress() {
|
String createMdnEmailAddress() {
|
||||||
if (emailActionType == EmailActionType.editDraft && fromSender.isNotEmpty) {
|
if (emailActionType == EmailActionType.editDraft && fromSender?.isNotEmpty == true) {
|
||||||
return fromSender.first.emailAddress;
|
return fromSender!.first.emailAddress;
|
||||||
} else {
|
} else {
|
||||||
return session.getOwnEmailAddress();
|
return session.getOwnEmailAddress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<EmailAddress> createReplyToRecipients() {
|
Set<EmailAddress>? createReplyToRecipients({bool isDraft = false}) {
|
||||||
if (replyToRecipients.isNotEmpty) {
|
if (replyToRecipients?.isNotEmpty == true) {
|
||||||
return replyToRecipients.toSet();
|
return replyToRecipients;
|
||||||
} else if (identity?.replyTo?.isNotEmpty == true) {
|
|
||||||
return identity!.replyTo!.toSet();
|
|
||||||
} else {
|
|
||||||
return { EmailAddress(null, session.getOwnEmailAddress()) };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isDraft) return null;
|
||||||
|
|
||||||
|
return identity?.replyTo?.isNotEmpty == true
|
||||||
|
? identity!.replyTo!
|
||||||
|
: {EmailAddress(null, session.getOwnEmailAddress())};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Set<EmailBodyPart> createAttachments() => attachments?.toEmailBodyPart() ?? {};
|
Set<EmailBodyPart> createAttachments() => attachments?.toEmailBodyPart() ?? {};
|
||||||
|
|
||||||
Map<KeyWordIdentifier, bool>? createKeywords() {
|
Map<KeyWordIdentifier, bool>? createKeywords() {
|
||||||
@@ -110,6 +113,7 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
|||||||
required String userAgent,
|
required String userAgent,
|
||||||
required PartId partId,
|
required PartId partId,
|
||||||
bool withIdentityHeader = false,
|
bool withIdentityHeader = false,
|
||||||
|
bool isDraft = false,
|
||||||
}) {
|
}) {
|
||||||
return Email(
|
return Email(
|
||||||
mailboxIds: createMailboxIds(),
|
mailboxIds: createMailboxIds(),
|
||||||
@@ -117,7 +121,7 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
|||||||
to: toRecipients,
|
to: toRecipients,
|
||||||
cc: ccRecipients,
|
cc: ccRecipients,
|
||||||
bcc: bccRecipients,
|
bcc: bccRecipients,
|
||||||
replyTo: createReplyToRecipients(),
|
replyTo: createReplyToRecipients(isDraft: isDraft),
|
||||||
inReplyTo: createInReplyTo(),
|
inReplyTo: createInReplyTo(),
|
||||||
references: createReferences(),
|
references: createReferences(),
|
||||||
keywords: createKeywords(),
|
keywords: createKeywords(),
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ class CreateEmailRequest with EquatableMixin {
|
|||||||
final String subject;
|
final String subject;
|
||||||
final String emailContent;
|
final String emailContent;
|
||||||
final bool hasRequestReadReceipt;
|
final bool hasRequestReadReceipt;
|
||||||
final Set<EmailAddress> fromSender;
|
final Set<EmailAddress>? fromSender;
|
||||||
final Set<EmailAddress> toRecipients;
|
final Set<EmailAddress>? toRecipients;
|
||||||
final Set<EmailAddress> ccRecipients;
|
final Set<EmailAddress>? ccRecipients;
|
||||||
final Set<EmailAddress> bccRecipients;
|
final Set<EmailAddress>? bccRecipients;
|
||||||
final Set<EmailAddress> replyToRecipients;
|
final Set<EmailAddress>? replyToRecipients;
|
||||||
final Identity? identity;
|
final Identity? identity;
|
||||||
final List<Attachment>? attachments;
|
final List<Attachment>? attachments;
|
||||||
final Map<String, Attachment>? inlineAttachments;
|
final Map<String, Attachment>? inlineAttachments;
|
||||||
@@ -44,11 +44,11 @@ class CreateEmailRequest with EquatableMixin {
|
|||||||
required this.emailActionType,
|
required this.emailActionType,
|
||||||
required this.subject,
|
required this.subject,
|
||||||
required this.emailContent,
|
required this.emailContent,
|
||||||
required this.fromSender,
|
this.fromSender,
|
||||||
required this.toRecipients,
|
this.toRecipients,
|
||||||
required this.ccRecipients,
|
this.ccRecipients,
|
||||||
required this.bccRecipients,
|
this.bccRecipients,
|
||||||
required this.replyToRecipients,
|
this.replyToRecipients,
|
||||||
this.hasRequestReadReceipt = true,
|
this.hasRequestReadReceipt = true,
|
||||||
this.identity,
|
this.identity,
|
||||||
this.attachments,
|
this.attachments,
|
||||||
|
|||||||
+22
-20
@@ -43,15 +43,13 @@ void main() {
|
|||||||
emailActionType: EmailActionType.editDraft,
|
emailActionType: EmailActionType.editDraft,
|
||||||
subject: 'subject',
|
subject: 'subject',
|
||||||
emailContent: 'emailContent',
|
emailContent: 'emailContent',
|
||||||
fromSender: {},
|
|
||||||
toRecipients: {},
|
|
||||||
ccRecipients: {},
|
|
||||||
bccRecipients: {},
|
|
||||||
replyToRecipients: {},
|
|
||||||
draftsEmailId: EmailId(Id('some-id'))
|
draftsEmailId: EmailId(Id('some-id'))
|
||||||
);
|
);
|
||||||
when(composerRepository.generateEmail(any, withIdentityHeader: anyNamed('withIdentityHeader')))
|
when(composerRepository.generateEmail(
|
||||||
.thenAnswer((_) async => Email());
|
any,
|
||||||
|
withIdentityHeader: anyNamed('withIdentityHeader'),
|
||||||
|
isDraft: anyNamed('isDraft'),
|
||||||
|
)).thenAnswer((_) async => Email());
|
||||||
when(emailRepository.updateEmailDrafts(any, any, any, any))
|
when(emailRepository.updateEmailDrafts(any, any, any, any))
|
||||||
.thenAnswer((_) async => Email());
|
.thenAnswer((_) async => Email());
|
||||||
|
|
||||||
@@ -61,13 +59,16 @@ void main() {
|
|||||||
.last;
|
.last;
|
||||||
await untilCalled(composerRepository.generateEmail(
|
await untilCalled(composerRepository.generateEmail(
|
||||||
any,
|
any,
|
||||||
withIdentityHeader: anyNamed('withIdentityHeader')));
|
withIdentityHeader: anyNamed('withIdentityHeader'),
|
||||||
|
isDraft: anyNamed('isDraft'),
|
||||||
|
));
|
||||||
|
|
||||||
// assert
|
// assert
|
||||||
verify(composerRepository.generateEmail(
|
verify(composerRepository.generateEmail(
|
||||||
createEmailRequest,
|
createEmailRequest,
|
||||||
withIdentityHeader: true)
|
withIdentityHeader: true,
|
||||||
).called(1);
|
isDraft: true,
|
||||||
|
)).called(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test(
|
test(
|
||||||
@@ -82,14 +83,12 @@ void main() {
|
|||||||
emailActionType: EmailActionType.editDraft,
|
emailActionType: EmailActionType.editDraft,
|
||||||
subject: 'subject',
|
subject: 'subject',
|
||||||
emailContent: 'emailContent',
|
emailContent: 'emailContent',
|
||||||
fromSender: {},
|
|
||||||
toRecipients: {},
|
|
||||||
ccRecipients: {},
|
|
||||||
bccRecipients: {},
|
|
||||||
replyToRecipients: {},
|
|
||||||
);
|
);
|
||||||
when(composerRepository.generateEmail(any, withIdentityHeader: anyNamed('withIdentityHeader')))
|
when(composerRepository.generateEmail(
|
||||||
.thenAnswer((_) async => Email());
|
any,
|
||||||
|
withIdentityHeader: anyNamed('withIdentityHeader'),
|
||||||
|
isDraft: anyNamed('isDraft'),
|
||||||
|
)).thenAnswer((_) async => Email());
|
||||||
when(emailRepository.saveEmailAsDrafts(any, any, any))
|
when(emailRepository.saveEmailAsDrafts(any, any, any))
|
||||||
.thenAnswer((_) async => Email());
|
.thenAnswer((_) async => Email());
|
||||||
|
|
||||||
@@ -99,13 +98,16 @@ void main() {
|
|||||||
.last;
|
.last;
|
||||||
await untilCalled(composerRepository.generateEmail(
|
await untilCalled(composerRepository.generateEmail(
|
||||||
any,
|
any,
|
||||||
withIdentityHeader: anyNamed('withIdentityHeader')));
|
withIdentityHeader: anyNamed('withIdentityHeader'),
|
||||||
|
isDraft: anyNamed('isDraft'),
|
||||||
|
));
|
||||||
|
|
||||||
// assert
|
// assert
|
||||||
verify(composerRepository.generateEmail(
|
verify(composerRepository.generateEmail(
|
||||||
createEmailRequest,
|
createEmailRequest,
|
||||||
withIdentityHeader: true)
|
withIdentityHeader: true,
|
||||||
).called(1);
|
isDraft: true,
|
||||||
|
)).called(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
+11
-10
@@ -34,14 +34,12 @@ void main() {
|
|||||||
emailActionType: EmailActionType.editDraft,
|
emailActionType: EmailActionType.editDraft,
|
||||||
subject: 'subject',
|
subject: 'subject',
|
||||||
emailContent: 'emailContent',
|
emailContent: 'emailContent',
|
||||||
fromSender: {},
|
|
||||||
toRecipients: {},
|
|
||||||
ccRecipients: {},
|
|
||||||
bccRecipients: {},
|
|
||||||
replyToRecipients: {},
|
|
||||||
);
|
);
|
||||||
when(composerRepository.generateEmail(any, withIdentityHeader: anyNamed('withIdentityHeader')))
|
when(composerRepository.generateEmail(
|
||||||
.thenAnswer((_) async => Email());
|
any,
|
||||||
|
withIdentityHeader: anyNamed('withIdentityHeader'),
|
||||||
|
isDraft: anyNamed('isDraft'),
|
||||||
|
)).thenAnswer((_) async => Email());
|
||||||
|
|
||||||
// act
|
// act
|
||||||
createNewAndSendEmailInteractor
|
createNewAndSendEmailInteractor
|
||||||
@@ -49,13 +47,16 @@ void main() {
|
|||||||
.last;
|
.last;
|
||||||
await untilCalled(composerRepository.generateEmail(
|
await untilCalled(composerRepository.generateEmail(
|
||||||
any,
|
any,
|
||||||
withIdentityHeader: anyNamed('withIdentityHeader')));
|
withIdentityHeader: anyNamed('withIdentityHeader'),
|
||||||
|
isDraft: anyNamed('isDraft'),
|
||||||
|
));
|
||||||
|
|
||||||
// assert
|
// assert
|
||||||
verify(composerRepository.generateEmail(
|
verify(composerRepository.generateEmail(
|
||||||
createEmailRequest,
|
createEmailRequest,
|
||||||
withIdentityHeader: false)
|
withIdentityHeader: false,
|
||||||
).called(1);
|
isDraft: false,
|
||||||
|
)).called(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
-5
@@ -15,11 +15,6 @@ void main() {
|
|||||||
emailActionType: EmailActionType.editDraft,
|
emailActionType: EmailActionType.editDraft,
|
||||||
subject: 'subject',
|
subject: 'subject',
|
||||||
emailContent: 'emailContent',
|
emailContent: 'emailContent',
|
||||||
fromSender: {},
|
|
||||||
toRecipients: {},
|
|
||||||
ccRecipients: {},
|
|
||||||
bccRecipients: {},
|
|
||||||
replyToRecipients: {},
|
|
||||||
);
|
);
|
||||||
|
|
||||||
group('create email request extension test:', () {
|
group('create email request extension test:', () {
|
||||||
|
|||||||
Reference in New Issue
Block a user