Skip to content
This repository was archived by the owner on Apr 14, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
flutter-version:
# The version of Flutter to use should use the minimum Dart SDK version supported by the package,
# refer to https://docs.flutter.dev/development/tools/sdk/releases.
- "3.24.0"
- "3.29.0"
- "3.x"
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
with:
Expand Down
7 changes: 3 additions & 4 deletions example/lib/ui/home_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,7 @@ class _HomeScreenState extends State<HomeScreen> {
final monospaceFontFamily = Platform.isIOS ? 'Courier' : 'monospace';

return Scaffold(
appBar: AppBar(
title: const Text('Mockingjay Example'),
),
appBar: AppBar(title: const Text('Mockingjay Example')),
body: Center(
child: DefaultTextStyle.merge(
textAlign: TextAlign.center,
Expand All @@ -91,7 +89,8 @@ class _HomeScreenState extends State<HomeScreen> {
TextSpan(
children: [
const TextSpan(
text: 'Use one of the following buttons to trigger a '
text:
'Use one of the following buttons to trigger a '
'navigation change.\n'
'Check out the test files in the ',
),
Expand Down
4 changes: 1 addition & 3 deletions example/lib/ui/pincode_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,7 @@ class _PincodeScreenState extends State<PincodeScreen> {
final monospaceFontFamily = Platform.isIOS ? 'Courier' : 'monospace';

return Scaffold(
appBar: AppBar(
title: const Text('Pincode Screen'),
),
appBar: AppBar(title: const Text('Pincode Screen')),
body: Center(
child: DefaultTextStyle.merge(
textAlign: TextAlign.center,
Expand Down
5 changes: 1 addition & 4 deletions example/lib/ui/quiz_dialog.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import 'package:flutter/cupertino.dart';

enum QuizOption {
pizza,
hamburger,
}
enum QuizOption { pizza, hamburger }

class QuizDialog extends StatelessWidget {
const QuizDialog({super.key});
Expand Down
8 changes: 4 additions & 4 deletions example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ version: 0.0.1
homepage: https://github.com/VeryGoodOpenSource/mockingjay

environment:
sdk: ^3.5.0
sdk: ^3.7.0

dependencies:
bloc: ^8.1.4
bloc: ^9.0.0
equatable: ^2.0.5
flutter:
sdk: flutter
flutter_bloc: ^8.1.6
flutter_bloc: ^9.1.0
universal_io: ^2.2.2

dev_dependencies:
bloc_test: ^9.1.7
bloc_test: ^10.0.0
flutter_test:
sdk: flutter
mockingjay:
Expand Down
10 changes: 2 additions & 8 deletions example/test/helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,11 @@ import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

extension WidgetTesterX on WidgetTester {
Future<void> pumpTest({
required WidgetBuilder builder,
}) async {
Future<void> pumpTest({required WidgetBuilder builder}) async {
await pumpWidget(
MaterialApp(
title: 'Mock Navigator Test',
home: Scaffold(
body: Builder(
builder: builder,
),
),
home: Scaffold(body: Builder(builder: builder)),
),
);
}
Expand Down
230 changes: 107 additions & 123 deletions example/test/ui/home_screen_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ class FakeRoute<T> extends Fake implements Route<T> {}

void main() {
group('HomeScreen', () {
const showPincodeScreenTextButtonKey =
Key('homeScreen_showPincodeScreen_textButton');
const showQuizDialogTextButtonKey =
Key('homeScreen_showQuizDialog_textButton');
const showPincodeScreenTextButtonKey = Key(
'homeScreen_showPincodeScreen_textButton',
);
const showQuizDialogTextButtonKey = Key(
'homeScreen_showQuizDialog_textButton',
);

late MockNavigator navigator;

Expand All @@ -39,10 +41,7 @@ void main() {
},
);

expect(
find.byKey(showPincodeScreenTextButtonKey),
findsOneWidget,
);
expect(find.byKey(showPincodeScreenTextButtonKey), findsOneWidget);
});

testWidgets('navigates to PincodeScreen when pressed', (tester) async {
Expand All @@ -55,9 +54,7 @@ void main() {
},
);

await tester.tap(
find.byKey(showPincodeScreenTextButtonKey),
);
await tester.tap(find.byKey(showPincodeScreenTextButtonKey));

verify(
() => navigator.push<String?>(
Expand Down Expand Up @@ -91,37 +88,32 @@ void main() {
);
});

testWidgets(
'displays snackbar when no pincode was submitted',
(tester) async {
when(
() => navigator.push<String?>(
any(
that: isRoute<String?>(
whereName: equals('/pincode_screen'),
),
),
),
).thenAnswer((_) async => null);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showPincodeScreenTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'No pincode submitted. 😲'),
findsOneWidget,
);
},
);
testWidgets('displays snackbar when no pincode was submitted', (
tester,
) async {
when(
() => navigator.push<String?>(
any(that: isRoute<String?>(whereName: equals('/pincode_screen'))),
),
).thenAnswer((_) async => null);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showPincodeScreenTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'No pincode submitted. 😲'),
findsOneWidget,
);
});
});

group('show quiz dialog button', () {
Expand All @@ -132,10 +124,7 @@ void main() {
},
);

expect(
find.byKey(showQuizDialogTextButtonKey),
findsOneWidget,
);
expect(find.byKey(showQuizDialogTextButtonKey), findsOneWidget);
});

testWidgets('shows quiz dialog when pressed', (tester) async {
Expand All @@ -155,83 +144,78 @@ void main() {
).called(1);
});

testWidgets(
'displays snackbar when pizza was selected',
(tester) async {
when(
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
).thenAnswer((_) async => QuizOption.pizza);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showQuizDialogTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'Pizza all the way! 🍕'),
findsOneWidget,
);
},
);

testWidgets(
'displays snackbar when hamburger was selected',
(tester) async {
when(
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
).thenAnswer((_) async => QuizOption.hamburger);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showQuizDialogTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'Hamburger all the way! 🍔'),
findsOneWidget,
);
},
);

testWidgets(
'displays snackbar when no answer was selected',
(tester) async {
when(
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
).thenAnswer((_) async => null);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showQuizDialogTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'No answer selected. 😲'),
findsOneWidget,
);
},
);
testWidgets('displays snackbar when pizza was selected', (tester) async {
when(
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
).thenAnswer((_) async => QuizOption.pizza);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showQuizDialogTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'Pizza all the way! 🍕'),
findsOneWidget,
);
});

testWidgets('displays snackbar when hamburger was selected', (
tester,
) async {
when(
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
).thenAnswer((_) async => QuizOption.hamburger);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showQuizDialogTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'Hamburger all the way! 🍔'),
findsOneWidget,
);
});

testWidgets('displays snackbar when no answer was selected', (
tester,
) async {
when(
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
).thenAnswer((_) async => null);

await tester.pumpTest(
builder: (context) {
return MockNavigatorProvider(
navigator: navigator,
child: const HomeScreen(),
);
},
);

await tester.tap(find.byKey(showQuizDialogTextButtonKey));
await tester.pumpAndSettle();

expect(
find.widgetWithText(SnackBar, 'No answer selected. 😲'),
findsOneWidget,
);
});
});
});
}
Loading