TF-3515 Add save email as template feature

This commit is contained in:
DatDang
2025-02-25 16:10:20 +07:00
committed by Dat H. Pham
parent ef1f979c4b
commit 7f09f9ceb4
40 changed files with 1079 additions and 54 deletions
@@ -103,6 +103,7 @@ void main() {
when(mockCreateEmailRequest.emailActionType).thenReturn(EmailActionType.compose);
when(mockCreateEmailRequest.hasRequestReadReceipt).thenReturn(false);
when(mockCreateEmailRequest.isMarkAsImportant).thenReturn(false);
when(mockCreateEmailRequest.templateMailboxId).thenReturn(null);
when(mockHtmlDataSource.replaceImageBase64ToImageCID(
emailContent: emailContentWithBase64,
@@ -160,6 +161,7 @@ void main() {
when(mockCreateEmailRequest.emailActionType).thenReturn(EmailActionType.compose);
when(mockCreateEmailRequest.hasRequestReadReceipt).thenReturn(false);
when(mockCreateEmailRequest.isMarkAsImportant).thenReturn(false);
when(mockCreateEmailRequest.templateMailboxId).thenReturn(null);
when(mockHtmlDataSource.replaceImageBase64ToImageCID(
emailContent: emailContentWithBase64,
@@ -214,6 +216,7 @@ void main() {
when(mockCreateEmailRequest.emailActionType).thenReturn(EmailActionType.compose);
when(mockCreateEmailRequest.hasRequestReadReceipt).thenReturn(false);
when(mockCreateEmailRequest.isMarkAsImportant).thenReturn(false);
when(mockCreateEmailRequest.templateMailboxId).thenReturn(null);
when(mockHtmlDataSource.replaceImageBase64ToImageCID(
emailContent: plainEmailContent,
@@ -39,10 +39,11 @@ import 'package:tmail_ui_user/features/composer/presentation/controller/rich_tex
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/setup_selected_identity_extension.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/formatting_options_state.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/saved_email_draft.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/saved_composing_email.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/print_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/save_template_email_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/transform_html_email_content_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.dart';
@@ -160,6 +161,7 @@ class MockMailboxDashBoardController extends Mock implements MailboxDashBoardCon
MockSpec<CreateNewAndSaveEmailToDraftsInteractor>(),
MockSpec<PrintEmailInteractor>(),
MockSpec<ComposerRepository>(),
MockSpec<SaveTemplateEmailInteractor>(),
// Additional Getx dependencies mock specs
MockSpec<NetworkConnectionController>(fallbackGenerators: fallbackGenerators),
@@ -204,6 +206,7 @@ void main() {
late MockCreateNewAndSaveEmailToDraftsInteractor mockCreateNewAndSaveEmailToDraftsInteractor;
late MockPrintEmailInteractor mockPrintEmailInteractor;
late MockComposerRepository mockComposerRepository;
late MockSaveTemplateEmailInteractor mockSaveTemplateEmailInteractor;
// Declaration Getx dependencies
final mockMailboxDashBoardController = MockMailboxDashBoardController();
@@ -273,6 +276,7 @@ void main() {
mockCreateNewAndSaveEmailToDraftsInteractor = MockCreateNewAndSaveEmailToDraftsInteractor();
mockPrintEmailInteractor = MockPrintEmailInteractor();
mockComposerRepository = MockComposerRepository();
mockSaveTemplateEmailInteractor = MockSaveTemplateEmailInteractor();
composerController = ComposerController(
mockLocalFilePickerInteractor,
@@ -289,6 +293,7 @@ void main() {
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
mockComposerRepository,
mockSaveTemplateEmailInteractor,
);
mockHtmlEditorApi = MockHtmlEditorApi();
@@ -344,7 +349,7 @@ void main() {
emailContent: anyNamed('emailContent'),
)).thenAnswer((_) async => emailContent);
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
content: emailContent,
subject: emailSubject,
toRecipients: {toRecipient},
@@ -404,7 +409,7 @@ void main() {
emailContent: anyNamed('emailContent'),
)).thenAnswer((_) async => emailContent);
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
content: emailContent,
subject: emailSubject,
toRecipients: {toRecipient},
@@ -471,7 +476,7 @@ void main() {
.thenAnswer((_) => Stream.value(
Right(SaveEmailAsDraftsSuccess(EmailId(Id('123')), null))));
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
content: emailContent,
subject: emailSubject,
toRecipients: {toRecipient},
@@ -551,7 +556,7 @@ void main() {
.thenAnswer((_) => Stream.value(
Right(UpdateEmailDraftsSuccess(EmailId(Id('123'))))));
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
content: emailContent,
subject: emailSubject,
toRecipients: {toRecipient},
@@ -626,7 +631,7 @@ void main() {
emailContent: anyNamed('emailContent'),
)).thenAnswer((_) async => emailContent);
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
content: emailContent,
subject: emailSubject,
toRecipients: {toRecipient},
@@ -686,7 +691,7 @@ void main() {
emailContent: anyNamed('emailContent'),
)).thenAnswer((_) async => emailContent);
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
content: emailContent,
subject: emailSubject,
toRecipients: {toRecipient},
@@ -2,7 +2,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/email/attachment.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/saved_email_draft.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/saved_composing_email.dart';
void main() {
group('saved email draft test', () {
@@ -10,7 +10,7 @@ void main() {
'should tag toRecipients, ccRecipients and bccRecipients in props',
() {
// arrange
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
subject: 'subject',
content: 'content',
toRecipients: {EmailAddress('to name', 'to email')},
@@ -43,7 +43,7 @@ void main() {
final attachments = <Attachment>[];
const hasReadReceipt = false;
final toSavedEmailDraft = SavedEmailDraft(
final toSavedEmailDraft = SavedComposingEmail(
subject: subject,
content: content,
toRecipients: {recipient},
@@ -55,7 +55,7 @@ void main() {
hasReadReceipt: hasReadReceipt
);
final ccSavedEmailDraft = SavedEmailDraft(
final ccSavedEmailDraft = SavedComposingEmail(
subject: subject,
content: content,
toRecipients: {},
@@ -67,7 +67,7 @@ void main() {
hasReadReceipt: hasReadReceipt
);
final bccSavedEmailDraft = SavedEmailDraft(
final bccSavedEmailDraft = SavedComposingEmail(
subject: subject,
content: content,
toRecipients: {},
@@ -79,7 +79,7 @@ void main() {
hasReadReceipt: hasReadReceipt
);
final replyToSavedEmailDraft = SavedEmailDraft(
final replyToSavedEmailDraft = SavedComposingEmail(
subject: subject,
content: content,
toRecipients: {},
@@ -112,7 +112,7 @@ void main() {
final listToRecipients = {
EmailAddress('to name', 'to email')
};
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
subject: 'subject',
content: 'content',
toRecipients: listToRecipients,
@@ -138,7 +138,7 @@ void main() {
'when all properties are the same',
() {
// arrange
final savedEmailDraft = SavedEmailDraft(
final savedEmailDraft = SavedComposingEmail(
subject: 'subject',
content: 'content',
toRecipients: {EmailAddress('to name', 'to email')},
@@ -150,7 +150,7 @@ void main() {
hasReadReceipt: false
);
final savedEmailDraft2 = SavedEmailDraft(
final savedEmailDraft2 = SavedComposingEmail(
subject: 'subject',
content: 'content',
toRecipients: {EmailAddress('to name', 'to email')},