flutter_form_wizard/test/flutter_form_test.dart

307 lines
9.2 KiB
Dart
Raw Normal View History

2022-11-01 08:23:35 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart';
2022-11-29 09:43:55 +01:00
import 'package:flutter_form_wizard/flutter_form.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
2022-09-29 09:50:38 +02:00
testWidgets('Normal walk through without check page', (tester) async {
2024-02-06 15:24:53 +01:00
var formController = FlutterFormController();
2022-09-29 09:50:38 +02:00
var testField1Controller = FlutterFormInputPlainTextController(
id: 'Field1',
);
var testField2Controller = FlutterFormInputPlainTextController(
id: 'Field2',
);
int? onNextPageNumber;
Map<String, dynamic>? onNextResults;
Map<int, Map<String, dynamic>>? onFinishResults;
await tester.pumpWidget(
MaterialApp(
home: Material(
child: FlutterForm(
options: FlutterFormOptions(
2024-02-06 15:24:53 +01:00
nextButton: (pageNumber, checkingPages) => Align(
alignment: Alignment.bottomCenter,
child: ElevatedButton(
onPressed: () async {
await formController.autoNextStep();
},
child: Text(
pageNumber == 0
2022-09-29 09:50:38 +02:00
? 'next1'
: pageNumber == 1
? 'next2'
2024-02-06 15:24:53 +01:00
: 'finish',
2022-09-29 09:50:38 +02:00
),
2024-02-06 15:24:53 +01:00
),
),
2022-09-29 09:50:38 +02:00
onFinished: (Map<int, Map<String, dynamic>> results) {
onFinishResults = results;
},
onNext: (int pageNumber, Map<String, dynamic> results) {
onNextPageNumber = pageNumber;
onNextResults = results;
},
pages: [
FlutterFormPage(
child: Center(
child: FlutterFormInputPlainText(
label: const Text('Field1Label'),
controller: testField1Controller,
validationMessage: 'Please fill in this field',
2022-09-29 09:50:38 +02:00
),
),
),
FlutterFormPage(
child: Center(
child: FlutterFormInputPlainText(
label: const Text('Field2Label'),
controller: testField2Controller,
validationMessage: 'Please fill in this field',
2022-09-29 09:50:38 +02:00
),
),
),
],
),
formController: formController,
),
),
),
);
await tester.enterText(
2024-02-06 15:24:53 +01:00
find.widgetWithText(TextFormField, 'Field1Label'),
'Field1Input',
);
2022-09-29 09:50:38 +02:00
await tester.tap(find.widgetWithText(ElevatedButton, 'next1'));
await tester.pumpAndSettle();
expect(0, onNextPageNumber);
expect({'Field1': 'Field1Input'}, onNextResults);
await tester.enterText(
2024-02-06 15:24:53 +01:00
find.widgetWithText(TextFormField, 'Field2Label'),
'Field2Input',
);
2022-09-29 09:50:38 +02:00
await tester.tap(find.widgetWithText(ElevatedButton, 'next2'));
await tester.pumpAndSettle();
expect(1, onNextPageNumber);
expect({'Field2': 'Field2Input'}, onNextResults);
2024-02-06 15:24:53 +01:00
expect(
{
0: {'Field1': 'Field1Input'},
1: {'Field2': 'Field2Input'},
},
onFinishResults,
);
2022-09-29 09:50:38 +02:00
});
testWidgets('Normal walk through with check page', (tester) async {
2024-02-06 15:24:53 +01:00
var formController = FlutterFormController();
var testField1Controller = FlutterFormInputPlainTextController(
id: 'Field1',
);
var testField2Controller = FlutterFormInputPlainTextController(
id: 'Field2',
);
int? onNextPageNumber;
Map<String, dynamic>? onNextResults;
Map<int, Map<String, dynamic>>? onFinishResults;
await tester.pumpWidget(
MaterialApp(
home: Material(
child: FlutterForm(
options: FlutterFormOptions(
checkPage: const CheckPage(),
2024-02-06 15:24:53 +01:00
nextButton: (pageNumber, checkingPages) => Align(
alignment: Alignment.bottomCenter,
child: ElevatedButton(
onPressed: () async {
await formController.autoNextStep();
},
child: Text(
pageNumber == 0
? 'next1'
: pageNumber == 1
? 'next2'
2024-02-06 15:24:53 +01:00
: 'finish',
),
2024-02-06 15:24:53 +01:00
),
),
onFinished: (Map<int, Map<String, dynamic>> results) {
onFinishResults = results;
},
onNext: (int pageNumber, Map<String, dynamic> results) {
onNextPageNumber = pageNumber;
onNextResults = results;
},
pages: [
FlutterFormPage(
child: Center(
child: FlutterFormInputPlainText(
label: const Text('Field1Label'),
controller: testField1Controller,
validationMessage: 'Please fill in this field',
),
),
),
FlutterFormPage(
child: Center(
child: FlutterFormInputPlainText(
label: const Text('Field2Label'),
controller: testField2Controller,
validationMessage: 'Please fill in this field',
),
),
),
],
),
formController: formController,
),
),
),
);
await tester.enterText(
2024-02-06 15:24:53 +01:00
find.widgetWithText(TextFormField, 'Field1Label'),
'Field1Input',
);
await tester.tap(find.widgetWithText(ElevatedButton, 'next1'));
await tester.pumpAndSettle();
expect(0, onNextPageNumber);
expect({'Field1': 'Field1Input'}, onNextResults);
await tester.enterText(
2024-02-06 15:24:53 +01:00
find.widgetWithText(TextFormField, 'Field2Label'),
'Field2Input',
);
await tester.tap(find.widgetWithText(ElevatedButton, 'next2'));
await tester.pumpAndSettle();
expect(1, onNextPageNumber);
expect({'Field2': 'Field2Input'}, onNextResults);
2022-09-29 09:50:38 +02:00
await tester.tap(find.text('Field1Input'));
await tester.pumpAndSettle();
await tester.enterText(
2024-02-06 15:24:53 +01:00
find.widgetWithText(TextFormField, 'Field1Label'),
'Field1Input2',
);
2022-09-29 09:50:38 +02:00
await tester.tap(find.widgetWithText(ElevatedButton, 'next1'));
await tester.pumpAndSettle();
expect(0, onNextPageNumber);
expect({'Field1': 'Field1Input2'}, onNextResults);
2024-02-06 15:24:53 +01:00
await tester.tap(find.widgetWithText(ElevatedButton, 'finish'));
await tester.pumpAndSettle();
2024-02-06 15:24:53 +01:00
expect(
{
0: {'Field1': 'Field1Input2'},
1: {'Field2': 'Field2Input'},
},
onFinishResults,
);
});
2022-09-29 09:50:38 +02:00
testWidgets('Wrong input with mandatory validator', (tester) async {
2024-02-06 15:24:53 +01:00
var formController = FlutterFormController();
2022-09-29 09:50:38 +02:00
var testField1Controller = FlutterFormInputPlainTextController(
id: 'Field1',
mandatory: true,
);
int? onNextPageNumber;
Map<String, dynamic>? onNextResults;
Map<int, Map<String, dynamic>>? onFinishResults;
await tester.pumpWidget(
MaterialApp(
home: Material(
child: FlutterForm(
options: FlutterFormOptions(
2024-02-06 15:24:53 +01:00
nextButton: (pageNumber, checkingPages) => Align(
alignment: Alignment.bottomCenter,
child: ElevatedButton(
onPressed: () async {
await formController.autoNextStep();
},
child: const Text('finish'),
),
),
2022-09-29 09:50:38 +02:00
onFinished: (Map<int, Map<String, dynamic>> results) {
// print('finished results: $results');
onFinishResults = results;
},
onNext: (int pageNumber, Map<String, dynamic> results) {
// print('nextResults: $pageNumber: $results');
onNextPageNumber = pageNumber;
onNextResults = results;
},
pages: [
FlutterFormPage(
child: Center(
child: FlutterFormInputPlainText(
label: const Text('Field1Label'),
controller: testField1Controller,
validationMessage: 'Field can not be empty',
2022-09-29 09:50:38 +02:00
),
),
),
],
),
formController: formController,
),
),
),
);
await tester.tap(find.widgetWithText(ElevatedButton, 'finish'));
await tester.pumpAndSettle();
expect(null, onNextPageNumber);
expect(null, onNextResults);
2024-02-06 15:24:53 +01:00
var errorMessageFinder = find.text('Field can not be empty');
2022-09-29 09:50:38 +02:00
expect(errorMessageFinder, findsOneWidget);
await tester.enterText(
2024-02-06 15:24:53 +01:00
find.widgetWithText(TextFormField, 'Field1Label'),
'Field1Input',
);
2022-09-29 09:50:38 +02:00
await tester.tap(find.widgetWithText(ElevatedButton, 'finish'));
await tester.pumpAndSettle();
expect(0, onNextPageNumber);
expect({'Field1': 'Field1Input'}, onNextResults);
2024-02-06 15:24:53 +01:00
expect(
{
0: {'Field1': 'Field1Input'},
},
onFinishResults,
);
2022-09-29 09:50:38 +02:00
});
}