Skip to content

Commit

Permalink
Add golden test: "renders empty create homework dialog as expected"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonas-Sander committed Oct 16, 2023
1 parent 8b6b9a0 commit 6cbf3a2
Show file tree
Hide file tree
Showing 13 changed files with 1,387 additions and 5 deletions.
11 changes: 6 additions & 5 deletions app/lib/pages/homework/homework_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ class _HomeworkDialogState extends State<HomeworkDialog> {
}
return bloc_lib.BlocProvider(
create: (context) => bloc,
child: __HomeworkDialog(
child: HomeworkDialogMain(
isEditing: snapshot.data != null,
bloc: bloc,
),
Expand All @@ -129,19 +129,20 @@ class HwDialogKeys {
static const Key saveButton = Key("save-button");
}

class __HomeworkDialog extends StatefulWidget {
const __HomeworkDialog(
@visibleForTesting
class HomeworkDialogMain extends StatefulWidget {
const HomeworkDialogMain(
{Key? key, required this.isEditing, required this.bloc})
: super(key: key);

final bool isEditing;
final HomeworkDialogBloc bloc;

@override
__HomeworkDialogState createState() => __HomeworkDialogState();
HomeworkDialogMainState createState() => HomeworkDialogMainState();
}

class __HomeworkDialogState extends State<__HomeworkDialog> {
class HomeworkDialogMainState extends State<HomeworkDialogMain> {
final titleNode = FocusNode();

@override
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Copyright (c) 2023 Sharezone UG (haftungsbeschränkt)
// Licensed under the EUPL-1.2-or-later.
//
// You may obtain a copy of the Licence at:
// https://joinup.ec.europa.eu/software/page/eupl
//
// SPDX-License-Identifier: EUPL-1.2

import 'package:bloc_test/bloc_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_lib;
import 'package:flutter_test/flutter_test.dart';
import 'package:golden_toolkit/golden_toolkit.dart';
import 'package:sharezone/blocs/homework/homework_dialog_bloc.dart';
import 'package:sharezone/pages/homework/homework_dialog.dart';
import 'package:sharezone_widgets/sharezone_widgets.dart';

// ignore_for_file: invalid_use_of_visible_for_testing_member

class MockHomeworkDialogBloc
extends MockBloc<HomeworkDialogEvent, HomeworkDialogState>
implements HomeworkDialogBloc {}

void main() {
group('HomeworkDialog', () {
late MockHomeworkDialogBloc homeworkDialogBloc;

setUp(() {
homeworkDialogBloc = MockHomeworkDialogBloc();
});

Future<void> pumpAndSettleHomeworkDialog(WidgetTester tester,
{required ThemeData theme, required bool isEditing}) async {
await tester.pumpWidgetBuilder(
bloc_lib.BlocProvider<HomeworkDialogBloc>(
create: (context) => homeworkDialogBloc,
child: Scaffold(
body: HomeworkDialogMain(
isEditing: isEditing,
bloc: homeworkDialogBloc,
),
),
),
wrapper: materialAppWrapper(theme: theme),
);

// We have a delay for displaying the keyboard (using a Timer).
// We have to wait until the timer is finished, otherwise this happens:
// The following assertion was thrown running a test:
// A Timer is still pending even after the widget tree was disposed.
// We use a very long timer to show that it doesn't actually
// make the test slower.
await tester.pumpAndSettle(const Duration(seconds: 25));
}

testGoldens('renders empty create homework dialog as expected',
(tester) async {
whenListen(
homeworkDialogBloc,
Stream.value(emptyCreateHomeworkDialogState),
initialState: emptyCreateHomeworkDialogState,
);

await pumpAndSettleHomeworkDialog(tester,
isEditing: false, theme: lightTheme);

await multiScreenGolden(
tester,
'homework_dialog_add_empty_light',
);

await pumpAndSettleHomeworkDialog(tester,
isEditing: false, theme: darkTheme);

await multiScreenGolden(
tester,
'homework_dialog_add_empty_dark',
);
});
});
}

// Used temporarily when testing so one can see what happens "on the screen" in
// a widget test without having to use a real device / simulator to run these
// tests.
// --update-goldens
Future<void> generateGolden(String name) async {
await expectLater(
find.byType(MaterialApp), matchesGoldenFile('goldens/golden_$name.png'));
}
Loading

0 comments on commit 6cbf3a2

Please sign in to comment.