forked from eatvio/eatvio_app
144 lines
4.8 KiB
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);
|
|
});
|
|
});
|
|
}
|
|
|