Skip to content

Commit 0e0f0e8

Browse files
test: add more tests to isValid form property
1 parent 668da74 commit 0e0f0e8

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed

test/src/form_builder_field_test.dart

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ void main() {
2424
expect(find.text(errorTextField), findsOneWidget);
2525
});
2626
});
27+
2728
group('isValid -', () {
2829
testWidgets('Should invalid when set custom error', (tester) async {
2930
final textFieldKey = GlobalKey<FormBuilderFieldState>();
@@ -39,9 +40,56 @@ void main() {
3940
textFieldKey.currentState?.invalidate(errorTextField);
4041
await tester.pumpAndSettle();
4142

43+
expect(textFieldKey.currentState?.isValid, isFalse);
44+
});
45+
testWidgets(
46+
'Should valid when no has error and autovalidateMode is always',
47+
(tester) async {
48+
final textFieldKey = GlobalKey<FormBuilderFieldState>();
49+
const textFieldName = 'text';
50+
const errorTextField = 'error text field';
51+
final testWidget = FormBuilderTextField(
52+
name: textFieldName,
53+
key: textFieldKey,
54+
autovalidateMode: AutovalidateMode.always,
55+
validator: (value) =>
56+
value == null || value.isEmpty ? errorTextField : null,
57+
);
58+
await tester.pumpWidget(buildTestableFieldWidget(testWidget));
59+
60+
expect(textFieldKey.currentState?.isValid, isFalse);
61+
62+
final widgetFinder = find.byWidget(testWidget);
63+
await tester.enterText(widgetFinder, 'test');
64+
await tester.pumpAndSettle();
65+
66+
expect(textFieldKey.currentState?.isValid, isTrue);
67+
});
68+
testWidgets(
69+
'Should invalid when has error and autovalidateMode is always',
70+
(tester) async {
71+
final textFieldKey = GlobalKey<FormBuilderFieldState>();
72+
const textFieldName = 'text';
73+
const errorTextField = 'error text field';
74+
final testWidget = FormBuilderTextField(
75+
name: textFieldName,
76+
key: textFieldKey,
77+
autovalidateMode: AutovalidateMode.always,
78+
validator: (value) =>
79+
value == null || value.length < 10 ? errorTextField : null,
80+
);
81+
await tester.pumpWidget(buildTestableFieldWidget(testWidget));
82+
83+
expect(textFieldKey.currentState?.isValid, isFalse);
84+
85+
final widgetFinder = find.byWidget(testWidget);
86+
await tester.enterText(widgetFinder, 'test');
87+
await tester.pumpAndSettle();
88+
4289
expect(textFieldKey.currentState?.isValid, isFalse);
4390
});
4491
});
92+
4593
group('hasErrors -', () {
4694
testWidgets('Should has errors when set custom error', (tester) async {
4795
final textFieldKey = GlobalKey<FormBuilderFieldState>();

test/src/form_builder_test.dart

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,65 @@ void main() {
118118
);
119119
});
120120

121+
group('isValid -', () {
122+
testWidgets('Should invalid when set custom error', (tester) async {
123+
const textFieldName = 'text';
124+
const errorTextField = 'error text field';
125+
final testWidget = FormBuilderTextField(name: textFieldName);
126+
await tester.pumpWidget(buildTestableFieldWidget(testWidget));
127+
128+
// Set custom error
129+
formKey.currentState?.fields[textFieldName]?.invalidate(errorTextField);
130+
await tester.pumpAndSettle();
131+
132+
expect(formKey.currentState?.isValid, isFalse);
133+
});
134+
testWidgets('Should valid when no has error and autovalidateMode is always',
135+
(tester) async {
136+
const textFieldName = 'text';
137+
const errorTextField = 'error text field';
138+
final testWidget = FormBuilderTextField(
139+
name: textFieldName,
140+
validator: (value) =>
141+
value == null || value.isEmpty ? errorTextField : null,
142+
);
143+
await tester.pumpWidget(buildTestableFieldWidget(
144+
testWidget,
145+
autovalidateMode: AutovalidateMode.always,
146+
));
147+
148+
expect(formKey.currentState?.isValid, isFalse);
149+
150+
final widgetFinder = find.byWidget(testWidget);
151+
await tester.enterText(widgetFinder, 'test');
152+
await tester.pumpAndSettle();
153+
154+
expect(formKey.currentState?.isValid, isTrue);
155+
});
156+
testWidgets('Should invalid when has error and autovalidateMode is always',
157+
(tester) async {
158+
const textFieldName = 'text';
159+
const errorTextField = 'error text field';
160+
final testWidget = FormBuilderTextField(
161+
name: textFieldName,
162+
validator: (value) =>
163+
value == null || value.length < 10 ? errorTextField : null,
164+
);
165+
await tester.pumpWidget(buildTestableFieldWidget(
166+
testWidget,
167+
autovalidateMode: AutovalidateMode.always,
168+
));
169+
170+
expect(formKey.currentState?.isValid, isFalse);
171+
172+
final widgetFinder = find.byWidget(testWidget);
173+
await tester.enterText(widgetFinder, 'test');
174+
await tester.pumpAndSettle();
175+
176+
expect(formKey.currentState?.isValid, isFalse);
177+
});
178+
});
179+
121180
group('skipDisabled -', () {
122181
testWidgets(
123182
'Should not show error when field is not enabled and skipDisabled is true',

0 commit comments

Comments
 (0)