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