forked from eatvio/eatvio_app
feat(tests): test coverage 60%
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user