forked from eatvio/eatvio_app
feat(test): update oauth handling and improve preferences management
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
import 'package:eatvio_app/features/feed/models/feed_consultant_model.dart';
|
||||
import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart';
|
||||
import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_state.dart';
|
||||
import 'package:eatvio_app/features/feed/repositories/feed_repository.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
|
||||
import 'consultants_cubit_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<FeedRepository>()])
|
||||
void main() {
|
||||
group('ConsultantsCubit', () {
|
||||
late ConsultantsCubit consultantsCubit;
|
||||
late MockFeedRepository mockFeedRepository;
|
||||
|
||||
setUp(() {
|
||||
mockFeedRepository = MockFeedRepository();
|
||||
consultantsCubit = ConsultantsCubit(feedRepository: mockFeedRepository);
|
||||
});
|
||||
|
||||
tearDown(() async {
|
||||
if (!consultantsCubit.isClosed) {
|
||||
await consultantsCubit.close();
|
||||
}
|
||||
});
|
||||
|
||||
test('начальное состояние - ConsultantsState', () {
|
||||
expect(consultantsCubit.state, const ConsultantsState());
|
||||
});
|
||||
|
||||
test('getConsultants - успешная загрузка консультантов', () async {
|
||||
final testConsultants = [
|
||||
FeedConsultantModel(
|
||||
slug: 'consultant-1',
|
||||
name: 'Консультант 1',
|
||||
description: 'Описание консультанта 1',
|
||||
totalScores: 100,
|
||||
photo: 'https://example.com/icon1.jpg',
|
||||
badges: [],
|
||||
ratingPlace: 1,
|
||||
),
|
||||
FeedConsultantModel(
|
||||
slug: 'consultant-2',
|
||||
name: 'Консультант 2',
|
||||
description: 'Описание консультанта 2',
|
||||
totalScores: 200,
|
||||
photo: 'https://example.com/icon2.jpg',
|
||||
badges: [],
|
||||
ratingPlace: 2,
|
||||
),
|
||||
];
|
||||
|
||||
when(mockFeedRepository.getConsultants()).thenAnswer((_) async => testConsultants);
|
||||
|
||||
await consultantsCubit.getConsultants();
|
||||
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
expect(consultantsCubit.state, isA<ConsultantsStateLoaded>());
|
||||
final loadedState = consultantsCubit.state as ConsultantsStateLoaded;
|
||||
expect(loadedState.consultantsList.length, 2);
|
||||
expect(loadedState.isLoading, false);
|
||||
verify(mockFeedRepository.getConsultants()).called(1);
|
||||
});
|
||||
|
||||
test('getConsultants - переход в состояние loading', () async {
|
||||
when(mockFeedRepository.getConsultants()).thenAnswer((_) async {
|
||||
await Future.delayed(const Duration(milliseconds: 50));
|
||||
return [];
|
||||
});
|
||||
|
||||
final future = consultantsCubit.getConsultants();
|
||||
await Future.delayed(const Duration(milliseconds: 10));
|
||||
|
||||
expect(consultantsCubit.state, const ConsultantsState.loading());
|
||||
await future;
|
||||
});
|
||||
|
||||
test('getConsultants - обработка ошибки', () async {
|
||||
when(mockFeedRepository.getConsultants()).thenThrow(Exception('Ошибка загрузки'));
|
||||
|
||||
await consultantsCubit.getConsultants();
|
||||
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
expect(consultantsCubit.state, isA<ConsultantsStateError>());
|
||||
final errorState = consultantsCubit.state as ConsultantsStateError;
|
||||
expect(errorState.errorMessage, contains('Exception'));
|
||||
});
|
||||
|
||||
test('getConsultants - загрузка с пустым списком', () async {
|
||||
when(mockFeedRepository.getConsultants()).thenAnswer((_) async => []);
|
||||
|
||||
await consultantsCubit.getConsultants();
|
||||
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
expect(consultantsCubit.state, isA<ConsultantsStateLoaded>());
|
||||
final loadedState = consultantsCubit.state as ConsultantsStateLoaded;
|
||||
expect(loadedState.consultantsList, isEmpty);
|
||||
expect(loadedState.isLoading, false);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user