From a3d17b3bb2adfcb5486797a26731c5c34d5e3ab3 Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 12 Aug 2024 14:31:48 +0700 Subject: [PATCH] TF-3042 Unit test clean up public assets bindings when identity screen is closed --- .../identities_controller_test.dart | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 test/features/manage_account/presentation/profiles/identities/identities_controller_test.dart diff --git a/test/features/manage_account/presentation/profiles/identities/identities_controller_test.dart b/test/features/manage_account/presentation/profiles/identities/identities_controller_test.dart new file mode 100644 index 000000000..9c4448191 --- /dev/null +++ b/test/features/manage_account/presentation/profiles/identities/identities_controller_test.dart @@ -0,0 +1,194 @@ +import 'package:core/data/network/config/dynamic_url_interceptors.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/utils/application_manager.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:get/get.dart'; +import 'package:mockito/annotations.dart'; +import 'package:tmail_ui_user/features/caching/caching_manager.dart'; +import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.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/manage_account/data/local/language_cache_manager.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_default_identity_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_identity_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_identity_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_default_identity_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_identity_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/transform_html_signature_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/usecase/add_identity_to_public_assets_interactor.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/usecase/clean_up_public_assets_interactor.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/usecase/delete_public_assets_interactor.dart'; +import 'package:tmail_ui_user/features/public_asset/domain/usecase/remove_identity_from_public_assets_interactor.dart'; +import 'package:tmail_ui_user/features/public_asset/presentation/clean_up_public_assets_interactor_bindings.dart'; +import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart'; +import 'package:uuid/uuid.dart'; + +import 'identities_controller_test.mocks.dart'; + +mockControllerCallback() => InternalFinalCallback(callback: () {}); +const fallbackGenerators = { + #onStart: mockControllerCallback, + #onDelete: mockControllerCallback, +}; + +@GenerateNiceMocks([ + // Base controller mockspecs + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + + // Identities controller mockspecs + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(fallbackGenerators: fallbackGenerators), +]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + late IdentitiesController identitiesController; + late MockGetAllIdentitiesInteractor mockGetAllIdentitiesInteractor; + late MockDeleteIdentityInteractor mockDeleteIdentityInteractor; + late MockCreateNewIdentityInteractor mockCreateNewIdentityInteractor; + late MockEditIdentityInteractor mockEditIdentityInteractor; + late MockCreateNewDefaultIdentityInteractor mockCreateNewDefaultIdentityInteractor; + late MockEditDefaultIdentityInteractor mockEditDefaultIdentityInteractor; + late MockTransformHtmlSignatureInteractor mockTransformHtmlSignatureInteractor; + late MockManageAccountDashBoardController mockManageAccountDashBoardController; + + late MockCachingManager mockCachingManager; + late MockLanguageCacheManager 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; + late MockApplicationManager mockApplicationManager; + + setUpAll(() { + //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(); + mockApplicationManager = MockApplicationManager(); + + Get.put(mockCachingManager); + Get.put(mockLanguageCacheManager); + Get.put(mockAuthorizationInterceptors); + Get.put( + mockAuthorizationInterceptors, + tag: BindingTag.isolateTag, + ); + Get.put(mockDynamicUrlInterceptors); + Get.put(mockDeleteCredentialInteractor); + Get.put(mockLogoutOidcInteractor); + Get.put(mockDeleteAuthorityOidcInteractor); + Get.put(mockAppToast); + Get.put(mockImagePaths); + Get.put(mockResponsiveUtils); + Get.put(mockUuid); + Get.put(mockApplicationManager); + + // mock identities controller + mockGetAllIdentitiesInteractor = MockGetAllIdentitiesInteractor(); + mockDeleteIdentityInteractor = MockDeleteIdentityInteractor(); + mockCreateNewIdentityInteractor = MockCreateNewIdentityInteractor(); + mockEditIdentityInteractor = MockEditIdentityInteractor(); + mockCreateNewDefaultIdentityInteractor = MockCreateNewDefaultIdentityInteractor(); + mockEditDefaultIdentityInteractor = MockEditDefaultIdentityInteractor(); + mockTransformHtmlSignatureInteractor = MockTransformHtmlSignatureInteractor(); + + mockManageAccountDashBoardController = MockManageAccountDashBoardController(); + + Get.put(mockManageAccountDashBoardController); + + Get.testMode = true; + + identitiesController = IdentitiesController( + mockGetAllIdentitiesInteractor, + mockDeleteIdentityInteractor, + mockCreateNewIdentityInteractor, + mockEditIdentityInteractor, + mockCreateNewDefaultIdentityInteractor, + mockEditDefaultIdentityInteractor, + mockTransformHtmlSignatureInteractor); + }); + + group('identities controller test:', () { + test( + 'should deregister all interactor of clean up public assets interactor binding ' + 'when identity screen is closed', + () { + // arrange + CleanUpPublicAssetsInteractorBindings().dependencies(); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + true); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + true); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + true); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + true); + + // act + identitiesController.onClose(); + + // assert + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + false); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + false); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + false); + expect( + Get.isRegistered( + tag: BindingTag.cleanUpPublicAssetsInteractorBindingsTag), + false); + }); + }); +} \ No newline at end of file