feat(tests): tests coverage 67.2

This commit is contained in:
misha
2026-01-19 12:32:11 +03:00
parent 13ccf56df0
commit 44ede73ceb
20 changed files with 5084 additions and 409 deletions

View File

@@ -3,6 +3,7 @@ import 'package:eatvio_app/features/create_plan/repositories/create_plan_reposit
import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'create_plan_cubit_test.mocks.dart';
@@ -447,5 +448,178 @@ void main() {
expect(cubit.validateAllFields(), false);
});
test('validateAllFields returns true when all fields are valid', () {
cubit.setName('Valid Name');
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([true, false, false, false]);
final image = XFile('test_image.jpg');
cubit.setImage(image);
// Заполняем все три опции, так как validateItemsOfAllFilledOptions проверяет все
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('Valid Title 1');
cubit.setPrice(1500.0);
cubit.setOptionDescription('Valid description 1');
cubit.setOptionContent('Valid item 1', 0);
cubit.setSelectedOptionIndex(1);
cubit.setOptionTitle('Valid Title 2');
cubit.setPrice(2000.0);
cubit.setOptionDescription('Valid description 2');
cubit.setOptionContent('Valid item 2', 0);
cubit.setSelectedOptionIndex(2);
cubit.setOptionTitle('Valid Title 3');
cubit.setPrice(2500.0);
cubit.setOptionDescription('Valid description 3');
cubit.setOptionContent('Valid item 3', 0);
expect(cubit.validateAllFields(), true);
});
test('validateAllFields returns false when type is invalid', () {
cubit.setName('Valid Name');
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([false, false, false, false]); // Invalid
final image = XFile('test_image.jpg');
cubit.setImage(image);
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('Valid Title');
cubit.setPrice(1500.0);
cubit.setOptionDescription('Valid description');
cubit.setOptionContent('Valid item', 0);
expect(cubit.validateAllFields(), false);
});
test('validateAllFields returns false when option title is invalid', () {
cubit.setName('Valid Name');
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([true, false, false, false]);
final image = XFile('test_image.jpg');
cubit.setImage(image);
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('AB'); // Invalid
cubit.setPrice(1500.0);
cubit.setOptionDescription('Valid description');
cubit.setOptionContent('Valid item', 0);
expect(cubit.validateAllFields(), false);
});
test('validateAllFields returns false when option price is invalid', () {
cubit.setName('Valid Name');
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([true, false, false, false]);
final image = XFile('test_image.jpg');
cubit.setImage(image);
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('Valid Title');
cubit.setPrice(1000.0); // Invalid
cubit.setOptionDescription('Valid description');
cubit.setOptionContent('Valid item', 0);
expect(cubit.validateAllFields(), false);
});
test('validateAllFields returns false when option description is invalid', () {
cubit.setName('Valid Name');
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([true, false, false, false]);
final image = XFile('test_image.jpg');
cubit.setImage(image);
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('Valid Title');
cubit.setPrice(1500.0);
cubit.setOptionDescription('AB'); // Invalid
cubit.setOptionContent('Valid item', 0);
expect(cubit.validateAllFields(), false);
});
test('validateAllFields returns false when option items are invalid', () {
cubit.setName('Valid Name');
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([true, false, false, false]);
final image = XFile('test_image.jpg');
cubit.setImage(image);
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('Valid Title');
cubit.setPrice(1500.0);
cubit.setOptionDescription('Valid description');
cubit.setOptionContent('AB', 0); // Invalid
expect(cubit.validateAllFields(), false);
});
test('publishPlan - не публикует если валидация не прошла', () async {
cubit.setName('AB'); // Invalid name
cubit.setDetails('Valid description');
cubit.setDuration(0);
cubit.setPlanType([true, false, false, false]);
final image = XFile('test_image.jpg');
cubit.setImage(image);
cubit.setSelectedOptionIndex(0);
cubit.setOptionTitle('Valid Title');
cubit.setPrice(1500.0);
cubit.setOptionDescription('Valid description');
cubit.setOptionContent('Valid item', 0);
await cubit.publishPlan();
verifyNever(repository.createPlan(model: anyNamed('model')));
expect(cubit.state.isLoading, false);
expect(cubit.state.planCreated, false);
});
test('setPlanType - валидирует тип когда хотя бы один выбран', () {
cubit.setPlanType([true, false, false, false]);
expect(cubit.state.validationState.typeHasError, false);
});
test('setPlanType - не валидирует тип когда ни один не выбран', () {
cubit.setPlanType([false, false, false, false]);
// validateType не вызывается автоматически, только через setPlanType
expect(cubit.state.planData.type, [false, false, false, false]);
});
test('removeOptionContentItem - валидирует после удаления', () {
cubit.setSelectedOptionIndex(0);
cubit.setOptionContent('Item 1', 0);
cubit.setOptionContent('Item 2', 1);
expect(cubit.state.planData.options[0].items.length, 2);
cubit.removeOptionContentItem(0);
expect(cubit.state.planData.options[0].items.length, 1);
expect(cubit.state.planData.options[0].items[0], 'Item 2');
});
test('setOptionContent - обновляет существующий элемент', () {
cubit.setSelectedOptionIndex(0);
cubit.setOptionContent('Item 1', 0);
expect(cubit.state.planData.options[0].items[0], 'Item 1');
cubit.setOptionContent('Item 1 Updated', 0);
expect(cubit.state.planData.options[0].items[0], 'Item 1 Updated');
expect(cubit.state.planData.options[0].items.length, 1);
});
test('setOptionContent - добавляет новый элемент когда индекс больше длины', () {
cubit.setSelectedOptionIndex(0);
expect(cubit.state.planData.options[0].items.length, 0);
cubit.setOptionContent('Item 1', 0);
expect(cubit.state.planData.options[0].items.length, 1);
cubit.setOptionContent('Item 2', 1);
expect(cubit.state.planData.options[0].items.length, 2);
});
});
}