Added widget tests

This commit is contained in:
Jacques Doeleman 2022-09-21 09:20:15 +02:00
parent 7600f1ad98
commit d0c027820a
5 changed files with 162 additions and 3 deletions

View file

@ -11,9 +11,10 @@ import 'package:profile/profile.dart';
abstract class ProfileService {
const ProfileService();
deleteProfile() {}
deleteProfile() async {}
editProfile<T extends ProfileData>(User user, String key, String value) {
editProfile<T extends ProfileData>(
User user, String key, String value) async {
if (user.profileData != null) {
var map = user.profileData!.toMap();
if (map.containsKey(key)) {

View file

@ -31,6 +31,7 @@ class ItemBuilder {
return Form(
key: formKey,
child: TextFormField(
key: Key(key),
controller: controller,
decoration: inputDecoration,
readOnly: options.readOnly,

View file

@ -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);
});
}

View file

@ -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<String, dynamic> mapWidget(
VoidCallback update,
BuildContext context,
) {
return {
'email': null,
};
}
@override
ProfileData fromMap(Map<String, dynamic> data) {
return TestProfileData(
email: data['email'],
);
}
@override
Map<String, dynamic> toMap() {
return {
'email': email,
};
}
@override
ProfileData create() {
return TestProfileData();
}
}

View file

@ -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<T extends ProfileData>(
User<ProfileData> user,
String key,
String value,
) {
super.editProfile(user, key, value);
}
@override
Future<void> uploadImage(BuildContext context) async {
super.uploadImage(context);
}
}