feat(tests): updated tests coverage to 66.5%

This commit is contained in:
misha
2026-01-14 18:47:11 +03:00
parent 497ff19cfa
commit 13ccf56df0
102 changed files with 10146 additions and 379 deletions

View File

@@ -539,5 +539,402 @@ void main() {
diaryCubit!.fillComment('Хороший день');
expect(diaryCubit!.comment, 'Хороший день');
});
test('updateCurrentDiary - обновляет текущий дневник', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.updateCurrentDiary();
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day'))).called(1);
});
test('updateCurrentDiary - обрабатывает ошибку', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenThrow(Exception('Ошибка'));
await diaryCubit!.updateCurrentDiary();
await Future.delayed(const Duration(milliseconds: 100));
});
test('getNutrition - получает данные о питании', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
final result = await diaryCubit!.getNutrition(1);
expect(result, testNutrition);
verify(mockDiaryRepository.getNutritionData(1)).called(1);
});
test('updateProductInMeal - обновляет продукт в приеме пищи', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.updateProductInMeal(
diaryId: anyNamed('diaryId'),
mealId: anyNamed('mealId'),
portionId: anyNamed('portionId'),
productName: anyNamed('productName'),
portion: anyNamed('portion'),
quantity: anyNamed('quantity'),
productNutritionalValueId: anyNamed('productNutritionalValueId'),
portionState: anyNamed('portionState'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.updateProductInMeal(
diaryId: 1,
mealId: 1,
portionId: 5,
productName: 'Яблоко',
portion: '150г',
quantity: 3,
portionState: PortionState.eaten,
);
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.updateProductInMeal(
diaryId: 1,
mealId: 1,
portionId: 5,
productName: 'Яблоко',
portion: '150г',
quantity: 3,
productNutritionalValueId: anyNamed('productNutritionalValueId'),
portionState: PortionState.eaten,
)).called(1);
});
test('unmarkEaten - снимает отметку о съеденном', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.unmarkEaten(
diaryId: anyNamed('diaryId'),
mealId: anyNamed('mealId'),
portionId: anyNamed('portionId'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.unmarkEaten(diaryId: 1, mealId: 1, portionId: 5);
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.unmarkEaten(diaryId: 1, mealId: 1, portionId: 5)).called(1);
});
test('restore - восстанавливает продукт', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.restore(
diaryId: anyNamed('diaryId'),
mealId: anyNamed('mealId'),
portionId: anyNamed('portionId'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.restore(diaryId: 1, mealId: 1, portionId: 5);
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.restore(diaryId: 1, mealId: 1, portionId: 5)).called(1);
});
test('deleteProductFromMeal - удаляет продукт из приема пищи', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.deleteProductFromMeal(
diaryId: anyNamed('diaryId'),
mealId: anyNamed('mealId'),
portionId: anyNamed('portionId'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.deleteProductFromMeal(diaryId: 1, mealId: 1, portionId: 5);
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.deleteProductFromMeal(diaryId: 1, mealId: 1, portionId: 5)).called(1);
});
test('sendProductToModeration - отправляет продукт на модерацию', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
const moderationModel = GlossaryModerationModel(
glossary: GlossaryModel(
id: 1,
name: 'Новый продукт',
grInPortion: 100,
energyOn100Gr: 100.0,
proteinsOn100Gr: 10.0,
fatsOn100Gr: 5.0,
carbohydratesOn100Gr: 15.0,
energyOnPortion: 100.0,
proteinsOnPortion: 10.0,
fatsOnPortion: 5.0,
carbohydratesOnPortion: 15.0,
),
);
when(mockDiaryRepository.sendProductToModeration(
name: anyNamed('name'),
energy: anyNamed('energy'),
proteins: anyNamed('proteins'),
fats: anyNamed('fats'),
carbohydrates: anyNamed('carbohydrates'),
)).thenAnswer((_) async => moderationModel);
final result = await diaryCubit!.sendProductToModeration(
name: 'Новый продукт',
energy: 100.0,
proteins: 10.0,
fats: 5.0,
carbohydrates: 15.0,
);
expect(result, moderationModel);
verify(mockDiaryRepository.sendProductToModeration(
name: 'Новый продукт',
energy: 100.0,
proteins: 10.0,
fats: 5.0,
carbohydrates: 15.0,
)).called(1);
});
test('sendProductToModeration - возвращает null при ошибке', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.sendProductToModeration(
name: anyNamed('name'),
energy: anyNamed('energy'),
proteins: anyNamed('proteins'),
fats: anyNamed('fats'),
carbohydrates: anyNamed('carbohydrates'),
)).thenThrow(Exception('Ошибка'));
final result = await diaryCubit!.sendProductToModeration(
name: 'Новый продукт',
energy: 100.0,
proteins: 10.0,
fats: 5.0,
carbohydrates: 15.0,
);
expect(result, isNull);
});
test('fillTime - заполняет время приема пищи', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.fillTime(
diaryId: anyNamed('diaryId'),
mealId: anyNamed('mealId'),
time: anyNamed('time'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.fillTime(diaryId: 1, time: '12:00');
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.fillTime(diaryId: 1, mealId: 1, time: '12:00')).called(1);
});
test('fillWakeup - заполняет время пробуждения', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.fillWakeup(
diaryId: anyNamed('diaryId'),
time: anyNamed('time'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.fillWakeup(diaryId: 1, time: '07:00');
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.fillWakeup(diaryId: 1, time: '07:00')).called(1);
});
test('fillRetire - заполняет время отхода ко сну', () async {
diaryCubit = DiaryCubit(
diaryRepository: mockDiaryRepository,
glossaryRepository: mockGlossaryRepository,
profileRepository: mockProfileRepository,
dietRepository: mockDietRepository,
chatRepository: mockChatRepository,
settingsRepository: mockSettingsRepository,
);
when(mockDiaryRepository.fillRetire(
diaryId: anyNamed('diaryId'),
time: anyNamed('time'),
)).thenAnswer((_) async => Future.value());
when(mockDiaryRepository.getDiaryDayV2(day: anyNamed('day')))
.thenAnswer((_) async => testDiaryDay);
when(mockDiaryRepository.getNutritionData(any))
.thenAnswer((_) async => testNutrition);
when(mockSettingsRepository.getProfileSettings())
.thenAnswer((_) async => const ProfileSettingsModel(
isMoodFillable: true,
isBedtimeFillable: true,
isPublicProfile: true,
newUpdatesNotifications: null,
diaryReminderNotifications: null,
));
await diaryCubit!.fetchDiaryV2(needLoading: true);
await Future.delayed(const Duration(milliseconds: 100));
await diaryCubit!.fillRetire(diaryId: 1, time: '23:00');
await Future.delayed(const Duration(milliseconds: 100));
verify(mockDiaryRepository.fillRetire(diaryId: 1, time: '23:00')).called(1);
});
});
}