feat(tests): test coverage 60%

This commit is contained in:
misha
2025-12-23 10:59:56 +03:00
parent 38118055a5
commit 5b705dfb72
67 changed files with 8391 additions and 42 deletions

View File

@@ -0,0 +1,135 @@
import 'package:eatvio_app/features/create_diet/presentation/cubit/create_diet_cubit.dart';
import 'package:eatvio_app/features/create_diet/repositories/create_diet_repository.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
import 'package:eatvio_app/features/glossary/repositories/glossary_repository.dart';
import 'package:eatvio_app/features/profile/repositories/profile_repository.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'create_diet_cubit_test.mocks.dart';
@GenerateNiceMocks([MockSpec<CreateDietRepository>(), MockSpec<ProfileRepository>(), MockSpec<GlossaryRepository>()])
void main() {
group('CreateDietCubit unit', () {
late CreateDietCubit cubit;
late MockCreateDietRepository dietRepository;
late MockProfileRepository profileRepository;
late MockGlossaryRepository glossaryRepository;
setUp(() {
dietRepository = MockCreateDietRepository();
profileRepository = MockProfileRepository();
glossaryRepository = MockGlossaryRepository();
cubit = CreateDietCubit(createDietRepository: dietRepository, profileRepository: profileRepository, glossaryRepository: glossaryRepository);
});
tearDown(() {
cubit.close();
});
test('initial state is correct', () {
expect(cubit.state.isLoading, false);
expect(cubit.state.isDietBeingEdited, false);
expect(cubit.state.dietData.name, null);
expect(cubit.state.dietData.dailySchedule, null);
});
test('setName updates name and clears error', () {
cubit.setName('Test Diet');
expect(cubit.state.dietData.name, 'Test Diet');
expect(cubit.state.dietNameError, null);
});
test('setDetails updates details and clears error', () {
cubit.setDetails('Test description');
expect(cubit.state.dietData.details, 'Test description');
expect(cubit.state.dietDescriptionError, null);
});
test('setDuration updates duration and creates daily schedule', () {
cubit.setDuration(0);
expect(cubit.state.durationIndex, 0);
expect(cubit.state.dietData.duration, 7);
expect(cubit.state.dietData.dailySchedule?.length, 7);
expect(cubit.state.dietDurationError, null);
});
test('setDuration adjusts daily schedule when changing duration', () {
cubit.setDuration(0); // 7 days
expect(cubit.state.dietData.dailySchedule?.length, 7);
cubit.setDuration(1); // 14 days
expect(cubit.state.dietData.dailySchedule?.length, 14);
cubit.setDuration(0); // back to 7 days
expect(cubit.state.dietData.dailySchedule?.length, 7);
});
test('setDietState updates state and clears error', () {
cubit.setDietState(DietState.active);
expect(cubit.state.dietState, DietState.active);
expect(cubit.state.dietData.state, DietState.active);
expect(cubit.state.dietStateError, null);
});
test('setDietType updates type', () {
cubit.setDietType(key: 'veg', value: true);
expect(cubit.state.dietData.type['veg'], true);
cubit.setDietType(key: 'veg', value: false);
expect(cubit.state.dietData.type['veg'], false);
});
test('addPortion adds portion to daily schedule', () {
cubit.setDuration(0); // Create 7 days schedule
const portion = DailySchedule(name: 'Apple', portion: Portion.grams, quantity: 100, dailyNutrition: null, productNutritionalValueId: null);
cubit.addPortion(dayIndex: 0, mealIndex: 0, portion: portion);
expect(cubit.state.dietData.dailySchedule?[0][0].length, 1);
expect(cubit.state.dietData.dailySchedule?[0][0][0].name, 'Apple');
});
test('removePortion removes portion from daily schedule', () {
cubit.setDuration(0);
const portion = DailySchedule(name: 'Apple', portion: Portion.grams, quantity: 100, dailyNutrition: null, productNutritionalValueId: null);
cubit.addPortion(dayIndex: 0, mealIndex: 0, portion: portion);
expect(cubit.state.dietData.dailySchedule?[0][0].length, 1);
cubit.removePortion(day: 0, meal: 0, portionIndex: 0);
expect(cubit.state.dietData.dailySchedule?[0][0].length, 0);
});
test('updatePortion updates portion in daily schedule', () {
cubit.setDuration(0);
const portion1 = DailySchedule(name: 'Apple', portion: Portion.grams, quantity: 100, dailyNutrition: null, productNutritionalValueId: null);
const portion2 = DailySchedule(name: 'Banana', portion: Portion.grams, quantity: 150, dailyNutrition: null, productNutritionalValueId: null);
cubit.addPortion(dayIndex: 0, mealIndex: 0, portion: portion1);
expect(cubit.state.dietData.dailySchedule?[0][0][0].name, 'Apple');
cubit.updatePortion(dayIndex: 0, mealIndex: 0, portionIndex: 0, portion: portion2);
expect(cubit.state.dietData.dailySchedule?[0][0][0].name, 'Banana');
});
test('copyDay and pasteCopiedDay copy and paste day', () {
cubit.setDuration(0);
const portion = DailySchedule(name: 'Apple', portion: Portion.grams, quantity: 100, dailyNutrition: null, productNutritionalValueId: null);
cubit.addPortion(dayIndex: 0, mealIndex: 0, portion: portion);
cubit.copyDay(0);
expect(cubit.state.copiedDay, isNotNull);
cubit.pasteCopiedDay(1);
expect(cubit.state.dietData.dailySchedule?[1][0].length, 1);
expect(cubit.state.dietData.dailySchedule?[1][0][0].name, 'Apple');
});
test('setDailySchedule updates daily schedule', () {
final schedule = List.generate(7, (day) => List.generate(5, (meal) => <DailySchedule>[]));
cubit.setDailySchedule(schedule);
expect(cubit.state.dietData.dailySchedule, schedule);
expect(cubit.state.dietDurationError, null);
});
});
}