TW-2835 Add right exception thrower for database operation of AuthenticationOIDCDatasource
This commit is contained in:
committed by
Dat H. Pham
parent
7755fc30e2
commit
79765414d5
@@ -33,6 +33,7 @@ abstract class ReloadableController extends BaseController {
|
||||
if (failure is GetCredentialFailure ||
|
||||
failure is GetStoredTokenOidcFailure ||
|
||||
failure is GetAuthenticatedAccountFailure) {
|
||||
log('ReloadableController::handleFailureViewState(): failure: $failure');
|
||||
goToLogin();
|
||||
} else if (failure is GetSessionFailure) {
|
||||
_handleGetSessionFailure(failure.exception);
|
||||
|
||||
@@ -13,13 +13,15 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
|
||||
final TokenOidcCacheManager _tokenOidcCacheManager;
|
||||
final OidcConfigurationCacheManager _oidcConfigurationCacheManager;
|
||||
final ExceptionThrower _exceptionThrower;
|
||||
final ExceptionThrower _cacheExceptionThrower;
|
||||
|
||||
AuthenticationOIDCDataSourceImpl(
|
||||
this._oidcHttpClient,
|
||||
this._authenticationClient,
|
||||
this._tokenOidcCacheManager,
|
||||
this._oidcConfigurationCacheManager,
|
||||
this._exceptionThrower
|
||||
this._exceptionThrower,
|
||||
this._cacheExceptionThrower
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -54,28 +56,28 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
|
||||
Future<TokenOIDC> getStoredTokenOIDC(String tokenIdHash) {
|
||||
return Future.sync(() async {
|
||||
return await _tokenOidcCacheManager.getTokenOidc(tokenIdHash);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}).catchError(_cacheExceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> persistTokenOIDC(TokenOIDC tokenOidc) {
|
||||
return Future.sync(() async {
|
||||
return await _tokenOidcCacheManager.persistOneTokenOidc(tokenOidc);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}).catchError(_cacheExceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<OIDCConfiguration> getStoredOidcConfiguration() {
|
||||
return Future.sync(() async {
|
||||
return await _oidcConfigurationCacheManager.getOidcConfiguration();
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}).catchError(_cacheExceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> persistAuthorityOidc(String authority) {
|
||||
return Future.sync(() async {
|
||||
return await _oidcConfigurationCacheManager.persistAuthorityOidc(authority);
|
||||
}).catchError(_exceptionThrower.throwException);
|
||||
}).catchError(_cacheExceptionThrower.throwException);
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -78,6 +78,7 @@ class CredentialBindings extends InteractorsBindings {
|
||||
Get.find<TokenOidcCacheManager>(),
|
||||
Get.find<OidcConfigurationCacheManager>(),
|
||||
Get.find<RemoteExceptionThrower>(),
|
||||
Get.find<CacheExceptionThrower>(),
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/presentation/utils/app_toast.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:model/account/authentication_type.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_email_cache_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_login_url_cache_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_login_username_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/cleanup/domain/usecases/cleanup_recent_search_cache_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/home/domain/usecases/get_session_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/home/presentation/home_controller.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_state.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import '../../email/presentation/controller/single_email_controller_test.mocks.dart';
|
||||
import '../../mailbox_dashboard/presentation/controller/mailbox_dashboard_controller_test.mocks.dart';
|
||||
import 'home_controller_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([
|
||||
MockSpec<CleanupEmailCacheInteractor>(),
|
||||
MockSpec<CleanupRecentSearchCacheInteractor>(),
|
||||
MockSpec<CleanupRecentLoginUrlCacheInteractor>(),
|
||||
MockSpec<CleanupRecentLoginUsernameCacheInteractor>(),
|
||||
])
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
|
||||
late HomeController homeController;
|
||||
late MockCleanupEmailCacheInteractor cleanupEmailCacheInteractor;
|
||||
late MockEmailReceiveManager emailReceiveManager;
|
||||
late MockCleanupRecentSearchCacheInteractor cleanupRecentSearchCacheInteractor;
|
||||
late MockCleanupRecentLoginUrlCacheInteractor cleanupRecentLoginUrlCacheInteractor;
|
||||
late MockCleanupRecentLoginUsernameCacheInteractor cleanupRecentLoginUsernameCacheInteractor;
|
||||
|
||||
late MockGetSessionInteractor mockGetSessionInteractor;
|
||||
late MockGetAuthenticatedAccountInteractor mockGetAuthenticatedAccountInteractor;
|
||||
late MockUpdateAuthenticationAccountInteractor mockUpdateAuthenticationAccountInteractor;
|
||||
|
||||
late CachingManager mockCachingManager;
|
||||
late LanguageCacheManager mockLanguageCacheManager;
|
||||
late MockAuthorizationInterceptors mockAuthorizationInterceptors;
|
||||
late MockDynamicUrlInterceptors mockDynamicUrlInterceptors;
|
||||
late MockDeleteCredentialInteractor mockDeleteCredentialInteractor;
|
||||
late MockLogoutOidcInteractor mockLogoutOidcInteractor;
|
||||
late MockDeleteAuthorityOidcInteractor mockDeleteAuthorityOidcInteractor;
|
||||
late MockAppToast mockAppToast;
|
||||
late MockImagePaths mockImagePaths;
|
||||
late MockResponsiveUtils mockResponsiveUtils;
|
||||
late MockUuid mockUuid;
|
||||
|
||||
setUpAll(() {
|
||||
cleanupEmailCacheInteractor = MockCleanupEmailCacheInteractor();
|
||||
emailReceiveManager = MockEmailReceiveManager();
|
||||
cleanupRecentSearchCacheInteractor = MockCleanupRecentSearchCacheInteractor();
|
||||
cleanupRecentLoginUrlCacheInteractor = MockCleanupRecentLoginUrlCacheInteractor();
|
||||
cleanupRecentLoginUsernameCacheInteractor = MockCleanupRecentLoginUsernameCacheInteractor();
|
||||
|
||||
// mock reloadable controller
|
||||
mockGetSessionInteractor = MockGetSessionInteractor();
|
||||
mockGetAuthenticatedAccountInteractor = MockGetAuthenticatedAccountInteractor();
|
||||
mockUpdateAuthenticationAccountInteractor = MockUpdateAuthenticationAccountInteractor();
|
||||
|
||||
//mock base controller
|
||||
mockCachingManager = MockCachingManager();
|
||||
mockLanguageCacheManager = MockLanguageCacheManager();
|
||||
mockAuthorizationInterceptors = MockAuthorizationInterceptors();
|
||||
mockDynamicUrlInterceptors = MockDynamicUrlInterceptors();
|
||||
mockDeleteCredentialInteractor = MockDeleteCredentialInteractor();
|
||||
mockLogoutOidcInteractor = MockLogoutOidcInteractor();
|
||||
mockDeleteAuthorityOidcInteractor = MockDeleteAuthorityOidcInteractor();
|
||||
mockAppToast = MockAppToast();
|
||||
mockImagePaths = MockImagePaths();
|
||||
mockResponsiveUtils = MockResponsiveUtils();
|
||||
mockUuid = MockUuid();
|
||||
|
||||
Get.put<GetSessionInteractor>(mockGetSessionInteractor);
|
||||
Get.put<GetAuthenticatedAccountInteractor>(mockGetAuthenticatedAccountInteractor);
|
||||
Get.put<UpdateAuthenticationAccountInteractor>(mockUpdateAuthenticationAccountInteractor);
|
||||
|
||||
Get.put<CachingManager>(mockCachingManager);
|
||||
Get.put<LanguageCacheManager>(mockLanguageCacheManager);
|
||||
Get.put<AuthorizationInterceptors>(mockAuthorizationInterceptors);
|
||||
Get.put<AuthorizationInterceptors>(
|
||||
mockAuthorizationInterceptors,
|
||||
tag: BindingTag.isolateTag,
|
||||
);
|
||||
Get.put<DynamicUrlInterceptors>(mockDynamicUrlInterceptors);
|
||||
Get.put<DeleteCredentialInteractor>(mockDeleteCredentialInteractor);
|
||||
Get.put<LogoutOidcInteractor>(mockLogoutOidcInteractor);
|
||||
Get.put<DeleteAuthorityOidcInteractor>(mockDeleteAuthorityOidcInteractor);
|
||||
Get.put<AppToast>(mockAppToast);
|
||||
Get.put<ImagePaths>(mockImagePaths);
|
||||
Get.put<ResponsiveUtils>(mockResponsiveUtils);
|
||||
Get.put<Uuid>(mockUuid);
|
||||
Get.testMode = true;
|
||||
|
||||
homeController = HomeController(
|
||||
cleanupEmailCacheInteractor,
|
||||
emailReceiveManager,
|
||||
cleanupRecentSearchCacheInteractor,
|
||||
cleanupRecentLoginUrlCacheInteractor,
|
||||
cleanupRecentLoginUsernameCacheInteractor
|
||||
);
|
||||
});
|
||||
|
||||
group("HomeController::onData test", () {
|
||||
test("WHEN onData receive `GetStoredTokenOidcFailure` "
|
||||
"THEN handleFailureViewState should be called", () {
|
||||
// Arrange
|
||||
final failure = Left<Failure, Success>(GetStoredTokenOidcFailure(Exception()));
|
||||
when(mockAuthorizationInterceptors.authenticationType).thenReturn(AuthenticationType.oidc);
|
||||
|
||||
// Act
|
||||
homeController.onData(failure);
|
||||
|
||||
// Assert
|
||||
verifyNever(mockAppToast.showToastMessage(any, any));
|
||||
verifyNever(mockAppToast.showToastErrorMessage(any, any));
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user