|
| 1 | +import 'package:flutter_riverpod/flutter_riverpod.dart'; |
| 2 | +import 'package:flutter_test/flutter_test.dart'; |
| 3 | +import 'package:mockito/mockito.dart'; |
| 4 | +import 'package:survey_flutter/api/exception/network_exceptions.dart'; |
| 5 | +import 'package:survey_flutter/model/survey_model.dart'; |
| 6 | +import 'package:survey_flutter/screens/home/home_state.dart'; |
| 7 | +import 'package:survey_flutter/screens/home/home_view_model.dart'; |
| 8 | +import 'package:survey_flutter/usecases/base/base_use_case.dart'; |
| 9 | +import 'package:survey_flutter/usecases/get_cached_surveys_use_case.dart'; |
| 10 | +import 'package:survey_flutter/usecases/get_surveys_use_case.dart'; |
| 11 | + |
| 12 | +import '../../mocks/generate_mocks.mocks.dart'; // Import your generated mocks |
| 13 | + |
| 14 | +void main() { |
| 15 | + group('HomeViewModel', () { |
| 16 | + late MockGetCachedSurveysUseCase mockGetCachedSurveysUseCase; |
| 17 | + late MockGetSurveysUseCase mockGetSurveysUseCase; |
| 18 | + late HomeViewModel homeViewModel; |
| 19 | + late ProviderContainer providerContainer; |
| 20 | + |
| 21 | + final List<SurveyModel> surveys = <SurveyModel>[ |
| 22 | + const SurveyModel.dummy(), |
| 23 | + const SurveyModel.dummy(), |
| 24 | + ]; |
| 25 | + |
| 26 | + final UseCaseException exception = |
| 27 | + UseCaseException(const NetworkExceptions.unauthorisedRequest()); |
| 28 | + |
| 29 | + setUp(() { |
| 30 | + mockGetCachedSurveysUseCase = MockGetCachedSurveysUseCase(); |
| 31 | + mockGetSurveysUseCase = MockGetSurveysUseCase(); |
| 32 | + |
| 33 | + providerContainer = ProviderContainer( |
| 34 | + overrides: [ |
| 35 | + getCachedSurveysUseCaseProvider |
| 36 | + .overrideWithValue(mockGetCachedSurveysUseCase), |
| 37 | + getSurveysUseCaseProvider.overrideWithValue(mockGetSurveysUseCase), |
| 38 | + ], |
| 39 | + ); |
| 40 | + homeViewModel = providerContainer.read(homeViewModelProvider.notifier); |
| 41 | + }); |
| 42 | + |
| 43 | + test('loads surveys successfully and emits LoadSurveysSuccess state', () async { |
| 44 | + when(mockGetSurveysUseCase.call(any)).thenAnswer( |
| 45 | + (_) async => Success(surveys), |
| 46 | + ); |
| 47 | + final surveysStream = homeViewModel.surveys; |
| 48 | + homeViewModel.loadSurveys(); |
| 49 | + expect(surveysStream, emitsInOrder([surveys])); |
| 50 | + }, |
| 51 | + ); |
| 52 | + |
| 53 | + test('loads cached surveys successfully and emits LoadCachedSurveysSuccess state', () async { |
| 54 | + when(mockGetCachedSurveysUseCase.call()) |
| 55 | + .thenAnswer((_) => Future.value(Success(surveys))); |
| 56 | + final surveysStream = homeViewModel.surveys; |
| 57 | + final stateStream = homeViewModel.stream; |
| 58 | + homeViewModel.loadCachedSurveys(); |
| 59 | + expect(surveysStream, emitsInOrder([surveys])); |
| 60 | + expect(stateStream, |
| 61 | + emitsInOrder([const HomeState.loadCachedSurveysSuccess()])); |
| 62 | + }, |
| 63 | + ); |
| 64 | + |
| 65 | + test('loads surveys with error and emits error state', () async { |
| 66 | + when(mockGetSurveysUseCase.call(any)).thenAnswer( |
| 67 | + (_) async => Failed(exception), |
| 68 | + ); |
| 69 | + final errorStream = homeViewModel.error; |
| 70 | + homeViewModel.loadSurveys(); |
| 71 | + expect( |
| 72 | + errorStream, |
| 73 | + emitsInOrder( |
| 74 | + [NetworkExceptions.getErrorMessage(exception.actualException)], |
| 75 | + ), |
| 76 | + ); |
| 77 | + }, |
| 78 | + ); |
| 79 | + |
| 80 | + tearDown(() { providerContainer.dispose(); }); |
| 81 | + }); |
| 82 | +} |
0 commit comments