From f7805594eb2e8748b5ab726044ba9a42f0c2b5ad Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 22 Apr 2024 10:37:13 +0700 Subject: [PATCH] TF-2821 calendar event maybe integrate single email controller --- .../calendar_event_interactor_bindings.dart | 2 ++ .../controller/single_email_controller.dart | 27 ++++++++++++++--- .../single_email_controller_test.dart | 29 +++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/lib/features/email/presentation/bindings/calendar_event_interactor_bindings.dart b/lib/features/email/presentation/bindings/calendar_event_interactor_bindings.dart index 788d05119..be1e27048 100644 --- a/lib/features/email/presentation/bindings/calendar_event_interactor_bindings.dart +++ b/lib/features/email/presentation/bindings/calendar_event_interactor_bindings.dart @@ -10,6 +10,7 @@ import 'package:tmail_ui_user/features/email/data/network/calendar_event_api.dar import 'package:tmail_ui_user/features/email/data/repository/calendar_event_repository_impl.dart'; import 'package:tmail_ui_user/features/email/domain/repository/calendar_event_repository.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart'; import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart'; import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart'; @@ -36,6 +37,7 @@ class CalendarEventInteractorBindings extends InteractorsBindings { void bindingsInteractor() { Get.lazyPut(() => ParseCalendarEventInteractor(Get.find())); Get.lazyPut(() => AcceptCalendarEventInteractor(Get.find())); + Get.lazyPut(() => MaybeCalendarEventInteractor(Get.find())); } @override diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index a2aa77aff..4586c8178 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -37,6 +37,7 @@ import 'package:tmail_ui_user/features/email/domain/model/move_action.dart'; import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart'; import 'package:tmail_ui_user/features/email/domain/model/send_receipt_to_sender_request.dart'; import 'package:tmail_ui_user/features/email/domain/state/calendar_event_accept_state.dart'; +import 'package:tmail_ui_user/features/email/domain/state/calendar_event_maybe_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reply_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/download_attachment_for_web_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/download_attachments_state.dart'; @@ -51,6 +52,7 @@ import 'package:tmail_ui_user/features/email/domain/state/send_receipt_to_sender import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/view_attachment_for_web_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/download_attachments_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart'; @@ -124,6 +126,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { SendReceiptToSenderInteractor? _sendReceiptToSenderInteractor; ParseCalendarEventInteractor? _parseCalendarEventInteractor; AcceptCalendarEventInteractor? _acceptCalendarEventInteractor; + MaybeCalendarEventInteractor? _maybeCalendarEventInteractor; final emailContents = RxnString(); final attachments = [].obs; @@ -389,6 +392,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { _sendReceiptToSenderInteractor = getBinding(); _parseCalendarEventInteractor = getBinding(); _acceptCalendarEventInteractor = getBinding(); + _maybeCalendarEventInteractor = getBinding(); } void _injectCalendarEventBindings(Session? session, AccountId? accountId) { @@ -1691,20 +1695,35 @@ class SingleEmailController extends BaseController with AppLoaderMixin { case EventActionType.yes: _acceptCalendarEventAction(); break; + case EventActionType.maybe: + _maybeCalendarEventAction(); + break; default: break; } } void _acceptCalendarEventAction() { - if (_acceptCalendarEventInteractor == null || _displayingEventBlobId == null) return; - - if (mailboxDashBoardController.accountId.value != null) { + if (_acceptCalendarEventInteractor == null + || _displayingEventBlobId == null + || mailboxDashBoardController.accountId.value == null) { + consumeState(Stream.value(Left(CalendarEventAcceptFailure()))); + } else { consumeState(_acceptCalendarEventInteractor!.execute( mailboxDashBoardController.accountId.value!, {_displayingEventBlobId!})); + } + } + + void _maybeCalendarEventAction() { + if (_maybeCalendarEventInteractor == null + || _displayingEventBlobId == null + || mailboxDashBoardController.accountId.value == null) { + consumeState(Stream.value(Left(CalendarEventMaybeFailure()))); } else { - consumeState(Stream.value(Left(CalendarEventAcceptFailure()))); + consumeState(_maybeCalendarEventInteractor!.execute( + mailboxDashBoardController.accountId.value!, + {_displayingEventBlobId!})); } } diff --git a/test/features/email/presentation/controller/single_email_controller_test.dart b/test/features/email/presentation/controller/single_email_controller_test.dart index 62c12ea9b..57791021c 100644 --- a/test/features/email/presentation/controller/single_email_controller_test.dart +++ b/test/features/email/presentation/controller/single_email_controller_test.dart @@ -18,6 +18,7 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart'; import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart'; import 'package:tmail_ui_user/features/email/domain/state/view_attachment_for_web_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart'; +import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/download_attachments_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart'; @@ -77,6 +78,7 @@ const fallbackGenerators = { MockSpec(), MockSpec(), MockSpec(), + MockSpec(), ]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -293,5 +295,32 @@ void main() { verify(acceptCalendarEventInteractor.execute(testAccountId, {blobId})).called(1); }); }); + + group('maybe test:', () { + final maybeCalendarEventInteractor = MockMaybeCalendarEventInteractor(); + + test('should call execute on AcceptCalendarEventInteractor ' + 'when onCalendarEventReplyAction is called on EventActionType.yes', () async { + // arrange + when(mailboxDashboardController.selectedEmail).thenReturn(Rxn(null)); + when(mailboxDashboardController.emailUIAction).thenReturn(Rxn(null)); + when(mailboxDashboardController.viewState).thenReturn(Rx(Right(UIState.idle))); + singleEmailController.onInit(); + Get.put(maybeCalendarEventInteractor); + mailboxDashboardController.accountId.refresh(); + singleEmailController.handleSuccessViewState( + ParseCalendarEventSuccess([ + BlobCalendarEvent( + blobId: blobId, + calendarEventList: [calendarEvent])])); + + // act + singleEmailController.onCalendarEventReplyAction(EventActionType.maybe); + await untilCalled(maybeCalendarEventInteractor.execute(any, any)); + + // assert + verify(maybeCalendarEventInteractor.execute(testAccountId, {blobId})).called(1); + }); + }); }); }