workouttest_app/test/widget_test.login.dart
2020-08-17 12:38:47 +02:00

108 lines
3.4 KiB
Dart

// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:aitrainer_app/bloc/login_form_bloc.dart';
import 'package:aitrainer_app/library_keys.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/model/user.dart';
import 'package:aitrainer_app/repository/user_repository.dart';
import 'package:aitrainer_app/util/common.dart';
import 'package:aitrainer_app/view/login.dart';
import 'package:bloc_test/bloc_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_form_bloc/flutter_form_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
class MockUserRepository extends Mock implements UserRepository {
final User user = User();
setEmail(String email) {
this.user.email = email;
}
setPassword(String password) {
this.user.password = password;
}
Future<void> getUser() async {
if ( this.user.email == "sw@andio.biz" && this.user.password == "PalKataPeter1") {
//OK
} else {
throw new Exception("Customer does not exist");
}
}
}
class MockLoginBloc extends MockBloc<FormBlocEvent>
implements LoginFormBloc {}
void main() {
group('LoginScreen', () {
MockLoginBloc loginBloc;
MockUserRepository userRepository;
Widget loginWidget;
setUp(() {
loginBloc = MockLoginBloc();
userRepository = MockUserRepository();
loginWidget =
MaterialApp(
home: LoginPage(),
localizationsDelegates: [
AppLocalizationsDelegate(isTest: true),
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
routes: {
'home': (context) => LoginPage(),
}
);
});
tearDown(() {
loginBloc.close();
});
testWidgets('Display login page', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(loginWidget);
await tester.pumpAndSettle();
expect(find.byKey(LibraryKeys.loginEmailField), findsOneWidget);
expect(find.byKey(LibraryKeys.loginPasswordField), findsOneWidget);
expect(find.byKey(LibraryKeys.loginOKButton), findsOneWidget);
});
testWidgets('Add zero length email', (WidgetTester tester) async {
await tester.pumpWidget(loginWidget);
await tester.pumpAndSettle();
var emailField = find.byKey(LibraryKeys.loginEmailField);
var pwdField = find.byKey(LibraryKeys.loginPasswordField);
var okButton = find.byKey(LibraryKeys.loginOKButton);
expect(emailField, findsOneWidget);
expect(pwdField, findsOneWidget);
expect(okButton, findsOneWidget);
await tester.tap(emailField);
await tester.enterText(emailField, "sw");
await tester.enterText(pwdField, "123");
await tester.pumpAndSettle();
await tester.tap(okButton);
await tester.pump(const Duration(milliseconds: 500)); // add delay
final emailErrorFinder = find.text(Common.EMAIL_ERROR);
expect(emailErrorFinder, findsOneWidget);
});
});
}