From 86980a70353ea0d43b59f50352dc1cf5ae68a3f3 Mon Sep 17 00:00:00 2001 From: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> Date: Tue, 10 May 2022 10:31:44 -0500 Subject: [PATCH] fix: ball theming on mobile (#462) --- .../character_selection_behavior.dart | 16 +++++--- .../character_selection_behavior_test.dart | 40 ++++++++++++++++++- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/lib/game/behaviors/character_selection_behavior.dart b/lib/game/behaviors/character_selection_behavior.dart index 27003d75..e62438f6 100644 --- a/lib/game/behaviors/character_selection_behavior.dart +++ b/lib/game/behaviors/character_selection_behavior.dart @@ -2,6 +2,8 @@ import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; +import 'package:platform_helper/platform_helper.dart'; /// Updates the [ArcadeBackground] and launch [Ball] to reflect character /// selections. @@ -11,12 +13,14 @@ class CharacterSelectionBehavior extends Component HasGameRef { @override void onNewState(CharacterThemeState state) { - gameRef - .descendants() - .whereType() - .single - .bloc - .onCharacterSelected(state.characterTheme); + if (!readProvider().isMobile) { + gameRef + .descendants() + .whereType() + .single + .bloc + .onCharacterSelected(state.characterTheme); + } gameRef .descendants() .whereType() diff --git a/test/game/behaviors/character_selection_behavior_test.dart b/test/game/behaviors/character_selection_behavior_test.dart index acf140a2..7fe5439f 100644 --- a/test/game/behaviors/character_selection_behavior_test.dart +++ b/test/game/behaviors/character_selection_behavior_test.dart @@ -77,8 +77,45 @@ void main() { ); flameTester.test( - 'onNewState calls onCharacterSelected on the arcade background bloc', + 'onNewState does not call onCharacterSelected on the arcade background ' + 'bloc when platform is mobile', (game) async { + final platformHelper = _MockPlatformHelper(); + when(() => platformHelper.isMobile).thenAnswer((_) => true); + final arcadeBackgroundBloc = _MockArcadeBackgroundCubit(); + whenListen( + arcadeBackgroundBloc, + const Stream.empty(), + initialState: const ArcadeBackgroundState.initial(), + ); + final behavior = CharacterSelectionBehavior(); + await game.pump( + [ + behavior, + ZCanvasComponent(), + Plunger.test(), + Ball.test(), + ], + platformHelper: platformHelper, + ); + + const dinoThemeState = CharacterThemeState(theme.DinoTheme()); + behavior.onNewState(dinoThemeState); + await game.ready(); + + verifyNever( + () => arcadeBackgroundBloc + .onCharacterSelected(dinoThemeState.characterTheme), + ); + }, + ); + + flameTester.test( + 'onNewState calls onCharacterSelected on the arcade background ' + 'bloc when platform is not mobile', + (game) async { + final platformHelper = _MockPlatformHelper(); + when(() => platformHelper.isMobile).thenAnswer((_) => false); final arcadeBackgroundBloc = _MockArcadeBackgroundCubit(); whenListen( arcadeBackgroundBloc, @@ -96,6 +133,7 @@ void main() { Plunger.test(), Ball.test(), ], + platformHelper: platformHelper, ); const dinoThemeState = CharacterThemeState(theme.DinoTheme());