Skip to content

Commit 97be5e6

Browse files
test: add autovalidate mode test cases on form builder
1 parent 81b5f5e commit 97be5e6

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

test/src/form_builder_test.dart

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter/services.dart';
23
import 'package:flutter_form_builder/flutter_form_builder.dart';
34
import 'package:flutter_test/flutter_test.dart';
45

@@ -249,6 +250,86 @@ void main() {
249250

250251
expect(find.text(errorTextField), findsOneWidget);
251252
});
253+
testWidgets(
254+
'Should not show error when init form and AutovalidateMode is disabled',
255+
(tester) async {
256+
const textFieldName = 'text4';
257+
const errorTextField = 'error text field';
258+
final testWidget = FormBuilderTextField(
259+
name: textFieldName,
260+
validator: (value) => errorTextField,
261+
);
262+
await tester.pumpWidget(buildTestableFieldWidget(
263+
testWidget,
264+
autovalidateMode: AutovalidateMode.disabled,
265+
));
266+
await tester.pumpAndSettle();
267+
268+
expect(find.text(errorTextField), findsNothing);
269+
});
270+
testWidgets(
271+
'Should show error when init form and AutovalidateMode is onUserInteraction',
272+
(tester) async {
273+
const textFieldName = 'text4';
274+
const errorTextField = 'error text field';
275+
final testWidget = FormBuilderTextField(
276+
name: textFieldName,
277+
validator: (value) => errorTextField,
278+
);
279+
await tester.pumpWidget(buildTestableFieldWidget(
280+
testWidget,
281+
autovalidateMode: AutovalidateMode.onUserInteraction,
282+
));
283+
await tester.pumpAndSettle();
284+
285+
expect(find.text(errorTextField), findsNothing);
286+
287+
final widgetFinder = find.byWidget(testWidget);
288+
await tester.enterText(widgetFinder, 'test');
289+
await tester.pumpAndSettle();
290+
291+
expect(find.text(errorTextField), findsOneWidget);
292+
});
293+
testWidgets(
294+
'Should show error when init form and AutovalidateMode is onUnfocus',
295+
(tester) async {
296+
const textFieldName = 'text4';
297+
const errorTextField = 'error text field';
298+
final testWidget = FormBuilderTextField(
299+
name: textFieldName,
300+
validator: (value) => errorTextField,
301+
);
302+
final widgetFinder = find.byWidget(testWidget);
303+
304+
// Init form
305+
await tester.pumpWidget(buildTestableFieldWidget(
306+
Column(
307+
children: [
308+
testWidget,
309+
ElevatedButton(onPressed: () {}, child: const Text('Submit')),
310+
],
311+
),
312+
autovalidateMode: AutovalidateMode.onUnfocus,
313+
));
314+
await tester.pumpAndSettle();
315+
final focusNode =
316+
formKey.currentState?.fields[textFieldName]?.effectiveFocusNode;
317+
expect(find.text(errorTextField), findsNothing);
318+
expect(Focus.of(tester.element(widgetFinder)).hasFocus, false);
319+
expect(focusNode?.hasFocus, false);
320+
321+
// Focus input and write text
322+
await tester.enterText(widgetFinder, 'test');
323+
await tester.pumpAndSettle();
324+
expect(Focus.of(tester.element(widgetFinder)).hasFocus, true);
325+
expect(focusNode?.hasFocus, true);
326+
expect(find.text(errorTextField), findsNothing);
327+
328+
// Unfocus input and show error
329+
await tester.sendKeyEvent(LogicalKeyboardKey.tab);
330+
await tester.pumpAndSettle();
331+
expect(find.text(errorTextField), findsOneWidget);
332+
});
252333
});
253334

254335
group('isDirty - ', () {

0 commit comments

Comments
 (0)