TF-3478 Use ComposerManager to open & close single composer

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-12 02:30:21 +07:00
committed by Dat H. Pham
parent 9a25d3c258
commit 49fe89a949
13 changed files with 435 additions and 170 deletions
@@ -407,19 +407,36 @@ void main() {
// arrange
PlatformInfo.isTestingForWeb = true;
final selectedIdentity = Identity(id: IdentityId(Id('alice')));
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
selectedIdentityId: selectedIdentity.id,
identities: [selectedIdentity],
),
);
composerController?.onChangeTextEditorWeb(emailContent);
composerController?.subjectEmail.value = emailSubject;
composerController?.listToEmailAddress = [toRecipient];
composerController?.listCcEmailAddress = [ccRecipient];
composerController?.listBccEmailAddress = [bccRecipient];
composerController?.listReplyToEmailAddress = [replyToRecipient];
final selectedIdentity = Identity(id: IdentityId(Id('alice')));
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
selectedIdentityId: selectedIdentity.id,
identities: [selectedIdentity]));
final savedEmailDraft = SavedEmailDraft(
content: emailContent,
@@ -452,15 +469,30 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(identities: [identity]),
);
composerController?.onChangeTextEditorWeb(emailContent);
composerController?.subjectEmail.value = emailSubject;
composerController?.listToEmailAddress = [toRecipient];
composerController?.listCcEmailAddress = [ccRecipient];
composerController?.listBccEmailAddress = [bccRecipient];
composerController?.listReplyToEmailAddress = [replyToRecipient];
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(identities: [identity]));
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
final savedEmailDraft = SavedEmailDraft(
@@ -494,7 +526,29 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
final selectedIdentity = Identity(
id: IdentityId(Id('alice')),
mayDelete: true,
);
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(selectedIdentityId: selectedIdentity.id),
);
composerController?.onChangeTextEditorWeb(emailContent);
composerController?.subjectEmail.value = emailSubject;
composerController?.listToEmailAddress = [toRecipient];
@@ -503,11 +557,6 @@ void main() {
composerController?.listReplyToEmailAddress = [replyToRecipient];
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
final selectedIdentity = Identity(
id: IdentityId(Id('alice')),
mayDelete: true);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(selectedIdentityId: selectedIdentity.id));
when(mockGetAllIdentitiesInteractor.execute(any, any)).thenAnswer(
(_) => Stream.value(
Right(GetAllIdentitiesSuccess([selectedIdentity], null))));
@@ -543,7 +592,24 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(),
);
composerController?.onChangeTextEditorWeb(emailContent);
composerController?.subjectEmail.value = emailSubject;
composerController?.listToEmailAddress = [toRecipient];
@@ -555,8 +621,6 @@ void main() {
final identity = Identity(
id: IdentityId(Id('alice')),
mayDelete: true);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments());
when(mockGetAllIdentitiesInteractor.execute(any, any)).thenAnswer(
(_) => Stream.value(
Right(GetAllIdentitiesSuccess([identity], null))));
@@ -828,27 +892,43 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
composerController?.onChangeTextEditorWeb(emailContent);
final selectedIdentity = Identity(id: IdentityId(Id('alice')));
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
emailActionType: EmailActionType.editDraft,
emailContents: emailContent,
presentationEmail: PresentationEmail(
id: EmailId(Id('some-email-id')),
subject: emailSubject,
to: {toRecipient},
cc: {ccRecipient},
bcc: {bccRecipient},
replyTo: {replyToRecipient},
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),
selectedIdentityId: selectedIdentity.id,
identities: [selectedIdentity]));
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.editDraft,
emailContents: emailContent,
presentationEmail: PresentationEmail(
id: EmailId(Id('some-email-id')),
subject: emailSubject,
to: {toRecipient},
cc: {ccRecipient},
bcc: {bccRecipient},
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk,
),
),
selectedIdentityId: selectedIdentity.id,
identities: [selectedIdentity],
),
);
composerController?.onChangeTextEditorWeb(emailContent);
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
@@ -883,13 +963,24 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
composerController?.onChangeTextEditorWeb(emailContent);
final identity = Identity(id: IdentityId(Id('alice')));
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.editDraft,
emailContents: emailContent,
presentationEmail: PresentationEmail(
@@ -901,8 +992,14 @@ void main() {
replyTo: {replyToRecipient},
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),
identities: [identity]));
role: PresentationMailbox.roleJunk,
),
),
identities: [identity],
),
);
composerController?.onChangeTextEditorWeb(emailContent);
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
@@ -937,15 +1034,27 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
composerController?.onChangeTextEditorWeb(emailContent);
final selectedIdentity = Identity(
id: IdentityId(Id('alice')),
mayDelete: true);
mayDelete: true,
);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.editDraft,
emailContents: emailContent,
presentationEmail: PresentationEmail(
@@ -957,8 +1066,15 @@ void main() {
replyTo: {replyToRecipient},
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),
selectedIdentityId: selectedIdentity.id));
role: PresentationMailbox.roleJunk,
),
),
selectedIdentityId: selectedIdentity.id,
),
);
composerController?.onChangeTextEditorWeb(emailContent);
when(mockGetAllIdentitiesInteractor.execute(any, any)).thenAnswer(
(_) => Stream.value(
Right(GetAllIdentitiesSuccess([selectedIdentity], null))));
@@ -996,15 +1112,27 @@ void main() {
() async {
// arrange
PlatformInfo.isTestingForWeb = true;
composerController?.onChangeTextEditorWeb(emailContent);
final identity = Identity(
id: IdentityId(Id('alice')),
mayDelete: true);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
mayDelete: true,
);
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.editDraft,
emailContents: emailContent,
presentationEmail: PresentationEmail(
@@ -1016,7 +1144,14 @@ void main() {
replyTo: {replyToRecipient},
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),));
role: PresentationMailbox.roleJunk,
),
),
),
);
composerController?.onChangeTextEditorWeb(emailContent);
when(mockGetAllIdentitiesInteractor.execute(any, any)).thenAnswer(
(_) => Stream.value(
Right(GetAllIdentitiesSuccess([identity], null))));
@@ -1347,16 +1482,34 @@ void main() {
PlatformInfo.isTestingForWeb = true;
final selectedIdentity = Identity(id: IdentityId(Id('alice')));
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.reply,
emailContents: emailContent,
presentationEmail: PresentationEmail(
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),
role: PresentationMailbox.roleJunk,
),
),
selectedIdentityId: selectedIdentity.id,
identities: [selectedIdentity]));
identities: [selectedIdentity],
),
);
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
@@ -1381,15 +1534,33 @@ void main() {
PlatformInfo.isTestingForWeb = true;
final identity = Identity(id: IdentityId(Id('alice')));
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.reply,
emailContents: emailContent,
presentationEmail: PresentationEmail(
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),
identities: [identity]));
role: PresentationMailbox.roleJunk,
),
),
identities: [identity],
),
);
when(mockUploadController.attachmentsUploaded).thenReturn([attachment]);
@@ -1416,15 +1587,34 @@ void main() {
final selectedIdentity = Identity(
id: IdentityId(Id('alice')),
mayDelete: true);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.reply,
emailContents: emailContent,
presentationEmail: PresentationEmail(
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),
selectedIdentityId: selectedIdentity.id));
role: PresentationMailbox.roleJunk,
),
),
selectedIdentityId: selectedIdentity.id,
),
);
when(mockGetAllIdentitiesInteractor.execute(any, any)).thenAnswer(
(_) => Stream.value(
Right(GetAllIdentitiesSuccess([selectedIdentity], null))));
@@ -1455,14 +1645,32 @@ void main() {
id: IdentityId(Id('alice')),
mayDelete: true);
when(mockMailboxDashBoardController.composerArguments).thenReturn(
ComposerArguments(
composerController = ComposerController(
mockLocalFilePickerInteractor,
mockLocalImagePickerInteractor,
mockGetEmailContentInteractor,
mockGetAllIdentitiesInteractor,
mockUploadController,
mockRemoveComposerCacheOnWebInteractor,
mockSaveComposerCacheOnWebInteractor,
mockDownloadImageAsBase64Interactor,
mockTransformHtmlEmailContentInteractor,
mockGetAlwaysReadReceiptSettingInteractor,
mockCreateNewAndSendEmailInteractor,
mockCreateNewAndSaveEmailToDraftsInteractor,
mockPrintEmailInteractor,
composerArgs: ComposerArguments(
emailActionType: EmailActionType.reply,
emailContents: emailContent,
presentationEmail: PresentationEmail(
mailboxContain: PresentationMailbox(
MailboxId(Id('some-mailbox-id')),
role: PresentationMailbox.roleJunk)),));
role: PresentationMailbox.roleJunk,
),
),
),
);
when(mockGetAllIdentitiesInteractor.execute(any, any)).thenAnswer(
(_) => Stream.value(
Right(GetAllIdentitiesSuccess([identity], null))));
@@ -20,6 +20,7 @@ import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:rxdart/subjects.dart';
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_multiple_emails_permanently_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_restored_deleted_message_interactor.dart';
@@ -178,6 +179,7 @@ const fallbackGenerators = {
MockSpec<TwakeAppManager>(),
MockSpec<GetAllIdentitiesInteractor>(),
MockSpec<GetIdentityCacheOnWebInteractor>(),
MockSpec<ComposerManager>(),
])
void main() {
// mock mailbox dashboard controller direct dependencies
@@ -263,6 +265,7 @@ void main() {
final refreshAllMailboxInteractor = MockRefreshAllMailboxInteractor();
final removeComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor();
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
final composerManager = MockComposerManager();
late MailboxController mailboxController;
// mock thread controller direct dependencies
@@ -314,6 +317,7 @@ void main() {
Get.put<UpdateAccountCacheInteractor>(updateAccountCacheInteractor);
Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor);
Get.put<RemoveComposerCacheOnWebInteractor>(removeComposerCacheOnWebInteractor);
Get.put<ComposerManager>(composerManager);
searchController = SearchController(
quickSearchEmailInteractor,
@@ -349,6 +353,7 @@ void main() {
getRestoredDeletedMessageInteractor,
removeComposerCacheOnWebInteractor,
getAllIdentitiesInteractor,
composerManager,
);
});
@@ -20,6 +20,7 @@ import 'package:model/extensions/mailbox_extension.dart';
import 'package:rxdart/subjects.dart';
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/manager/composer_manager.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/delete_multiple_emails_permanently_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_restored_deleted_message_interactor.dart';
@@ -180,6 +181,7 @@ const fallbackGenerators = {
MockSpec<ToastManager>(),
MockSpec<TwakeAppManager>(),
MockSpec<GetIdentityCacheOnWebInteractor>(),
MockSpec<ComposerManager>(),
])
void main() {
final moveToMailboxInteractor = MockMoveToMailboxInteractor();
@@ -250,6 +252,7 @@ void main() {
final refreshAllMailboxInteractor = MockRefreshAllMailboxInteractor();
final removeComposerCacheOnWebInteractor = MockRemoveComposerCacheOnWebInteractor();
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
final composerManager = MockComposerManager();
final getEmailsInMailboxInteractor = MockGetEmailsInMailboxInteractor();
final refreshChangesEmailsInMailboxInteractor = MockRefreshChangesEmailsInMailboxInteractor();
@@ -312,6 +315,7 @@ void main() {
Get.put<UpdateAccountCacheInteractor>(updateAccountCacheInteractor);
Get.put<GetAllIdentitiesInteractor>(getAllIdentitiesInteractor);
Get.put<RemoveComposerCacheOnWebInteractor>(removeComposerCacheOnWebInteractor);
Get.put<ComposerManager>(composerManager);
when(emailReceiveManager.pendingSharedFileInfo).thenAnswer((_) => BehaviorSubject.seeded([]));
@@ -348,6 +352,7 @@ void main() {
getRestoredDeletedMessageInteractor,
removeComposerCacheOnWebInteractor,
getAllIdentitiesInteractor,
composerManager,
);
Get.put(mailboxDashboardController);
mailboxDashboardController.onReady();