forked from eatvio/eatvio_app
chore(version): update app version to 1.3.5+85 and improve test coverage reporting in CI
This commit is contained in:
@@ -1,80 +1,51 @@
|
||||
import 'package:eatvio_app/core/enums/base_state.dart';
|
||||
import 'package:eatvio_app/features/consultations/models/consultation_model.dart';
|
||||
import 'package:eatvio_app/features/consultations/presentation/cubit/consultations_cubit.dart';
|
||||
import 'package:eatvio_app/features/consultations/presentation/cubit/consultations_state.dart';
|
||||
import 'package:eatvio_app/features/consultations/repositories/consultations_repository.dart';
|
||||
import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
import 'consultations_cubit_test.mocks.dart';
|
||||
class MockConsultationsRepository extends Mock implements ConsultationsRepository {}
|
||||
|
||||
@GenerateNiceMocks([MockSpec<ConsultationsRepository>()])
|
||||
void main() {
|
||||
group('ConsultationsCubit', () {
|
||||
ConsultationsCubit? cubit;
|
||||
late ConsultationsCubit cubit;
|
||||
late MockConsultationsRepository mockRepository;
|
||||
|
||||
setUp(() {
|
||||
mockRepository = MockConsultationsRepository();
|
||||
});
|
||||
|
||||
tearDown(() async {
|
||||
if (cubit != null && !cubit!.isClosed) {
|
||||
await cubit!.close();
|
||||
cubit = null;
|
||||
}
|
||||
});
|
||||
|
||||
test('начальное состояние - initial', () {
|
||||
cubit = ConsultationsCubit(consultationsRepository: mockRepository);
|
||||
|
||||
expect(cubit!.state.state, BaseState.initial);
|
||||
expect(cubit!.state.consultations, isEmpty);
|
||||
});
|
||||
|
||||
test('loadConsultations - успешная загрузка консультаций', () async {
|
||||
cubit = ConsultationsCubit(consultationsRepository: mockRepository);
|
||||
tearDown(() {
|
||||
cubit.close();
|
||||
});
|
||||
|
||||
final testConsultations = [
|
||||
ConsultationModel(
|
||||
id: 1,
|
||||
chosenPlanState: ChosenPlanStateEnum.stateInProgress,
|
||||
planTitle: 'Test Plan',
|
||||
userName: 'Test User',
|
||||
userSlug: 'test-user',
|
||||
consultantPayment: 1000.0,
|
||||
duration: 30,
|
||||
currentDiaryDay: 1,
|
||||
userProfilePhotoUrl: 'https://example.com/photo.jpg',
|
||||
consultationOptionPrice: 5000,
|
||||
startDate: DateTime(2024, 1, 1),
|
||||
endDate: DateTime(2024, 1, 31),
|
||||
consultantId: 1,
|
||||
diaries: [],
|
||||
personalDietId: null,
|
||||
),
|
||||
];
|
||||
test('начальное состояние - ComplaintsState', () {
|
||||
expect(cubit.state, isA<ConsultationsState>());
|
||||
});
|
||||
|
||||
when(mockRepository.getConsultations())
|
||||
.thenAnswer((_) async => testConsultations);
|
||||
test('loadConsultations - успешная загрузка', () async {
|
||||
final mockConsultations = <ConsultationModel>[];
|
||||
|
||||
await cubit!.loadConsultations();
|
||||
when(() => mockRepository.getConsultations())
|
||||
.thenAnswer((_) async => mockConsultations);
|
||||
|
||||
expect(cubit!.state.state, BaseState.success);
|
||||
expect(cubit!.state.consultations.length, 1);
|
||||
await cubit.loadConsultations();
|
||||
|
||||
expect(cubit.state.state, BaseState.success);
|
||||
expect(cubit.state.consultations, mockConsultations);
|
||||
verify(() => mockRepository.getConsultations()).called(1);
|
||||
});
|
||||
|
||||
test('loadConsultations - обработка ошибки', () async {
|
||||
cubit = ConsultationsCubit(consultationsRepository: mockRepository);
|
||||
when(() => mockRepository.getConsultations())
|
||||
.thenThrow(Exception('Error'));
|
||||
|
||||
when(mockRepository.getConsultations())
|
||||
.thenThrow(Exception('Ошибка загрузки'));
|
||||
await cubit.loadConsultations();
|
||||
|
||||
await cubit!.loadConsultations();
|
||||
|
||||
expect(cubit!.state.state, BaseState.error);
|
||||
expect(cubit.state.state, BaseState.error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
import 'package:eatvio_app/features/consultations/models/consultation_model.dart';
|
||||
import 'package:eatvio_app/features/consultations/repositories/consultations_repository.dart';
|
||||
import 'package:eatvio_app/features/consultations/services/consultation_service.dart';
|
||||
import 'package:eatvio_app/features/finances_and_consultations_archive/models/consultant_finance_model.dart';
|
||||
import 'package:eatvio_app/features/finances_and_consultations_archive/models/statistic_model.dart';
|
||||
import 'package:eatvio_app/features/finances_and_consultations_archive/models/user_purchases_model.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockConsultationService extends Mock implements ConsultationService {}
|
||||
|
||||
class FakeStatisticModel extends Fake implements StatisticModel {}
|
||||
|
||||
void main() {
|
||||
group('ConsultationsRepository', () {
|
||||
late ConsultationsRepository repository;
|
||||
late MockConsultationService mockService;
|
||||
|
||||
setUpAll(() {
|
||||
registerFallbackValue(FakeStatisticModel());
|
||||
});
|
||||
|
||||
setUp(() {
|
||||
mockService = MockConsultationService();
|
||||
repository = ConsultationsRepository(consultationService: mockService);
|
||||
});
|
||||
|
||||
test('getConsultations - успешный запрос', () async {
|
||||
final mockConsultations = <ConsultationModel>[];
|
||||
final mockPagination = ConsultationPaginationModel(data: mockConsultations);
|
||||
|
||||
when(() => mockService.getConsultations())
|
||||
.thenAnswer((_) async => mockPagination);
|
||||
|
||||
final result = await repository.getConsultations();
|
||||
|
||||
expect(result, mockConsultations);
|
||||
verify(() => mockService.getConsultations()).called(1);
|
||||
});
|
||||
|
||||
test('getConsultations - пробрасывает ошибку', () async {
|
||||
when(() => mockService.getConsultations())
|
||||
.thenThrow(Exception('Error'));
|
||||
|
||||
expect(() => repository.getConsultations(), throwsException);
|
||||
});
|
||||
|
||||
test('getFilteredConsultations - успешный запрос', () async {
|
||||
final mockConsultations = <ConsultationModel>[];
|
||||
final mockPagination = ConsultationPaginationModel(data: mockConsultations);
|
||||
|
||||
when(() => mockService.getFilteredConsultations(
|
||||
state: any(named: 'state'),
|
||||
date: any(named: 'date'),
|
||||
stateComparison: any(named: 'stateComparison'),
|
||||
dateComparison: any(named: 'dateComparison'),
|
||||
))
|
||||
.thenAnswer((_) async => mockPagination);
|
||||
|
||||
final result = await repository.getFilteredConsultations();
|
||||
|
||||
expect(result, mockConsultations);
|
||||
verify(() => mockService.getFilteredConsultations(
|
||||
state: null,
|
||||
date: null,
|
||||
stateComparison: null,
|
||||
dateComparison: null,
|
||||
)).called(1);
|
||||
});
|
||||
|
||||
test('getStatistic - успешный запрос', () async {
|
||||
final mockStatistic = StatisticModel(
|
||||
total: 10,
|
||||
inProgress: 5,
|
||||
finished: 3,
|
||||
canceled: 2,
|
||||
);
|
||||
|
||||
when(() => mockService.getStatistics())
|
||||
.thenAnswer((_) async => mockStatistic);
|
||||
|
||||
final result = await repository.getStatistic();
|
||||
|
||||
expect(result, mockStatistic);
|
||||
verify(() => mockService.getStatistics()).called(1);
|
||||
});
|
||||
|
||||
test('getConsultantFinances - успешный запрос', () async {
|
||||
final mockFinances = <ConsultantFinanceModel>[];
|
||||
|
||||
when(() => mockService.getConsultantFinances(any(), any()))
|
||||
.thenAnswer((_) async => mockFinances);
|
||||
|
||||
final result = await repository.getConsultantFinances(null, null);
|
||||
|
||||
expect(result, mockFinances);
|
||||
verify(() => mockService.getConsultantFinances(null, null)).called(1);
|
||||
});
|
||||
|
||||
test('getUserPurchases - успешный запрос', () async {
|
||||
final mockPurchases = <UserPurchasesModel>[];
|
||||
|
||||
when(() => mockService.getUserPurchases(any(), any()))
|
||||
.thenAnswer((_) async => mockPurchases);
|
||||
|
||||
final result = await repository.getUserPurchases(null, null);
|
||||
|
||||
expect(result, mockPurchases);
|
||||
verify(() => mockService.getUserPurchases(null, null)).called(1);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user