diff --git a/lib/features/base/extensions/handle_mailbox_action_type_extension.dart b/lib/features/base/extensions/handle_mailbox_action_type_extension.dart new file mode 100644 index 000000000..0141c42de --- /dev/null +++ b/lib/features/base/extensions/handle_mailbox_action_type_extension.dart @@ -0,0 +1,117 @@ +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart'; +import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; +import 'package:pointer_interceptor/pointer_interceptor.dart'; +import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/exceptions/empty_folder_name_exception.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/exceptions/invalid_mail_format_exception.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subaddressing_action.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/state/subaddressing_mailbox_state.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/copy_subaddress_widget.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; + +extension HandleMailboxActionTypeExtension on BaseMailboxController { + void copySubAddressAction(BuildContext context, String subAddress) { + Clipboard.setData(ClipboardData(text: subAddress)); + appToast.showToastSuccessMessage( + context, + AppLocalizations.of(context).emailSubaddressCopiedToClipboard, + ); + } + + String getSubAddress(String userEmail, String folderName) { + if (folderName.isEmpty) { + throw EmptyFolderNameException(folderName); + } + + final atIndex = userEmail.indexOf('@'); + if (atIndex <= 0 || atIndex == userEmail.length - 1) { + throw InvalidMailFormatException(userEmail); + } + + return '${userEmail.substring(0, atIndex)}+$folderName@${userEmail.substring(atIndex + 1)}'; + } + + void openConfirmationDialogSubAddressingAction( + BuildContext context, + MailboxId mailboxId, + String mailboxName, + String subAddress, + Map?>? currentRights, + { + required AllowSubaddressingActionCallback onAllowSubAddressingAction + } + ) { + if (responsiveUtils.isLandscapeMobile(context) || + responsiveUtils.isPortraitMobile(context)) { + (ConfirmationDialogActionSheetBuilder(context) + ..messageText(AppLocalizations.of(context) + .message_confirmation_dialog_allow_subaddressing_mobile( + mailboxName, + subAddress, + ) + ) + ..onCancelAction(AppLocalizations.of(context).cancel, popBack) + ..onConfirmAction( + AppLocalizations.of(context).allow, + () => onAllowSubAddressingAction( + mailboxId, + currentRights, + MailboxActions.allowSubaddressing, + )) + ).show(); + } else { + Get.dialog( + PointerInterceptor( + child: ConfirmationDialogBuilder( + key: const Key('confirm_dialog_subAddressing'), + imagePath: imagePaths, + title: AppLocalizations.of(context).allowSubaddressing, + textContent: AppLocalizations.of(context) + .message_confirmation_dialog_allow_subaddressing(mailboxName), + confirmText: AppLocalizations.of(context).allow, + cancelText: AppLocalizations.of(context).cancel, + additionalWidgetContent: CopySubaddressWidget( + imagePath: imagePaths, + subaddress: subAddress, + onCopyButtonAction: () => copySubAddressAction( + context, + subAddress, + ), + ), + onConfirmButtonAction: () => onAllowSubAddressingAction( + mailboxId, + currentRights, + MailboxActions.allowSubaddressing, + ), + onCancelButtonAction: popBack, + onCloseButtonAction: popBack, + ), + ), + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + ); + } + } + + void handleSubAddressingFailure(SubaddressingFailure failure) { + if (currentOverlayContext != null && currentContext != null) { + final messageError = AppLocalizations.of(currentContext!).toastMessageSubaddressingFailure; + appToast.showToastErrorMessage(currentOverlayContext!, messageError); + } + } + + void handleSubAddressingSuccess(SubaddressingSuccess success) { + appToast.showToastSuccessMessage( + currentOverlayContext!, + success.subaddressingAction == MailboxSubaddressingAction.allow + ? AppLocalizations.of(currentContext!).toastMessageAllowSubaddressingSuccess + : AppLocalizations.of(currentContext!).toastMessageDisallowSubaddressingSuccess, + ); + } +} diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index c89f8d896..06d07721a 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -5,7 +5,6 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; @@ -19,6 +18,7 @@ import 'package:model/model.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:rxdart/transformers.dart'; import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; +import 'package:tmail_ui_user/features/base/extensions/handle_mailbox_action_type_extension.dart'; import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/launcher_application_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/mailbox_action_handler_mixin.dart'; @@ -32,8 +32,6 @@ import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state. import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart'; import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/exceptions/empty_folder_name_exception.dart'; -import 'package:tmail_ui_user/features/mailbox/domain/exceptions/invalid_mail_format_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/set_mailbox_name_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/null_session_or_accountid_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; @@ -78,7 +76,6 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/open_mailbox_view_event.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart'; -import 'package:tmail_ui_user/features/mailbox/presentation/widgets/copy_subaddress_widget.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart'; @@ -210,7 +207,7 @@ class MailboxController extends BaseMailboxController } else if (success is SubscribeMultipleMailboxHasSomeSuccess) { _handleUnsubscribeMultipleMailboxHasSomeSuccess(success); } else if (success is SubaddressingSuccess) { - _handleSubaddressingSuccess(success); + handleSubAddressingSuccess(success); } else if (success is CreateDefaultMailboxAllSuccess) { _handleCreateDefaultFolderIfMissingSuccess(success); } @@ -226,7 +223,7 @@ class MailboxController extends BaseMailboxController } else if (failure is DeleteMultipleMailboxFailure) { _deleteMailboxFailure(failure); } else if (failure is SubaddressingFailure) { - _handleSubaddressingFailure(failure); + handleSubAddressingFailure(failure); } } @@ -1236,11 +1233,11 @@ class MailboxController extends BaseMailboxController break; case MailboxActions.copySubaddress: try{ - final subaddress = getSubaddress( + final subaddress = getSubAddress( mailboxDashBoardController.getOwnEmailAddress(), findNodePathWithSeparator(mailbox.id, '.')!, ); - copySubaddressAction(context, subaddress); + copySubAddressAction(context, subaddress); } catch (error) { appToast.showToastErrorMessage(context, AppLocalizations.of(context).errorWhileFetchingSubaddress); } @@ -1254,19 +1251,17 @@ class MailboxController extends BaseMailboxController break; case MailboxActions.allowSubaddressing: try{ - final subaddress = getSubaddress( + final subAddress = getSubAddress( mailboxDashBoardController.getOwnEmailAddress(), findNodePathWithSeparator(mailbox.id, '.')!, ); - openConfirmationDialogSubaddressingAction( + openConfirmationDialogSubAddressingAction( context, - responsiveUtils, - imagePaths, mailbox.id, mailbox.getDisplayName(context), - subaddress, + subAddress, mailbox.rights, - onAllowSubaddressingAction: _handleSubaddressingAction + onAllowSubAddressingAction: _handleSubaddressingAction, ); } catch (error) { appToast.showToastErrorMessage(context, AppLocalizations.of(context).errorWhileFetchingSubaddress); @@ -1540,28 +1535,14 @@ class MailboxController extends BaseMailboxController consumeState(_subaddressingInteractor.execute(session, accountId, allowSubaddressingRequest)); } else { - _handleSubaddressingFailure(SubaddressingFailure.withException(NullSessionOrAccountIdException())); + handleSubAddressingFailure( + SubaddressingFailure.withException(NullSessionOrAccountIdException()), + ); } popBack(); } - void _handleSubaddressingFailure(SubaddressingFailure failure) { - if (currentOverlayContext != null && currentContext != null) { - final messageError = AppLocalizations.of(currentContext!).toastMessageSubaddressingFailure; - appToast.showToastErrorMessage(currentOverlayContext!, messageError); - } - } - - void _handleSubaddressingSuccess(SubaddressingSuccess success) { - appToast.showToastSuccessMessage( - currentOverlayContext!, - success.subaddressingAction == MailboxSubaddressingAction.allow - ? AppLocalizations.of(currentContext!).toastMessageAllowSubaddressingSuccess - : AppLocalizations.of(currentContext!).toastMessageDisallowSubaddressingSuccess, - ); - } - void _mailboxListScrollControllerListener() { _handleScrollTop(); _handleScrollBottom(); @@ -1640,67 +1621,4 @@ class MailboxController extends BaseMailboxController ); } } - - void openConfirmationDialogSubaddressingAction( - BuildContext context, - ResponsiveUtils responsiveUtils, - ImagePaths imagePaths, - MailboxId mailboxId, - String mailboxName, - String subaddress, - Map?>? currentRights, { - required AllowSubaddressingActionCallback onAllowSubaddressingAction - }) { - if (responsiveUtils.isLandscapeMobile(context) || responsiveUtils.isPortraitMobile(context)) { - (ConfirmationDialogActionSheetBuilder(context) - ..messageText(AppLocalizations.of(context).message_confirmation_dialog_allow_subaddressing_mobile(mailboxName, subaddress)) - ..onCancelAction(AppLocalizations.of(context).cancel, () => popBack()) - ..onConfirmAction(AppLocalizations.of(context).allow, () => onAllowSubaddressingAction(mailboxId, currentRights, MailboxActions.allowSubaddressing)) - ).show(); - } else { - Get.dialog( - PointerInterceptor( - child: ConfirmationDialogBuilder( - key: const Key('confirm_dialog_subaddressing'), - imagePath: imagePaths, - title: AppLocalizations.of(context).allowSubaddressing, - textContent: AppLocalizations.of(context).message_confirmation_dialog_allow_subaddressing(mailboxName), - confirmText: AppLocalizations.of(context).allow, - cancelText: AppLocalizations.of(context).cancel, - additionalWidgetContent: CopySubaddressWidget( - imagePath: imagePaths, - subaddress: subaddress, - onCopyButtonAction: () => copySubaddressAction(context, subaddress), - ), - onConfirmButtonAction: () => onAllowSubaddressingAction( - mailboxId, - currentRights, - MailboxActions.allowSubaddressing, - ), - onCancelButtonAction: popBack, - onCloseButtonAction: popBack, - ), - ), - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - ); - } - } - - void copySubaddressAction(BuildContext context, String subaddress) { - Clipboard.setData(ClipboardData(text: subaddress)); - appToast.showToastSuccessMessage(context, AppLocalizations.of(context).emailSubaddressCopiedToClipboard); - } - - String getSubaddress(String userEmail, String folderName) { - if (folderName.isEmpty) { - throw EmptyFolderNameException(folderName); - } - - final atIndex = userEmail.indexOf('@'); - if (atIndex <= 0 || atIndex == userEmail.length - 1) { - throw InvalidMailFormatException(userEmail); - } - - return '${userEmail.substring(0, atIndex)}+$folderName@${userEmail.substring(atIndex + 1)}'; - } } \ No newline at end of file diff --git a/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart b/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart index 0971f7275..df17880d8 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_bindings.dart @@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_inte import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/subaddressing_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; @@ -31,6 +32,16 @@ import 'package:tmail_ui_user/main/utils/ios_sharing_manager.dart'; class SearchMailboxBindings extends BaseBindings { + @override + void dependencies() { + _bindingsUtils(); + super.dependencies(); + } + + void _bindingsUtils() { + Get.lazyPut(() => TreeBuilder()); + } + @override void bindingsController() { Get.lazyPut(() => SearchMailboxController( @@ -41,6 +52,7 @@ class SearchMailboxBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), @@ -83,6 +95,8 @@ class SearchMailboxBindings extends BaseBindings { Get.lazyPut(() => SearchMailboxInteractor()); Get.lazyPut(() => SubscribeMailboxInteractor(Get.find())); Get.lazyPut(() => SubscribeMultipleMailboxInteractor(Get.find())); + Get.lazyPut(() => CreateNewMailboxInteractor(Get.find())); + Get.lazyPut(() => SubaddressingInteractor(Get.find())); } @override diff --git a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart index fb0926a5e..f3e915b24 100644 --- a/lib/features/search/mailbox/presentation/search_mailbox_controller.dart +++ b/lib/features/search/mailbox/presentation/search_mailbox_controller.dart @@ -18,11 +18,15 @@ import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; +import 'package:tmail_ui_user/features/base/extensions/handle_mailbox_action_type_extension.dart'; import 'package:tmail_ui_user/features/base/mixin/mailbox_action_handler_mixin.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/exceptions/null_session_or_accountid_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/set_mailbox_name_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_right_request.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subaddressing_action.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/move_mailbox_request.dart'; @@ -38,6 +42,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.d import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/state/subaddressing_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart'; @@ -47,6 +52,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_inte import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/usecases/subaddressing_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart'; @@ -76,6 +82,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa final SubscribeMailboxInteractor _subscribeMailboxInteractor; final SubscribeMultipleMailboxInteractor _subscribeMultipleMailboxInteractor; final CreateNewMailboxInteractor _createNewMailboxInteractor; + final SubaddressingInteractor _subAddressingInteractor; final dashboardController = Get.find(); @@ -100,6 +107,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa this._subscribeMailboxInteractor, this._subscribeMultipleMailboxInteractor, this._createNewMailboxInteractor, + this._subAddressingInteractor, TreeBuilder treeBuilder, VerifyNameInteractor verifyNameInteractor, GetAllMailboxInteractor getAllMailboxInteractor, @@ -121,19 +129,21 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa @override void handleFailureViewState(Failure failure) { - super.handleFailureViewState(failure); if (failure is SearchMailboxFailure) { _handleSearchMailboxFailure(failure); } else if (failure is CreateNewMailboxFailure) { _createNewMailboxFailure(failure); } else if (failure is RenameMailboxFailure) { _renameMailboxFailure(failure); + } else if (failure is SubaddressingFailure) { + handleSubAddressingFailure(failure); + } else { + super.handleFailureViewState(failure); } } @override void handleSuccessViewState(Success success) async { - super.handleSuccessViewState(success); if (success is GetAllMailboxSuccess) { currentMailboxState = success.currentMailboxState; await buildTree(success.mailboxList); @@ -165,6 +175,10 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa _handleSubscribeMultipleMailboxHasSomeSuccess(success); } else if (success is CreateNewMailboxSuccess) { _createNewMailboxSuccess(success); + } else if (success is SubaddressingSuccess) { + handleSubAddressingSuccess(success); + } else { + super.handleSuccessViewState(success); } } @@ -340,11 +354,81 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa case MailboxActions.recoverDeletedMessages: dashboardController.gotoEmailRecovery(); break; + case MailboxActions.copySubaddress: + try { + final subAddress = getSubAddress( + dashboardController.getOwnEmailAddress(), + findNodePathWithSeparator(mailbox.id, '.')!, + ); + copySubAddressAction(context, subAddress); + } catch (error) { + appToast.showToastErrorMessage( + context, + AppLocalizations.of(context).errorWhileFetchingSubaddress, + ); + } + break; + case MailboxActions.allowSubaddressing: + try{ + final subAddress = getSubAddress( + dashboardController.getOwnEmailAddress(), + findNodePathWithSeparator(mailbox.id, '.')!, + ); + openConfirmationDialogSubAddressingAction( + context, + mailbox.id, + mailbox.getDisplayName(context), + subAddress, + mailbox.rights, + onAllowSubAddressingAction: _handleSubAddressingAction + ); + } catch (error) { + appToast.showToastErrorMessage( + context, + AppLocalizations.of(context).errorWhileFetchingSubaddress, + ); + } + break; + case MailboxActions.disallowSubaddressing: + _handleSubAddressingAction(mailbox.id, mailbox.rights, actions); + break; default: break; } } + + void _handleSubAddressingAction( + MailboxId mailboxId, + Map?>? currentRights, + MailboxActions subAddressingAction, + ) { + final accountId = dashboardController.accountId.value; + final session = dashboardController.sessionCurrent; + + if (session != null && accountId != null) { + final allowSubAddressingRequest = MailboxRightRequest( + mailboxId, + currentRights, + subAddressingAction == MailboxActions.allowSubaddressing + ? MailboxSubaddressingAction.allow + : MailboxSubaddressingAction.disallow + ); + + consumeState(_subAddressingInteractor.execute( + session, + accountId, + allowSubAddressingRequest, + )); + } else { + handleSubAddressingFailure( + SubaddressingFailure.withException(NullSessionOrAccountIdException()), + ); + } + + popBack(); + } + void _renameMailboxAction(PresentationMailbox presentationMailbox, MailboxName newMailboxName) { if (session != null && accountId != null) { consumeState(_renameMailboxInteractor.execute( diff --git a/test/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller_test.dart b/test/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller_test.dart index 01f4d21ba..7530dde9a 100644 --- a/test/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller_test.dart +++ b/test/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller_test.dart @@ -18,6 +18,7 @@ import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:rxdart/subjects.dart'; +import 'package:tmail_ui_user/features/base/extensions/handle_mailbox_action_type_extension.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'; @@ -646,7 +647,7 @@ void main() { test('should return subaddress with valid email and folder name', () { const String userEmail = 'user@example.com'; const String folderName = 'folder'; - final result = mailboxController.getSubaddress(userEmail, folderName); + final result = mailboxController.getSubAddress(userEmail, folderName); expect(result, equals('user+folder@example.com')); }); @@ -655,28 +656,28 @@ void main() { const userEmail = '@example.com'; const folderName = 'folder'; - expect(() => mailboxController.getSubaddress(userEmail, folderName), throwsA(isA())); + expect(() => mailboxController.getSubAddress(userEmail, folderName), throwsA(isA())); }); test('should throw an error if empty folder name', () { const userEmail = 'user@example.com'; const folderName = ''; - expect(() => mailboxController.getSubaddress(userEmail, folderName), throwsA(isA())); + expect(() => mailboxController.getSubAddress(userEmail, folderName), throwsA(isA())); }); test('should throw an error if empty domain', () { const userEmail = 'user@'; const folderName = 'folder'; - expect(() => mailboxController.getSubaddress(userEmail, folderName), throwsA(isA())); + expect(() => mailboxController.getSubAddress(userEmail, folderName), throwsA(isA())); }); test('should throw an error if absent `@`', () { const userEmail = 'invalid-email-format'; const folderName = 'folder'; - expect(() => mailboxController.getSubaddress(userEmail, folderName), throwsA(isA())); + expect(() => mailboxController.getSubAddress(userEmail, folderName), throwsA(isA())); }); }); }