fix: suggestion

pull/411/head
Allison Ryan 3 years ago
parent 4c56ca0147
commit 9c50397c4b

@ -9,6 +9,7 @@ import 'package:pinball/select_character/select_character.dart';
import 'package:pinball/start_game/start_game.dart'; import 'package:pinball/start_game/start_game.dart';
import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_ui/pinball_ui.dart'; import 'package:pinball_ui/pinball_ui.dart';
import 'package:platform_helper/platform_helper.dart';
import 'package:share_repository/share_repository.dart'; import 'package:share_repository/share_repository.dart';
class App extends StatelessWidget { class App extends StatelessWidget {
@ -18,16 +19,19 @@ class App extends StatelessWidget {
required LeaderboardRepository leaderboardRepository, required LeaderboardRepository leaderboardRepository,
required ShareRepository shareRepository, required ShareRepository shareRepository,
required PinballAudioPlayer pinballAudioPlayer, required PinballAudioPlayer pinballAudioPlayer,
required PlatformHelper platformHelper,
}) : _authenticationRepository = authenticationRepository, }) : _authenticationRepository = authenticationRepository,
_leaderboardRepository = leaderboardRepository, _leaderboardRepository = leaderboardRepository,
_shareRepository = shareRepository, _shareRepository = shareRepository,
_pinballAudioPlayer = pinballAudioPlayer, _pinballAudioPlayer = pinballAudioPlayer,
_platformHelper = platformHelper,
super(key: key); super(key: key);
final AuthenticationRepository _authenticationRepository; final AuthenticationRepository _authenticationRepository;
final LeaderboardRepository _leaderboardRepository; final LeaderboardRepository _leaderboardRepository;
final ShareRepository _shareRepository; final ShareRepository _shareRepository;
final PinballAudioPlayer _pinballAudioPlayer; final PinballAudioPlayer _pinballAudioPlayer;
final PlatformHelper _platformHelper;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -37,6 +41,7 @@ class App extends StatelessWidget {
RepositoryProvider.value(value: _leaderboardRepository), RepositoryProvider.value(value: _leaderboardRepository),
RepositoryProvider.value(value: _shareRepository), RepositoryProvider.value(value: _shareRepository),
RepositoryProvider.value(value: _pinballAudioPlayer), RepositoryProvider.value(value: _pinballAudioPlayer),
RepositoryProvider.value(value: _platformHelper),
], ],
child: MultiBlocProvider( child: MultiBlocProvider(
providers: [ providers: [

@ -27,23 +27,19 @@ class Backbox extends PositionComponent with ZIndex, HasGameRef {
leaderboardRepository: leaderboardRepository, leaderboardRepository: leaderboardRepository,
initialEntries: entries, initialEntries: entries,
), ),
_shareRepository = shareRepository, _shareRepository = shareRepository;
_platformHelper = PlatformHelper();
/// {@macro backbox} /// {@macro backbox}
@visibleForTesting @visibleForTesting
Backbox.test({ Backbox.test({
required BackboxBloc bloc, required BackboxBloc bloc,
required ShareRepository shareRepository, required ShareRepository shareRepository,
required PlatformHelper platformHelper,
}) : _bloc = bloc, }) : _bloc = bloc,
_shareRepository = shareRepository, _shareRepository = shareRepository;
_platformHelper = platformHelper;
final ShareRepository _shareRepository; final ShareRepository _shareRepository;
late final Component _display; late final Component _display;
final BackboxBloc _bloc; final BackboxBloc _bloc;
final PlatformHelper _platformHelper;
late StreamSubscription<BackboxState> _subscription; late StreamSubscription<BackboxState> _subscription;
@override @override
@ -76,7 +72,7 @@ class Backbox extends PositionComponent with ZIndex, HasGameRef {
} else if (state is LeaderboardFailureState) { } else if (state is LeaderboardFailureState) {
_display.add(LeaderboardFailureDisplay()); _display.add(LeaderboardFailureDisplay());
} else if (state is InitialsFormState) { } else if (state is InitialsFormState) {
if (_platformHelper.isMobile) { if (readProvider<PlatformHelper>().isMobile) {
gameRef.overlays.add(PinballGame.mobileControlsOverlay); gameRef.overlays.add(PinballGame.mobileControlsOverlay);
} }
_display.add( _display.add(

@ -28,7 +28,7 @@ class PinballGamePage extends StatelessWidget {
final audioPlayer = context.read<PinballAudioPlayer>(); final audioPlayer = context.read<PinballAudioPlayer>();
final leaderboardRepository = context.read<LeaderboardRepository>(); final leaderboardRepository = context.read<LeaderboardRepository>();
final shareRepository = context.read<ShareRepository>(); final shareRepository = context.read<ShareRepository>();
final platformHelper = PlatformHelper(); final platformHelper = context.read<PlatformHelper>();
final gameBloc = context.read<GameBloc>(); final gameBloc = context.read<GameBloc>();
final game = isDebugMode final game = isDebugMode
? DebugPinballGame( ? DebugPinballGame(

@ -50,14 +50,11 @@ extension on Control {
} }
class HowToPlayDialog extends StatefulWidget { class HowToPlayDialog extends StatefulWidget {
HowToPlayDialog({ const HowToPlayDialog({
Key? key, Key? key,
required this.onDismissCallback, required this.onDismissCallback,
@visibleForTesting PlatformHelper? platformHelper, }) : super(key: key);
}) : platformHelper = platformHelper ?? PlatformHelper(),
super(key: key);
final PlatformHelper platformHelper;
final VoidCallback onDismissCallback; final VoidCallback onDismissCallback;
@override @override
@ -85,7 +82,7 @@ class _HowToPlayDialogState extends State<HowToPlayDialog> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isMobile = widget.platformHelper.isMobile; final isMobile = context.read<PlatformHelper>().isMobile;
final l10n = context.l10n; final l10n = context.l10n;
return WillPopScope( return WillPopScope(

@ -6,6 +6,7 @@ import 'package:leaderboard_repository/leaderboard_repository.dart';
import 'package:pinball/app/app.dart'; import 'package:pinball/app/app.dart';
import 'package:pinball/bootstrap.dart'; import 'package:pinball/bootstrap.dart';
import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_audio/pinball_audio.dart';
import 'package:platform_helper/platform_helper.dart';
import 'package:share_repository/share_repository.dart'; import 'package:share_repository/share_repository.dart';
void main() { void main() {
@ -15,6 +16,7 @@ void main() {
ShareRepository(appUrl: ShareRepository.pinballGameUrl); ShareRepository(appUrl: ShareRepository.pinballGameUrl);
final authenticationRepository = AuthenticationRepository(firebaseAuth); final authenticationRepository = AuthenticationRepository(firebaseAuth);
final pinballAudioPlayer = PinballAudioPlayer(); final pinballAudioPlayer = PinballAudioPlayer();
final platformHelper = PlatformHelper();
unawaited( unawaited(
Firebase.initializeApp().then( Firebase.initializeApp().then(
(_) => authenticationRepository.authenticateAnonymously(), (_) => authenticationRepository.authenticateAnonymously(),
@ -25,6 +27,7 @@ void main() {
leaderboardRepository: leaderboardRepository, leaderboardRepository: leaderboardRepository,
shareRepository: shareRepository, shareRepository: shareRepository,
pinballAudioPlayer: pinballAudioPlayer, pinballAudioPlayer: pinballAudioPlayer,
platformHelper: platformHelper,
); );
}); });
} }

@ -5,6 +5,7 @@ import 'package:mocktail/mocktail.dart';
import 'package:pinball/app/app.dart'; import 'package:pinball/app/app.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_audio/pinball_audio.dart';
import 'package:platform_helper/platform_helper.dart';
import 'package:share_repository/share_repository.dart'; import 'package:share_repository/share_repository.dart';
class _MockAuthenticationRepository extends Mock class _MockAuthenticationRepository extends Mock
@ -17,18 +18,25 @@ class _MockLeaderboardRepository extends Mock implements LeaderboardRepository {
class _MockShareRepository extends Mock implements ShareRepository {} class _MockShareRepository extends Mock implements ShareRepository {}
class _MockPlatformHelper extends Mock implements PlatformHelper {
@override
bool get isMobile => false;
}
void main() { void main() {
group('App', () { group('App', () {
late AuthenticationRepository authenticationRepository; late AuthenticationRepository authenticationRepository;
late LeaderboardRepository leaderboardRepository; late LeaderboardRepository leaderboardRepository;
late ShareRepository shareRepository; late ShareRepository shareRepository;
late PinballAudioPlayer pinballAudioPlayer; late PinballAudioPlayer pinballAudioPlayer;
late PlatformHelper platformHelper;
setUp(() { setUp(() {
authenticationRepository = _MockAuthenticationRepository(); authenticationRepository = _MockAuthenticationRepository();
leaderboardRepository = _MockLeaderboardRepository(); leaderboardRepository = _MockLeaderboardRepository();
shareRepository = _MockShareRepository(); shareRepository = _MockShareRepository();
pinballAudioPlayer = _MockPinballAudioPlayer(); pinballAudioPlayer = _MockPinballAudioPlayer();
platformHelper = _MockPlatformHelper();
when(pinballAudioPlayer.load).thenAnswer((_) => [Future.value()]); when(pinballAudioPlayer.load).thenAnswer((_) => [Future.value()]);
}); });
@ -39,6 +47,7 @@ void main() {
leaderboardRepository: leaderboardRepository, leaderboardRepository: leaderboardRepository,
shareRepository: shareRepository, shareRepository: shareRepository,
pinballAudioPlayer: pinballAudioPlayer, pinballAudioPlayer: pinballAudioPlayer,
platformHelper: platformHelper,
), ),
); );
await tester.pump(const Duration(milliseconds: 1100)); await tester.pump(const Duration(milliseconds: 1100));

@ -45,13 +45,23 @@ class _TestGame extends Forge2DGame
]); ]);
} }
Future<void> pump(Backbox component) { Future<void> pump(
Backbox component, {
PlatformHelper? platformHelper,
}) {
return ensureAdd( return ensureAdd(
FlameBlocProvider<GameBloc, GameState>.value( FlameBlocProvider<GameBloc, GameState>.value(
value: GameBloc(), value: GameBloc(),
children: [ children: [
FlameProvider.value( MultiFlameProvider(
providers: [
FlameProvider<AppLocalizations>.value(
_MockAppLocalizations(), _MockAppLocalizations(),
),
FlameProvider<PlatformHelper>.value(
platformHelper ?? _MockPlatformHelper(),
),
],
children: [component], children: [component],
), ),
], ],
@ -186,9 +196,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect(game.descendants(), contains(backbox)); expect(game.descendants(), contains(backbox));
}, },
); );
@ -204,8 +216,8 @@ void main() {
Backbox.test( Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
platformHelper: platformHelper,
), ),
platformHelper: platformHelper,
); );
await tester.pump(); await tester.pump();
}, },
@ -226,9 +238,11 @@ void main() {
initialEntries: [LeaderboardEntryData.empty], initialEntries: [LeaderboardEntryData.empty],
), ),
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
backbox.requestInitials( backbox.requestInitials(
score: 0, score: 0,
character: game.character, character: game.character,
@ -258,9 +272,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
game.onKeyEvent(_mockKeyUp(LogicalKeyboardKey.enter), {}); game.onKeyEvent(_mockKeyUp(LogicalKeyboardKey.enter), {});
verify( verify(
@ -287,9 +303,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.descendants().whereType<GameOverInfoDisplay>().length, game.descendants().whereType<GameOverInfoDisplay>().length,
@ -317,9 +335,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.overlays.value, game.overlays.value,
@ -344,9 +364,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.overlays.value, game.overlays.value,
@ -367,9 +389,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.descendants().whereType<GameOverInfoDisplay>().length, game.descendants().whereType<GameOverInfoDisplay>().length,
@ -390,9 +414,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
final shareLink = final shareLink =
game.descendants().whereType<ShareLinkComponent>().first; game.descendants().whereType<ShareLinkComponent>().first;
@ -420,9 +446,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game game
@ -452,9 +480,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.descendants().whereType<ShareDisplay>().length, game.descendants().whereType<ShareDisplay>().length,
@ -499,9 +529,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: shareRepository, shareRepository: shareRepository,
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
final facebookButton = final facebookButton =
game.descendants().whereType<FacebookButtonComponent>().first; game.descendants().whereType<FacebookButtonComponent>().first;
@ -553,9 +585,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: shareRepository, shareRepository: shareRepository,
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
final facebookButton = final facebookButton =
game.descendants().whereType<TwitterButtonComponent>().first; game.descendants().whereType<TwitterButtonComponent>().first;
@ -585,9 +619,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.descendants().whereType<LeaderboardDisplay>().length, game.descendants().whereType<LeaderboardDisplay>().length,
@ -608,9 +644,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
expect( expect(
game.descendants().whereType<LeaderboardFailureDisplay>().length, game.descendants().whereType<LeaderboardFailureDisplay>().length,
@ -632,9 +670,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
backbox.removeFromParent(); backbox.removeFromParent();
await game.ready(); await game.ready();
@ -673,9 +713,11 @@ void main() {
final backbox = Backbox.test( final backbox = Backbox.test(
bloc: bloc, bloc: bloc,
shareRepository: _MockShareRepository(), shareRepository: _MockShareRepository(),
);
await game.pump(
backbox,
platformHelper: platformHelper, platformHelper: platformHelper,
); );
await game.pump(backbox);
game.update(4); game.update(4);
verify( verify(

@ -12,6 +12,7 @@ import 'package:pinball/select_character/select_character.dart';
import 'package:pinball/start_game/start_game.dart'; import 'package:pinball/start_game/start_game.dart';
import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_ui/pinball_ui.dart'; import 'package:pinball_ui/pinball_ui.dart';
import 'package:platform_helper/platform_helper.dart';
import 'package:share_repository/share_repository.dart'; import 'package:share_repository/share_repository.dart';
class _MockAssetsManagerCubit extends Mock implements AssetsManagerCubit {} class _MockAssetsManagerCubit extends Mock implements AssetsManagerCubit {}
@ -29,6 +30,8 @@ class _MockStartGameBloc extends Mock implements StartGameBloc {}
class _MockPinballAudioPlayer extends Mock implements PinballAudioPlayer {} class _MockPinballAudioPlayer extends Mock implements PinballAudioPlayer {}
class _MockPlatformHelper extends Mock implements PlatformHelper {}
PinballAudioPlayer _buildDefaultPinballAudioPlayer() { PinballAudioPlayer _buildDefaultPinballAudioPlayer() {
final audioPlayer = _MockPinballAudioPlayer(); final audioPlayer = _MockPinballAudioPlayer();
when(audioPlayer.load).thenAnswer((_) => [Future.value()]); when(audioPlayer.load).thenAnswer((_) => [Future.value()]);
@ -60,6 +63,7 @@ extension PumpApp on WidgetTester {
LeaderboardRepository? leaderboardRepository, LeaderboardRepository? leaderboardRepository,
ShareRepository? shareRepository, ShareRepository? shareRepository,
PinballAudioPlayer? pinballAudioPlayer, PinballAudioPlayer? pinballAudioPlayer,
PlatformHelper? platformHelper,
}) { }) {
return runAsync(() { return runAsync(() {
return pumpWidget( return pumpWidget(
@ -74,6 +78,9 @@ extension PumpApp on WidgetTester {
RepositoryProvider.value( RepositoryProvider.value(
value: pinballAudioPlayer ?? _buildDefaultPinballAudioPlayer(), value: pinballAudioPlayer ?? _buildDefaultPinballAudioPlayer(),
), ),
RepositoryProvider.value(
value: platformHelper ?? _MockPlatformHelper(),
),
], ],
child: MultiBlocProvider( child: MultiBlocProvider(
providers: [ providers: [

@ -17,27 +17,23 @@ void main() {
setUp(() async { setUp(() async {
l10n = await AppLocalizations.delegate.load(const Locale('en')); l10n = await AppLocalizations.delegate.load(const Locale('en'));
platformHelper = _MockPlatformHelper(); platformHelper = _MockPlatformHelper();
when(() => platformHelper.isMobile).thenAnswer((_) => false);
}); });
testWidgets( test('can be instantiated', () {
'can be instantiated without passing in a platform helper', expect(
(tester) async { HowToPlayDialog(onDismissCallback: () {}),
await tester.pumpApp( isA<HowToPlayDialog>(),
HowToPlayDialog(
onDismissCallback: () {},
),
);
expect(find.byType(HowToPlayDialog), findsOneWidget);
},
); );
});
testWidgets('displays content for desktop', (tester) async { testWidgets('displays content for desktop', (tester) async {
when(() => platformHelper.isMobile).thenAnswer((_) => false); when(() => platformHelper.isMobile).thenAnswer((_) => false);
await tester.pumpApp( await tester.pumpApp(
HowToPlayDialog( HowToPlayDialog(
platformHelper: platformHelper,
onDismissCallback: () {}, onDismissCallback: () {},
), ),
platformHelper: platformHelper,
); );
expect(find.text(l10n.howToPlay), findsOneWidget); expect(find.text(l10n.howToPlay), findsOneWidget);
expect(find.text(l10n.tipsForFlips), findsOneWidget); expect(find.text(l10n.tipsForFlips), findsOneWidget);
@ -50,9 +46,9 @@ void main() {
when(() => platformHelper.isMobile).thenAnswer((_) => true); when(() => platformHelper.isMobile).thenAnswer((_) => true);
await tester.pumpApp( await tester.pumpApp(
HowToPlayDialog( HowToPlayDialog(
platformHelper: platformHelper,
onDismissCallback: () {}, onDismissCallback: () {},
), ),
platformHelper: platformHelper,
); );
expect(find.text(l10n.howToPlay), findsOneWidget); expect(find.text(l10n.howToPlay), findsOneWidget);
expect(find.text(l10n.tipsForFlips), findsOneWidget); expect(find.text(l10n.tipsForFlips), findsOneWidget);
@ -75,6 +71,7 @@ void main() {
); );
}, },
), ),
platformHelper: platformHelper,
); );
expect(find.byType(HowToPlayDialog), findsNothing); expect(find.byType(HowToPlayDialog), findsNothing);
await tester.tap(find.text('test')); await tester.tap(find.text('test'));
@ -100,6 +97,7 @@ void main() {
); );
}, },
), ),
platformHelper: platformHelper,
); );
expect(find.byType(HowToPlayDialog), findsNothing); expect(find.byType(HowToPlayDialog), findsNothing);
await tester.tap(find.text('test')); await tester.tap(find.text('test'));

Loading…
Cancel
Save