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