From 6d8c937e2c783abd8497d2e825d07c25f4a63e0c Mon Sep 17 00:00:00 2001 From: Jacques Doeleman Date: Thu, 29 Sep 2022 09:50:38 +0200 Subject: [PATCH] Added more tests --- test/flutter_form_test.dart | 191 ++++++++++++++++++++++++++++++++++-- 1 file changed, 184 insertions(+), 7 deletions(-) diff --git a/test/flutter_form_test.dart b/test/flutter_form_test.dart index 9f71d7e..bb7f740 100644 --- a/test/flutter_form_test.dart +++ b/test/flutter_form_test.dart @@ -4,7 +4,7 @@ import 'package:flutter_form/next_shell/form.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { - testWidgets('Normal walk through with check page', (tester) async { + testWidgets('Normal walk through without check page', (tester) async { FlutterFormController formController = FlutterFormController(); var testField1Controller = FlutterFormInputPlainTextController( @@ -25,7 +25,6 @@ void main() { home: Material( child: FlutterForm( options: FlutterFormOptions( - checkPage: const CheckPage(), nextButton: (pageNumber, checkingPages) { return Align( alignment: Alignment.bottomCenter, @@ -42,11 +41,9 @@ void main() { ); }, onFinished: (Map> results) { - print('finished results: $results'); onFinishResults = results; }, onNext: (int pageNumber, Map results) { - print('nextResults: $pageNumber: $results'); onNextPageNumber = pageNumber; onNextResults = results; }, @@ -91,12 +88,192 @@ void main() { expect(1, onNextPageNumber); expect({'Field2': 'Field2Input'}, onNextResults); - await tester.tap(find.widgetWithText(ElevatedButton, "finish")); - await tester.pumpAndSettle(); - expect({ 0: {'Field1': 'Field1Input'}, 1: {'Field2': 'Field2Input'} }, onFinishResults); }); + + testWidgets('Normal walk through with check page', (tester) async { + FlutterFormController formController = FlutterFormController(); + + var testField1Controller = FlutterFormInputPlainTextController( + id: 'Field1', + ); + + var testField2Controller = FlutterFormInputPlainTextController( + id: 'Field2', + ); + + int? onNextPageNumber; + Map? onNextResults; + + Map>? onFinishResults; + + await tester.pumpWidget( + MaterialApp( + home: Material( + child: FlutterForm( + options: FlutterFormOptions( + checkPage: const CheckPage(), + nextButton: (pageNumber, checkingPages) { + return Align( + alignment: Alignment.bottomCenter, + child: ElevatedButton( + onPressed: () async { + await formController.autoNextStep(); + }, + child: Text(pageNumber == 0 + ? 'next1' + : pageNumber == 1 + ? 'next2' + : 'finish'), + ), + ); + }, + onFinished: (Map> results) { + onFinishResults = results; + }, + onNext: (int pageNumber, Map results) { + onNextPageNumber = pageNumber; + onNextResults = results; + }, + pages: [ + FlutterFormPage( + child: Center( + child: FlutterFormInputPlainText( + label: const Text('Field1Label'), + controller: testField1Controller, + ), + ), + ), + FlutterFormPage( + child: Center( + child: FlutterFormInputPlainText( + label: const Text('Field2Label'), + controller: testField2Controller, + ), + ), + ), + ], + ), + formController: formController, + ), + ), + ), + ); + + await tester.enterText( + 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( + find.widgetWithText(TextFormField, 'Field2Label'), 'Field2Input'); + await tester.tap(find.widgetWithText(ElevatedButton, 'next2')); + await tester.pumpAndSettle(); + + expect(1, onNextPageNumber); + expect({'Field2': 'Field2Input'}, onNextResults); + + await tester.tap(find.text('Field1Input')); + await tester.pumpAndSettle(); + + await tester.enterText( + find.widgetWithText(TextFormField, 'Field1Label'), 'Field1Input2'); + await tester.tap(find.widgetWithText(ElevatedButton, 'next1')); + await tester.pumpAndSettle(); + + expect(0, onNextPageNumber); + expect({'Field1': 'Field1Input2'}, onNextResults); + + await tester.tap(find.widgetWithText(ElevatedButton, "finish")); + await tester.pumpAndSettle(); + + expect({ + 0: {'Field1': 'Field1Input2'}, + 1: {'Field2': 'Field2Input'} + }, onFinishResults); + }); + + testWidgets('Wrong input with mandatory validator', (tester) async { + FlutterFormController formController = FlutterFormController(); + + var testField1Controller = FlutterFormInputPlainTextController( + id: 'Field1', + mandatory: true, + ); + + int? onNextPageNumber; + Map? onNextResults; + + Map>? onFinishResults; + + await tester.pumpWidget( + MaterialApp( + home: Material( + child: FlutterForm( + options: FlutterFormOptions( + nextButton: (pageNumber, checkingPages) { + return Align( + alignment: Alignment.bottomCenter, + child: ElevatedButton( + onPressed: () async { + await formController.autoNextStep(); + }, + child: const Text('finish'), + ), + ); + }, + onFinished: (Map> results) { + // print('finished results: $results'); + onFinishResults = results; + }, + onNext: (int pageNumber, Map results) { + // print('nextResults: $pageNumber: $results'); + onNextPageNumber = pageNumber; + onNextResults = results; + }, + pages: [ + FlutterFormPage( + child: Center( + child: FlutterFormInputPlainText( + label: const Text('Field1Label'), + controller: testField1Controller, + ), + ), + ), + ], + ), + formController: formController, + ), + ), + ), + ); + + await tester.tap(find.widgetWithText(ElevatedButton, 'finish')); + await tester.pumpAndSettle(); + + expect(null, onNextPageNumber); + expect(null, onNextResults); + + final errorMessageFinder = find.text('Field can not be empty'); + + expect(errorMessageFinder, findsOneWidget); + + await tester.enterText( + find.widgetWithText(TextFormField, 'Field1Label'), 'Field1Input'); + await tester.tap(find.widgetWithText(ElevatedButton, 'finish')); + await tester.pumpAndSettle(); + + expect(0, onNextPageNumber); + expect({'Field1': 'Field1Input'}, onNextResults); + + expect({ + 0: {'Field1': 'Field1Input'}, + }, onFinishResults); + }); }