diff --git a/test/game/components/backbox/backbox_test.dart b/test/game/components/backbox/backbox_test.dart index 4d1fb826..2a351979 100644 --- a/test/game/components/backbox/backbox_test.dart +++ b/test/game/components/backbox/backbox_test.dart @@ -72,6 +72,8 @@ class _MockBackboxBloc extends Mock implements BackboxBloc {} class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { } +class _MockTapDownInfo extends Mock implements TapDownInfo {} + class _MockAppLocalizations extends Mock implements AppLocalizations { @override String get score => ''; @@ -236,6 +238,38 @@ void main() { }, ); + flameTester.test( + 'calls ScoreShareRequested when share on InfoDisplay', + (game) async { + final state = InitialsSuccessState( + score: 100, + initials: 'AAA', + character: theme.AndroidTheme(), + ); + whenListen( + bloc, + Stream.value(state), + initialState: state, + ); + final backbox = Backbox.test(bloc: bloc); + await game.pump(backbox); + + final shareLink = + game.descendants().whereType().first; + shareLink.onTapDown(_MockTapDownInfo()); + + verify( + () => bloc.add( + ScoreShareRequested( + score: state.score, + initials: state.initials, + character: state.character, + ), + ), + ).called(1); + }, + ); + flameTester.test( 'adds InitialsSubmissionFailureDisplay on InitialsFailureState', (game) async { diff --git a/test/game/components/backbox/displays/info_display_test.dart b/test/game/components/backbox/displays/info_display_test.dart index 5ae82b8e..2fcf3639 100644 --- a/test/game/components/backbox/displays/info_display_test.dart +++ b/test/game/components/backbox/displays/info_display_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:flame/game.dart'; +import 'package:flame/input.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; @@ -59,6 +60,8 @@ class _MockAppLocalizations extends Mock implements AppLocalizations { String get firebaseOrOpenSource => ''; } +class _MockTapDownInfo extends Mock implements TapDownInfo {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -73,5 +76,45 @@ void main() { expect(game.descendants(), contains(component)); }, ); + + flameTester.testGameWidget( + 'calls onShare when tap on Share link', + setUp: (game, tester) async { + var tapped = false; + + final tapDownInfo = _MockTapDownInfo(); + final component = InfoDisplay( + onShare: () => tapped = true, + ); + await game.pump(component); + + final shareLink = + component.descendants().whereType().first; + + shareLink.onTapDown(tapDownInfo); + + expect(tapped, isTrue); + }, + ); + + flameTester.testGameWidget( + 'calls onNavigate when tap on Goto IO link', + setUp: (game, tester) async { + var tapped = false; + + final tapDownInfo = _MockTapDownInfo(); + final component = InfoDisplay( + onNavigate: () => tapped = true, + ); + await game.pump(component); + + final gotoLink = + component.descendants().whereType().first; + + gotoLink.onTapDown(tapDownInfo); + + expect(tapped, isTrue); + }, + ); }); } diff --git a/test/game/components/game_bloc_status_listener_test.dart b/test/game/components/game_bloc_status_listener_test.dart index 7118aa8d..6b51a52d 100644 --- a/test/game/components/game_bloc_status_listener_test.dart +++ b/test/game/components/game_bloc_status_listener_test.dart @@ -140,6 +140,42 @@ void main() { verify(() => player.play(PinballAudio.gameOverVoiceOver)).called(1); }, ); + + flameTester.test( + 'removes Play button on start', + (game) async { + final player = _MockPinballPlayer(); + final component = GameBlocStatusListener(); + + await game.pump([component], pinballPlayer: player); + + component.onNewState( + const GameState.initial().copyWith(status: GameStatus.playing), + ); + await game.ready(); + + expect(game.overlays.isActive(PinballGame.playButtonOverlay), false); + }, + ); + + flameTester.test( + 'removes Replay button on replay', + (game) async { + final player = _MockPinballPlayer(); + final component = GameBlocStatusListener(); + + await game.pump([component], pinballPlayer: player); + + component.onNewState( + const GameState.initial().copyWith(status: GameStatus.replaying), + ); + + expect( + game.overlays.isActive(PinballGame.replayButtonOverlay), + false, + ); + }, + ); }); }); }