test: test leaderboard page

pull/51/head
RuiAlonso 4 years ago
parent b79629725e
commit 90395a8c06

@ -30,7 +30,7 @@ class GameOverDialog extends StatelessWidget {
Text(l10n.gameOver),
TextButton(
onPressed: () => Navigator.of(context).push<void>(
LeaderBoardPage.route(theme),
LeaderBoardPage.route(theme: theme),
),
child: Text(l10n.leadersBoard),
),

@ -11,7 +11,7 @@ class LeaderBoardPage extends StatelessWidget {
final PinballTheme theme;
static Route route(PinballTheme theme) {
static Route route({required PinballTheme theme}) {
return MaterialPageRoute<void>(
builder: (_) => LeaderBoardPage(theme: theme),
);
@ -36,24 +36,26 @@ class LeaderBoardView extends StatelessWidget {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 80),
Text(
l10n.leadersBoard,
style: Theme.of(context).textTheme.headline3,
),
const SizedBox(height: 80),
const _LeaderBoardView(),
const SizedBox(height: 20),
TextButton(
onPressed: () => Navigator.of(context).push<void>(
CharacterSelectionPage.route(),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 80),
Text(
l10n.leadersBoard,
style: Theme.of(context).textTheme.headline3,
),
child: Text(l10n.retry),
),
],
const SizedBox(height: 80),
const _LeaderBoardView(),
const SizedBox(height: 20),
TextButton(
onPressed: () => Navigator.of(context).push<void>(
CharacterSelectionPage.route(),
),
child: Text(l10n.retry),
),
],
),
),
),
);
@ -67,14 +69,12 @@ class _LeaderBoardView extends StatelessWidget {
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(20),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
_LeaderBoardHeaders(),
_LeaderBoardList(),
],
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
_LeaderBoardHeaders(),
_LeaderBoardList(),
],
),
);
}

@ -103,10 +103,7 @@ void main() {
);
await tester.pump();
expect(
find.text('Game Over'),
findsOneWidget,
);
expect(find.byType(GameOverDialog), findsOneWidget);
},
);

@ -0,0 +1,48 @@
// ignore_for_file: prefer_const_constructors
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockingjay/mockingjay.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball/l10n/l10n.dart';
import 'package:pinball_theme/pinball_theme.dart';
import '../../../helpers/helpers.dart';
void main() {
group('GameOverDialog', () {
testWidgets('renders correctly', (tester) async {
final l10n = await AppLocalizations.delegate.load(Locale('en'));
await tester.pumpApp(
const GameOverDialog(
theme: PinballTheme(
characterTheme: DashTheme(),
),
),
);
expect(find.text(l10n.gameOver), findsOneWidget);
expect(find.text(l10n.leadersBoard), findsOneWidget);
});
testWidgets('tapping on leaderboard button navigates to LeaderBoardPage',
(tester) async {
final l10n = await AppLocalizations.delegate.load(Locale('en'));
final navigator = MockNavigator();
when(() => navigator.push<void>(any())).thenAnswer((_) async {});
await tester.pumpApp(
const GameOverDialog(
theme: PinballTheme(
characterTheme: DashTheme(),
),
),
navigator: navigator,
);
await tester.tap(find.widgetWithText(TextButton, l10n.leadersBoard));
verify(() => navigator.push<void>(any())).called(1);
});
});
}

@ -0,0 +1,90 @@
// ignore_for_file: prefer_const_constructors
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockingjay/mockingjay.dart';
import 'package:pinball/l10n/l10n.dart';
import 'package:pinball/leaderboard/view/leader_board_page.dart';
import 'package:pinball_theme/pinball_theme.dart';
import '../../helpers/helpers.dart';
void main() {
group('LeaderBoardPage', () {
testWidgets('renders LeaderBoardView', (tester) async {
final l10n = await AppLocalizations.delegate.load(Locale('en'));
await tester.pumpApp(
LeaderBoardPage(
theme: PinballTheme(
characterTheme: DashTheme(),
),
),
);
expect(find.byType(LeaderBoardView), findsOneWidget);
});
testWidgets('route returns a valid navigation route', (tester) async {
await tester.pumpApp(
Scaffold(
body: Builder(
builder: (context) {
return ElevatedButton(
onPressed: () {
Navigator.of(context).push<void>(
LeaderBoardPage.route(
theme: PinballTheme(
characterTheme: DashTheme(),
),
),
);
},
child: const Text('Tap me'),
);
},
),
),
);
await tester.tap(find.text('Tap me'));
await tester.pumpAndSettle();
expect(find.byType(LeaderBoardPage), findsOneWidget);
});
});
group('LeaderBoardView', () {
testWidgets('renders correctly', (tester) async {
final l10n = await AppLocalizations.delegate.load(Locale('en'));
await tester.pumpApp(
LeaderBoardPage(
theme: PinballTheme(
characterTheme: DashTheme(),
),
),
);
expect(find.text(l10n.leadersBoard), findsOneWidget);
expect(find.text(l10n.retry), findsOneWidget);
});
testWidgets('navigates to CharacterSelectionPage when retry is tapped',
(tester) async {
final navigator = MockNavigator();
when(() => navigator.push<void>(any())).thenAnswer((_) async {});
await tester.pumpApp(
LeaderBoardPage(
theme: PinballTheme(
characterTheme: DashTheme(),
),
),
navigator: navigator,
);
await tester.ensureVisible(find.byType(TextButton));
await tester.tap(find.byType(TextButton));
verify(() => navigator.push<void>(any())).called(1);
});
});
}
Loading…
Cancel
Save