mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 23:42:00 +01:00
Update SessionForm test
This commit is contained in:
@@ -21,8 +21,8 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wger/exceptions/http_exception.dart';
|
||||
import 'package:wger/helpers/consts.dart';
|
||||
import 'package:wger/helpers/errors.dart';
|
||||
import 'package:wger/helpers/json.dart';
|
||||
import 'package:wger/helpers/ui.dart';
|
||||
import 'package:wger/l10n/generated/app_localizations.dart';
|
||||
import 'package:wger/models/workouts/session.dart';
|
||||
import 'package:wger/providers/routines.dart';
|
||||
@@ -51,6 +51,7 @@ class SessionForm extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _SessionFormState extends State<SessionForm> {
|
||||
Widget errorMessage = const SizedBox.shrink();
|
||||
final _form = GlobalKey<FormState>();
|
||||
|
||||
final impressionController = TextEditingController();
|
||||
@@ -90,6 +91,7 @@ class _SessionFormState extends State<SessionForm> {
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
errorMessage,
|
||||
ToggleButtons(
|
||||
renderBorder: false,
|
||||
onPressed: (int index) {
|
||||
@@ -219,16 +221,18 @@ class _SessionFormState extends State<SessionForm> {
|
||||
await routinesProvider.editSession(widget._session);
|
||||
}
|
||||
|
||||
setState(() {
|
||||
errorMessage = const SizedBox.shrink();
|
||||
});
|
||||
|
||||
if (context.mounted && widget._onSaved != null) {
|
||||
widget._onSaved!();
|
||||
}
|
||||
} on WgerHttpException catch (error) {
|
||||
if (context.mounted) {
|
||||
showHttpExceptionErrorDialog(error, context);
|
||||
}
|
||||
} catch (error) {
|
||||
if (context.mounted) {
|
||||
showErrorDialog(error, context);
|
||||
setState(() {
|
||||
errorMessage = FormHttpErrorsWidget(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wger/exceptions/http_exception.dart';
|
||||
import 'package:wger/l10n/generated/app_localizations.dart';
|
||||
import 'package:wger/models/workouts/session.dart';
|
||||
import 'package:wger/providers/routines.dart';
|
||||
@@ -126,5 +127,20 @@ void main() {
|
||||
expect(captured.notes, 'Updated notes');
|
||||
expect(onSavedCalled, isTrue);
|
||||
});
|
||||
|
||||
testWidgets('shows server side error messages', (WidgetTester tester) async {
|
||||
// Arrange
|
||||
await pumpSessionForm(tester);
|
||||
when(mockRoutinesProvider.addSession(any, any)).thenThrow(WgerHttpException.fromMap({
|
||||
'name': ['The name is not valid'],
|
||||
}));
|
||||
|
||||
// Act
|
||||
await tester.tap(find.byKey(const ValueKey('save-button')));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Assert
|
||||
expect(find.text('The name is not valid'), findsOneWidget, reason: 'Error message is shown');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user