From a7083e83e5b736dea2a5ca9791f63de6712826ba Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Wed, 22 May 2024 15:33:24 +0545 Subject: [PATCH] add more tests --- .../m_webview/cubit/m_webview_cubit_test.dart | 28 +++++++ .../cubit/active_biometrics_cubit_test.dart | 77 +++++++++++++++++++ .../widgets/biometrics_switch_test.dart | 26 +++++++ .../cubit/onboarding_cubit_test.dart | 26 +++++++ .../tos/view/onboarding_tos_page_test.dart | 72 ++++++++++++++++- 5 files changed, 227 insertions(+), 2 deletions(-) create mode 100644 test/app/shared/widget/m_webview/cubit/m_webview_cubit_test.dart create mode 100644 test/onboarding/activate_biometircs/cubit/active_biometrics_cubit_test.dart create mode 100644 test/onboarding/activate_biometircs/widgets/biometrics_switch_test.dart create mode 100644 test/onboarding/cubit/onboarding_cubit_test.dart diff --git a/test/app/shared/widget/m_webview/cubit/m_webview_cubit_test.dart b/test/app/shared/widget/m_webview/cubit/m_webview_cubit_test.dart new file mode 100644 index 000000000..c8c9953db --- /dev/null +++ b/test/app/shared/widget/m_webview/cubit/m_webview_cubit_test.dart @@ -0,0 +1,28 @@ +import 'package:altme/app/app.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('MWebViewCubit', () { + late MWebViewCubit cubit; + + setUp(() { + cubit = MWebViewCubit(); + }); + + tearDown(() { + cubit.close(); + }); + + test('initial state is true', () { + expect(cubit.state, true); + }); + + test('emits new state when setLoading is called', () { + expect(cubit.state, true); + cubit.setLoading(isLoading: false); + expect(cubit.state, false); + cubit.setLoading(isLoading: true); + expect(cubit.state, true); + }); + }); +} diff --git a/test/onboarding/activate_biometircs/cubit/active_biometrics_cubit_test.dart b/test/onboarding/activate_biometircs/cubit/active_biometrics_cubit_test.dart new file mode 100644 index 000000000..15a5c1ee7 --- /dev/null +++ b/test/onboarding/activate_biometircs/cubit/active_biometrics_cubit_test.dart @@ -0,0 +1,77 @@ +import 'package:altme/app/app.dart'; +import 'package:altme/dashboard/dashboard.dart'; +import 'package:altme/onboarding/onboarding.dart'; + +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockProfileCubit extends MockCubit + implements ProfileCubit {} + +void main() { + group('ActiveBiometricsCubit', () { + late ActiveBiometricsCubit activeBiometricsCubit; + late MockProfileCubit mockProfileCubit; + + setUp(() { + mockProfileCubit = MockProfileCubit(); + + activeBiometricsCubit = + ActiveBiometricsCubit(profileCubit: mockProfileCubit); + }); + + test('initial state is false', () { + expect(activeBiometricsCubit.state, false); + }); + + blocTest( + 'load emits true if walletProtectionType is FA2 or biometrics', + build: () { + when(() => mockProfileCubit.state).thenReturn( + ProfileState( + model: ProfileModel( + polygonIdNetwork: PolygonIdNetwork.PolygonMainnet, + walletType: WalletType.personal, + walletProtectionType: WalletProtectionType.biometrics, + isDeveloperMode: false, + profileType: ProfileType.custom, + profileSetting: ProfileSetting.initial(), + ), + ), + ); + return activeBiometricsCubit; + }, + act: (cubit) => cubit.load(), + expect: () => [true], + ); + + blocTest( + 'load emits false if walletProtectionType is not FA2 or biometrics', + build: () { + when(() => mockProfileCubit.state).thenReturn( + ProfileState( + model: ProfileModel( + polygonIdNetwork: PolygonIdNetwork.PolygonMainnet, + walletType: WalletType.personal, + walletProtectionType: WalletProtectionType.pinCode, + isDeveloperMode: false, + profileType: ProfileType.custom, + profileSetting: ProfileSetting.initial(), + ), + ), + ); + return activeBiometricsCubit; + }, + act: (cubit) => cubit.load(), + expect: () => [false], + ); + + blocTest( + 'updateSwitch emits the provided value', + build: () => activeBiometricsCubit, + act: (cubit) => cubit.updateSwitch(value: true), + expect: () => [true], + ); + }); +} diff --git a/test/onboarding/activate_biometircs/widgets/biometrics_switch_test.dart b/test/onboarding/activate_biometircs/widgets/biometrics_switch_test.dart new file mode 100644 index 000000000..99b51d0e8 --- /dev/null +++ b/test/onboarding/activate_biometircs/widgets/biometrics_switch_test.dart @@ -0,0 +1,26 @@ +import 'package:altme/app/app.dart'; +import 'package:altme/onboarding/onboarding.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../../../helpers/helpers.dart'; + +void main() { + group('BiometricsSwitch', () { + testWidgets('renders value correctly', (tester) async { + await tester.pumpApp(const BiometricsSwitch(value: true)); + + expect( + find.byWidgetPredicate( + (widget) => + widget is Image && + widget.image is AssetImage && + (widget.image as AssetImage).assetName == + IconStrings.fingerprint2, + ), + findsOneWidget, + ); + expect(find.byType(CupertinoSwitch), findsOneWidget); + }); + }); +} diff --git a/test/onboarding/cubit/onboarding_cubit_test.dart b/test/onboarding/cubit/onboarding_cubit_test.dart new file mode 100644 index 000000000..374f128f9 --- /dev/null +++ b/test/onboarding/cubit/onboarding_cubit_test.dart @@ -0,0 +1,26 @@ +import 'package:altme/app/app.dart'; +import 'package:altme/onboarding/cubit/onboarding_cubit.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('OnboardingCubit', () { + test('initial state is correct', () { + expect(OnboardingCubit().state, const OnboardingState()); + }); + + blocTest( + 'emits [loading] when emitOnboardingProcessing is called', + build: OnboardingCubit.new, + act: (cubit) => cubit.emitOnboardingProcessing(), + expect: () => [const OnboardingState(status: AppStatus.loading)], + ); + + blocTest( + 'emits [success] when emitOnboardingDone is called', + build: OnboardingCubit.new, + act: (cubit) => cubit.emitOnboardingDone(), + expect: () => [const OnboardingState(status: AppStatus.success)], + ); + }); +} diff --git a/test/onboarding/tos/view/onboarding_tos_page_test.dart b/test/onboarding/tos/view/onboarding_tos_page_test.dart index f22ac1175..9e0050464 100644 --- a/test/onboarding/tos/view/onboarding_tos_page_test.dart +++ b/test/onboarding/tos/view/onboarding_tos_page_test.dart @@ -1,12 +1,26 @@ import 'package:altme/app/app.dart'; import 'package:altme/onboarding/onboarding.dart'; +import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import '../../../helpers/helpers.dart'; +class MockOnBoardingTosCubit extends MockCubit + implements OnBoardingTosCubit {} + void main() { group('OnBoarding Terms Page', () { + late MockOnBoardingTosCubit onBoardingTosCubit; + + setUpAll(() { + onBoardingTosCubit = MockOnBoardingTosCubit(); + when(() => onBoardingTosCubit.state) + .thenReturn(const OnBoardingTosState()); + }); + testWidgets('is routable', (tester) async { await tester.pumpApp( Builder( @@ -25,9 +39,14 @@ void main() { }); testWidgets('renders OnBoardingTosPage', (tester) async { - await tester.pumpApp(const OnBoardingTosPage()); + await tester.pumpApp( + BlocProvider.value( + value: onBoardingTosCubit, + child: const OnBoardingTosPage(), + ), + ); await tester.pumpAndSettle(); - expect(find.byType(OnBoardingTosPage), findsOneWidget); + expect(find.byType(OnBoardingTosView), findsOneWidget); }); testWidgets('nothing happens when button is pressed', (tester) async { @@ -37,6 +56,32 @@ void main() { expect(find.byType(OnBoardingTosPage), findsOneWidget); }); + // testWidgets('checkboxes toggle state', (WidgetTester tester) async { + // when(() => onBoardingTosCubit.setAgreeTerms( + // agreeTerms: any(named: 'agreeTerms'))).thenAnswer((_) async {}); + // when(() => onBoardingTosCubit.setReadTerms( + // readTerms: any(named: 'readTerms'))).thenAnswer((_) async {}); + + // await tester.pumpApp( + // BlocProvider( + // create: (_) => onBoardingTosCubit, + // child: const OnBoardingTosPage(), + // ), + // ); + + // final agreeCheckbox = find.text('I agree to the terms and conditions.'); + // final readCheckbox = find.text('I have read the terms of use.'); + + // expect(agreeCheckbox, findsOneWidget); + // expect(readCheckbox, findsOneWidget); + + // await tester.tap(agreeCheckbox); + // await tester.pumpAndSettle(); + + // verify(() => onBoardingTosCubit.setAgreeTerms(agreeTerms: true)) + // .called(1); + // }); + testWidgets('blocks going back from OnBoardingTosPage start page', (tester) async { await tester.pumpApp(const OnBoardingTosPage()); @@ -46,6 +91,29 @@ void main() { expect(find.byType(OnBoardingTosPage), findsOneWidget); }); + testWidgets( + 'MyGradientButton press calls onAcceptancePressed', + (WidgetTester tester) async { + await tester.pumpApp( + BlocProvider.value( + value: onBoardingTosCubit, + child: const OnBoardingTosPage(), + ), + ); + + when(() => onBoardingTosCubit.state).thenReturn( + const OnBoardingTosState( + agreeTerms: true, + readTerms: true, + ), + ); + await tester.pump(); + + final button = find.text('Start'.toUpperCase()); + expect(button, findsOneWidget); + }, + ); + testWidgets('renders DisplayTerms', (tester) async { await tester.pumpApp(const OnBoardingTosPage()); await tester.pumpAndSettle();