Files
eatvio_app/test/features/complaining/presentation/cubit/complaining_cubit_test.dart

144 lines
4.8 KiB
Dart

import 'package:eatvio_app/core/enums/complained_content.dart';
import 'package:eatvio_app/features/complaining/presentation/complaining_bottom_sheet.dart';
import 'package:eatvio_app/features/complaining/presentation/cubit/complaining_cubit.dart';
import 'package:eatvio_app/features/complaining/repositories/complaining_repository.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'complaining_cubit_test.mocks.dart';
@GenerateNiceMocks([MockSpec<ComplainingRepository>()])
void main() {
group('ComplainingCubit', () {
ComplainingCubit? complainingCubit;
late MockComplainingRepository mockRepository;
setUp(() {
mockRepository = MockComplainingRepository();
});
tearDown(() async {
if (complainingCubit != null && !complainingCubit!.isClosed) {
await complainingCubit!.close();
complainingCubit = null;
}
});
test('начальное состояние - пустое', () {
complainingCubit = ComplainingCubit(repository: mockRepository);
expect(complainingCubit!.state.contentType, isNull);
expect(complainingCubit!.state.category, isNull);
expect(complainingCubit!.state.wasSentSuccessfully, isNull);
});
test('setContentTypeAndIdentifier - устанавливает тип контента и идентификатор', () {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setContentTypeAndIdentifier(
contentType: ComplainedContent.diet,
id: 1,
);
expect(complainingCubit!.state.contentType, ComplainedContent.diet);
expect(complainingCubit!.state.contentId, 1);
});
test('setCategory - устанавливает категорию жалобы', () {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setCategory(ComplainType.spam);
expect(complainingCubit!.state.category, ComplainType.spam);
});
test('setTags - устанавливает теги', () {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setTags(['tag1', 'tag2']);
expect(complainingCubit!.state.complainInfo.tags, ['tag1', 'tag2']);
});
test('toggleDescription - переключает описание', () {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.toggleDescription();
expect(complainingCubit!.state.complainInfo.description, '');
complainingCubit!.toggleDescription();
expect(complainingCubit!.state.complainInfo.description, isNull);
});
test('setDescription - устанавливает описание', () {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setDescription('Test description');
expect(complainingCubit!.state.complainInfo.description, 'Test description');
});
test('complain - отправляет жалобу на диету', () async {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setContentTypeAndIdentifier(
contentType: ComplainedContent.diet,
id: 1,
);
complainingCubit!.setCategory(ComplainType.spam);
when(mockRepository.sendDietComplain(
id: 1,
category: anyNamed('category'),
body: anyNamed('body'),
)).thenAnswer((_) async => {});
await complainingCubit!.complain();
expect(complainingCubit!.state.wasSentSuccessfully, isTrue);
});
test('complain - отправляет жалобу на план', () async {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setContentTypeAndIdentifier(
contentType: ComplainedContent.plan,
slug: 'test-plan',
);
complainingCubit!.setCategory(ComplainType.spam);
when(mockRepository.sendPlanComplain(
slug: 'test-plan',
category: anyNamed('category'),
body: anyNamed('body'),
)).thenAnswer((_) async => {});
await complainingCubit!.complain();
expect(complainingCubit!.state.wasSentSuccessfully, isTrue);
});
test('complain - обработка ошибки', () async {
complainingCubit = ComplainingCubit(repository: mockRepository);
complainingCubit!.setContentTypeAndIdentifier(
contentType: ComplainedContent.diet,
id: 1,
);
complainingCubit!.setCategory(ComplainType.spam);
when(mockRepository.sendDietComplain(
id: anyNamed('id'),
category: anyNamed('category'),
body: anyNamed('body'),
)).thenThrow(Exception('Ошибка отправки'));
await complainingCubit!.complain();
expect(complainingCubit!.state.wasSentSuccessfully, isFalse);
});
});
}