From d0c027820aa1123fdb1479fbf448c1d82de49e93 Mon Sep 17 00:00:00 2001 From: Jacques Doeleman Date: Wed, 21 Sep 2022 09:20:15 +0200 Subject: [PATCH] Added widget tests --- lib/src/services/profile_service.dart | 5 +- .../widgets/item_builder/item_builder.dart | 1 + test/profile_test.dart | 95 ++++++++++++++++++- test/test_classes/test_profile_data.dart | 39 ++++++++ test/test_classes/test_profile_service.dart | 25 +++++ 5 files changed, 162 insertions(+), 3 deletions(-) create mode 100644 test/test_classes/test_profile_data.dart create mode 100644 test/test_classes/test_profile_service.dart diff --git a/lib/src/services/profile_service.dart b/lib/src/services/profile_service.dart index f9d27f0..78efe1c 100644 --- a/lib/src/services/profile_service.dart +++ b/lib/src/services/profile_service.dart @@ -11,9 +11,10 @@ import 'package:profile/profile.dart'; abstract class ProfileService { const ProfileService(); - deleteProfile() {} + deleteProfile() async {} - editProfile(User user, String key, String value) { + editProfile( + User user, String key, String value) async { if (user.profileData != null) { var map = user.profileData!.toMap(); if (map.containsKey(key)) { diff --git a/lib/src/widgets/item_builder/item_builder.dart b/lib/src/widgets/item_builder/item_builder.dart index 70e81fb..95ada51 100644 --- a/lib/src/widgets/item_builder/item_builder.dart +++ b/lib/src/widgets/item_builder/item_builder.dart @@ -31,6 +31,7 @@ class ItemBuilder { return Form( key: formKey, child: TextFormField( + key: Key(key), controller: controller, decoration: inputDecoration, readOnly: options.readOnly, diff --git a/test/profile_test.dart b/test/profile_test.dart index 65b3dba..322216e 100644 --- a/test/profile_test.dart +++ b/test/profile_test.dart @@ -1 +1,94 @@ -// todo +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:profile/profile.dart'; + +import 'test_classes/test_profile_data.dart'; +import 'test_classes/test_profile_service.dart'; + +void main() { + testWidgets('Profile page with preset values', (tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: ProfilePage( + user: User( + 'Firstname', + 'Lastname', + Uint8List.fromList([]), + TestProfileData(email: 'test@email.com'), + ), + service: TestProfileService(), + ), + ), + ), + ); + + final firstNameFinder = find.text('Firstname'); + final lastNameFinder = find.text('Lastname'); + final emailFinder = find.text('test@email.com'); + + expect(firstNameFinder, findsOneWidget); + expect(lastNameFinder, findsOneWidget); + expect(emailFinder, findsOneWidget); + }); + + testWidgets('Profile page without preset value', (tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: ProfilePage( + user: User( + null, + null, + null, + TestProfileData(email: null), + ), + service: TestProfileService(), + ), + ), + ), + ); + }); + + testWidgets('Profile page with preset value and changing them', + (tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: ProfilePage( + user: User( + 'Firstname', + 'Lastname', + null, + TestProfileData(email: 'test@email.com'), + ), + service: TestProfileService(), + ), + ), + ), + ); + + await tester.enterText(find.text('Firstname'), 'FirstEditedName'); + await tester.testTextInput.receiveAction(TextInputAction.send); + await tester.pump(); + + await tester.enterText(find.text('test@email.com'), 'edited@emial.com'); + await tester.testTextInput.receiveAction(TextInputAction.send); + await tester.pump(); + + final firstNameFinder = find.text('Firstname'); + final firstNameEditedFinder = find.text('FirstEditedName'); + + final lastNameFinder = find.text('Lastname'); + + final emailFinder = find.text('test@email.com'); + final emailEditedFinder = find.text('edited@emial.com'); + + expect(firstNameFinder, findsNothing); + expect(firstNameEditedFinder, findsOneWidget); + expect(lastNameFinder, findsOneWidget); + expect(emailFinder, findsNothing); + expect(emailEditedFinder, findsOneWidget); + }); +} diff --git a/test/test_classes/test_profile_data.dart b/test/test_classes/test_profile_data.dart new file mode 100644 index 0000000..b13ccc3 --- /dev/null +++ b/test/test_classes/test_profile_data.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:profile/profile.dart'; + +class TestProfileData extends ProfileData { + TestProfileData({ + this.email, + }); + + String? email; + + @override + Map mapWidget( + VoidCallback update, + BuildContext context, + ) { + return { + 'email': null, + }; + } + + @override + ProfileData fromMap(Map data) { + return TestProfileData( + email: data['email'], + ); + } + + @override + Map toMap() { + return { + 'email': email, + }; + } + + @override + ProfileData create() { + return TestProfileData(); + } +} diff --git a/test/test_classes/test_profile_service.dart b/test/test_classes/test_profile_service.dart new file mode 100644 index 0000000..e0b53e7 --- /dev/null +++ b/test/test_classes/test_profile_service.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:profile/profile.dart'; + +class TestProfileService extends ProfileService { + TestProfileService(); + + @override + void deleteProfile() { + super.deleteProfile(); + } + + @override + void editProfile( + User user, + String key, + String value, + ) { + super.editProfile(user, key, value); + } + + @override + Future uploadImage(BuildContext context) async { + super.uploadImage(context); + } +}