From f856981053fdb2052d00762836921e5ea7d111c1 Mon Sep 17 00:00:00 2001 From: DatDang Date: Thu, 7 Mar 2024 11:18:16 +0700 Subject: [PATCH] TF-2681 Create get always read receipt setting interactor --- ...get_always_read_receipt_setting_state.dart | 18 ++++++ ...lways_read_receipt_setting_interactor.dart | 23 ++++++++ ..._read_receipt_setting_interactor_test.dart | 55 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 lib/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart create mode 100644 lib/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart create mode 100644 test/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor_test.dart diff --git a/lib/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart b/lib/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart new file mode 100644 index 000000000..b34798335 --- /dev/null +++ b/lib/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart @@ -0,0 +1,18 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class GettingAlwaysReadReceiptSetting extends LoadingState {} + +class GetAlwaysReadReceiptSettingSuccess extends UIState { + final bool alwaysReadReceiptEnabled; + + GetAlwaysReadReceiptSettingSuccess({required this.alwaysReadReceiptEnabled}); + + @override + List get props => [alwaysReadReceiptEnabled]; +} + +class GetAlwaysReadReceiptSettingFailure extends FeatureFailure { + GetAlwaysReadReceiptSettingFailure(dynamic exception) + : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart b/lib/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart new file mode 100644 index 000000000..dd1202375 --- /dev/null +++ b/lib/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart @@ -0,0 +1,23 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart'; +import 'package:tmail_ui_user/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart'; + +class GetAlwaysReadReceiptSettingInteractor { + final ServerSettingsRepository _serverSettingsRepository; + + GetAlwaysReadReceiptSettingInteractor(this._serverSettingsRepository); + + Stream> execute(AccountId accountId) async* { + try { + yield Right(GettingAlwaysReadReceiptSetting()); + final result = await _serverSettingsRepository.getServerSettings(accountId); + yield Right(GetAlwaysReadReceiptSettingSuccess( + alwaysReadReceiptEnabled: result.settings?.alwaysReadReceipts ?? true)); + } catch (e) { + yield Left(GetAlwaysReadReceiptSettingFailure(e)); + } + } +} \ No newline at end of file diff --git a/test/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor_test.dart b/test/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor_test.dart new file mode 100644 index 000000000..166d1ad7f --- /dev/null +++ b/test/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor_test.dart @@ -0,0 +1,55 @@ +import 'package:dartz/dartz.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:server_settings/server_settings/tmail_server_settings.dart'; +import 'package:tmail_ui_user/features/server_settings/domain/exceptions/server_settings_exception.dart'; +import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart'; +import 'package:tmail_ui_user/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart'; +import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart'; + +import 'get_always_read_receipt_setting_interactor_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec()]) +void main() { + final accountId = AccountId(Id('123')); + final serverSettingsRepository = MockServerSettingsRepository(); + final getAlwaysReadReceiptSettingInteractor = + GetAlwaysReadReceiptSettingInteractor(serverSettingsRepository); + + group('get always read receipt setting interactor', () { + test('should return right with value returned from repository', () { + // arrange + when(serverSettingsRepository.getServerSettings(any)) + .thenAnswer((_) async => TMailServerSettings( + settings: TMailServerSettingOptions( + alwaysReadReceipts: false))); + + // assert + expect( + getAlwaysReadReceiptSettingInteractor.execute(accountId), + emitsInOrder([ + Right(GettingAlwaysReadReceiptSetting()), + Right(GetAlwaysReadReceiptSettingSuccess(alwaysReadReceiptEnabled: false)), + ]) + ); + }); + + test('should return left with exception returned from repository', () { + // arrange + final exception = NotFoundServerSettingsException(); + when(serverSettingsRepository.getServerSettings(any)).thenThrow(exception); + + // assert + expect( + getAlwaysReadReceiptSettingInteractor.execute(accountId), + emitsInOrder([ + Right(GettingAlwaysReadReceiptSetting()), + Left(GetAlwaysReadReceiptSettingFailure(exception)), + ]) + ); + }); + }); +} \ No newline at end of file