forked from eatvio/eatvio_app
feat(tests): increased tests coverage
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
import 'package:eatvio_app/features/diary/models/consultant_comment_model.dart';
|
||||
import 'package:eatvio_app/features/diary/presentation/bloc/consultant_comments_cubit/consultant_comments_cubit.dart';
|
||||
import 'package:eatvio_app/features/diary/presentation/bloc/consultant_comments_cubit/consultant_comments_state.dart';
|
||||
import 'package:eatvio_app/features/diary/repositories/diary_repository.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
|
||||
import 'consultant_comments_cubit_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<DiaryRepository>()])
|
||||
void main() {
|
||||
group('ConsultantCommentsCubit', () {
|
||||
late ConsultantCommentsCubit cubit;
|
||||
late MockDiaryRepository mockDiaryRepository;
|
||||
|
||||
setUp(() {
|
||||
mockDiaryRepository = MockDiaryRepository();
|
||||
cubit = ConsultantCommentsCubit(diaryRepository: mockDiaryRepository);
|
||||
});
|
||||
|
||||
tearDown(() async {
|
||||
await cubit.close();
|
||||
});
|
||||
|
||||
test('начальное состояние - ConsultantCommentsState', () {
|
||||
expect(cubit.state, isA<ConsultantCommentsState>());
|
||||
expect(cubit.state.commentsModel.comment, '');
|
||||
expect(cubit.state.commentsModel.mealsComments, isEmpty);
|
||||
expect(cubit.state.commentsModel.portions, isEmpty);
|
||||
});
|
||||
|
||||
test('setComment - устанавливает комментарий дня', () {
|
||||
cubit.setComment('Test comment');
|
||||
|
||||
expect(cubit.state.commentsModel.comment, 'Test comment');
|
||||
expect(cubit.state.dayCommentNeedsToBeFilled, false);
|
||||
});
|
||||
|
||||
test('setComment - устанавливает dayCommentNeedsToBeFilled для короткого комментария', () {
|
||||
cubit.setComment('Te');
|
||||
|
||||
expect(cubit.state.commentsModel.comment, 'Te');
|
||||
expect(cubit.state.dayCommentNeedsToBeFilled, true);
|
||||
});
|
||||
|
||||
test('setMealComment - устанавливает комментарий к приему пищи', () {
|
||||
cubit.setMealComment(mealNumber: 1, comment: 'Test meal comment');
|
||||
|
||||
expect(cubit.state.commentsModel.mealsComments['1'], isNotNull);
|
||||
expect(cubit.state.commentsModel.mealsComments['1']!.comment, 'Test meal comment');
|
||||
expect(cubit.state.commentsModel.mealsComments['1']!.typeNumber, 1);
|
||||
});
|
||||
|
||||
test('setMealComment - удаляет комментарий при пустой строке', () {
|
||||
cubit.setMealComment(mealNumber: 1, comment: 'Test meal comment');
|
||||
expect(cubit.state.commentsModel.mealsComments['1'], isNotNull);
|
||||
|
||||
cubit.setMealComment(mealNumber: 1, comment: '');
|
||||
|
||||
expect(cubit.state.commentsModel.mealsComments['1'], isNull);
|
||||
});
|
||||
|
||||
test('addPortionComment - добавляет комментарий к порции', () {
|
||||
final portionComment = PortionCommentModel(id: 1, comment: 'Test portion comment');
|
||||
|
||||
cubit.addPortionComment(portionComment);
|
||||
|
||||
expect(cubit.state.commentsModel.portions.length, 1);
|
||||
expect(cubit.state.commentsModel.portions[0].comment, 'Test portion comment');
|
||||
});
|
||||
|
||||
test('updatePortionComment - обновляет комментарий к порции', () {
|
||||
final portionComment1 = PortionCommentModel(id: 1, comment: 'Test portion comment 1');
|
||||
final portionComment2 = PortionCommentModel(id: 2, comment: 'Test portion comment 2');
|
||||
|
||||
cubit.addPortionComment(portionComment1);
|
||||
cubit.addPortionComment(portionComment2);
|
||||
|
||||
final updatedComment = PortionCommentModel(id: 1, comment: 'Updated portion comment');
|
||||
|
||||
cubit.updatePortionComment(updatedComment);
|
||||
|
||||
expect(cubit.state.commentsModel.portions.length, 2);
|
||||
expect(cubit.state.commentsModel.portions[0].comment, 'Updated portion comment');
|
||||
});
|
||||
|
||||
test('updatePortionComment - удаляет комментарий при пустой строке', () {
|
||||
final portionComment = PortionCommentModel(id: 1, comment: 'Test portion comment');
|
||||
|
||||
cubit.addPortionComment(portionComment);
|
||||
expect(cubit.state.commentsModel.portions.length, 1);
|
||||
|
||||
final emptyComment = PortionCommentModel(id: 1, comment: '');
|
||||
|
||||
cubit.updatePortionComment(emptyComment);
|
||||
|
||||
expect(cubit.state.commentsModel.portions.length, 0);
|
||||
});
|
||||
|
||||
test('submitComments - успешная отправка комментариев', () async {
|
||||
when(
|
||||
mockDiaryRepository.commentUserDay(diaryId: anyNamed('diaryId'), commentModel: anyNamed('commentModel')),
|
||||
).thenAnswer((_) async => Future<void>.value());
|
||||
|
||||
cubit.setComment('Test comment with more than 3 characters');
|
||||
cubit.setMealComment(mealNumber: 1, comment: 'Test meal comment with more than 3 characters');
|
||||
|
||||
final portionComment = PortionCommentModel(id: 1, comment: 'Test portion comment with more than 3 characters');
|
||||
cubit.addPortionComment(portionComment);
|
||||
|
||||
await cubit.submitComments(1);
|
||||
|
||||
verify(mockDiaryRepository.commentUserDay(diaryId: 1, commentModel: anyNamed('commentModel'))).called(1);
|
||||
});
|
||||
|
||||
test('submitComments - не отправляет при коротком комментарии дня', () async {
|
||||
cubit.setComment('Te');
|
||||
|
||||
await cubit.submitComments(1);
|
||||
|
||||
expect(cubit.state.dayCommentNeedsToBeFilled, true);
|
||||
verifyNever(mockDiaryRepository.commentUserDay(diaryId: anyNamed('diaryId'), commentModel: anyNamed('commentModel')));
|
||||
});
|
||||
|
||||
test('submitComments - не отправляет при коротком комментарии к приему пищи', () async {
|
||||
cubit.setComment('Test comment with more than 3 characters');
|
||||
cubit.setMealComment(mealNumber: 1, comment: 'Te');
|
||||
|
||||
await cubit.submitComments(1);
|
||||
|
||||
verifyNever(mockDiaryRepository.commentUserDay(diaryId: anyNamed('diaryId'), commentModel: anyNamed('commentModel')));
|
||||
});
|
||||
|
||||
test('submitComments - не отправляет при коротком комментарии к порции', () async {
|
||||
cubit.setComment('Test comment with more than 3 characters');
|
||||
|
||||
final portionComment = PortionCommentModel(id: 1, comment: 'Te');
|
||||
cubit.addPortionComment(portionComment);
|
||||
|
||||
await cubit.submitComments(1);
|
||||
|
||||
verifyNever(mockDiaryRepository.commentUserDay(diaryId: anyNamed('diaryId'), commentModel: anyNamed('commentModel')));
|
||||
});
|
||||
|
||||
test('submitComments - обрабатывает ошибку', () async {
|
||||
when(mockDiaryRepository.commentUserDay(diaryId: anyNamed('diaryId'), commentModel: anyNamed('commentModel'))).thenThrow(Exception('Ошибка отправки'));
|
||||
|
||||
cubit.setComment('Test comment with more than 3 characters');
|
||||
|
||||
await cubit.submitComments(1);
|
||||
|
||||
// Тест проверяет, что метод не выбрасывает исключение
|
||||
expect(cubit.state.commentsModel.comment, 'Test comment with more than 3 characters');
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user