From 4887ebd79fea738512191cb6f05f3a7506356e81 Mon Sep 17 00:00:00 2001 From: arturplaczek Date: Tue, 26 Apr 2022 16:06:22 +0200 Subject: [PATCH] chore: rename ThemeCubit to SelectCharacterCubit --- lib/app/view/app.dart | 4 +-- lib/game/view/pinball_game_page.dart | 9 ++++--- .../view/widgets/play_button_overlay.dart | 2 +- lib/leaderboard/view/leaderboard_page.dart | 2 +- .../cubit/select_character_cubit.dart} | 8 +++--- .../cubit/select_character_state.dart | 16 +++++++++++ lib/select_character/select_character.dart | 2 ++ .../view/character_selection_page.dart | 13 +++++---- .../view/view.dart | 0 lib/theme/cubit/theme_state.dart | 16 ----------- lib/theme/theme.dart | 2 -- test/game/view/pinball_game_page_test.dart | 20 +++++++------- .../widgets/play_button_overlay_test.dart | 2 +- test/helpers/mocks.dart | 4 +-- test/helpers/pump_app.dart | 6 ++--- .../cubit/select_character_cubit_test.dart | 25 +++++++++++++++++ .../cubit/select_character_state_test.dart} | 8 +++--- .../view/character_selection_page_test.dart | 27 ++++++++++--------- test/theme/cubit/theme_cubit_test.dart | 22 --------------- 19 files changed, 98 insertions(+), 90 deletions(-) rename lib/{theme/cubit/theme_cubit.dart => select_character/cubit/select_character_cubit.dart} (55%) create mode 100644 lib/select_character/cubit/select_character_state.dart create mode 100644 lib/select_character/select_character.dart rename lib/{theme => select_character}/view/character_selection_page.dart (89%) rename lib/{theme => select_character}/view/view.dart (100%) delete mode 100644 lib/theme/cubit/theme_state.dart create mode 100644 test/select_character/cubit/select_character_cubit_test.dart rename test/{theme/cubit/theme_state_test.dart => select_character/cubit/select_character_state_test.dart} (54%) rename test/{theme => select_character}/view/character_selection_page_test.dart (78%) delete mode 100644 test/theme/cubit/theme_cubit_test.dart diff --git a/lib/app/view/app.dart b/lib/app/view/app.dart index 2780b608..dfcc6669 100644 --- a/lib/app/view/app.dart +++ b/lib/app/view/app.dart @@ -13,7 +13,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/l10n/l10n.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; class App extends StatelessWidget { @@ -36,7 +36,7 @@ class App extends StatelessWidget { RepositoryProvider.value(value: _pinballAudio), ], child: BlocProvider( - create: (context) => ThemeCubit(), + create: (context) => SelectCharacterCubit(), child: const MaterialApp( title: 'I/O Pinball', localizationsDelegates: [ diff --git a/lib/game/view/pinball_game_page.dart b/lib/game/view/pinball_game_page.dart index 38ae0144..64402d75 100644 --- a/lib/game/view/pinball_game_page.dart +++ b/lib/game/view/pinball_game_page.dart @@ -5,8 +5,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pinball/game/game.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball/theme/theme.dart'; import 'package:pinball_audio/pinball_audio.dart'; class PinballGamePage extends StatelessWidget { @@ -31,13 +31,14 @@ class PinballGamePage extends StatelessWidget { @override Widget build(BuildContext context) { - final theme = context.read().state.theme; + final selectedCharacter = + context.read().state.selectedCharacter; final audio = context.read(); final pinballAudio = context.read(); final game = isDebugMode - ? DebugPinballGame(theme: theme, audio: audio) - : PinballGame(theme: theme, audio: audio); + ? DebugPinballGame(theme: selectedCharacter, audio: audio) + : PinballGame(theme: selectedCharacter, audio: audio); final loadables = [ ...game.preLoadAssets(), diff --git a/lib/game/view/widgets/play_button_overlay.dart b/lib/game/view/widgets/play_button_overlay.dart index ce5dce4b..f90ebb98 100644 --- a/lib/game/view/widgets/play_button_overlay.dart +++ b/lib/game/view/widgets/play_button_overlay.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pinball/game/pinball_game.dart'; import 'package:pinball/l10n/l10n.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; /// {@template play_button_overlay} /// [Widget] that renders the button responsible to starting the game diff --git a/lib/leaderboard/view/leaderboard_page.dart b/lib/leaderboard/view/leaderboard_page.dart index 61e63d75..b9866111 100644 --- a/lib/leaderboard/view/leaderboard_page.dart +++ b/lib/leaderboard/view/leaderboard_page.dart @@ -5,7 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/leaderboard/leaderboard.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_theme/pinball_theme.dart'; class LeaderboardPage extends StatelessWidget { diff --git a/lib/theme/cubit/theme_cubit.dart b/lib/select_character/cubit/select_character_cubit.dart similarity index 55% rename from lib/theme/cubit/theme_cubit.dart rename to lib/select_character/cubit/select_character_cubit.dart index 94eba4a6..b81e4683 100644 --- a/lib/theme/cubit/theme_cubit.dart +++ b/lib/select_character/cubit/select_character_cubit.dart @@ -5,12 +5,12 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:pinball_theme/pinball_theme.dart'; -part 'theme_state.dart'; +part 'select_character_state.dart'; -class ThemeCubit extends Cubit { - ThemeCubit() : super(const ThemeState.initial()); +class SelectCharacterCubit extends Cubit { + SelectCharacterCubit() : super(const SelectCharacterState.initial()); void characterSelected(CharacterTheme characterTheme) { - emit(ThemeState(PinballTheme(characterTheme: characterTheme))); + emit(SelectCharacterState(PinballTheme(characterTheme: characterTheme))); } } diff --git a/lib/select_character/cubit/select_character_state.dart b/lib/select_character/cubit/select_character_state.dart new file mode 100644 index 00000000..689bf9c5 --- /dev/null +++ b/lib/select_character/cubit/select_character_state.dart @@ -0,0 +1,16 @@ +// ignore_for_file: public_member_api_docs +// TODO(allisonryan0002): Document this section when the API is stable. + +part of 'select_character_cubit.dart'; + +class SelectCharacterState extends Equatable { + const SelectCharacterState(this.selectedCharacter); + + const SelectCharacterState.initial() + : selectedCharacter = const PinballTheme(characterTheme: DashTheme()); + + final PinballTheme selectedCharacter; + + @override + List get props => [selectedCharacter]; +} diff --git a/lib/select_character/select_character.dart b/lib/select_character/select_character.dart new file mode 100644 index 00000000..38272646 --- /dev/null +++ b/lib/select_character/select_character.dart @@ -0,0 +1,2 @@ +export 'cubit/select_character_cubit.dart'; +export 'view/view.dart'; diff --git a/lib/theme/view/character_selection_page.dart b/lib/select_character/view/character_selection_page.dart similarity index 89% rename from lib/theme/view/character_selection_page.dart rename to lib/select_character/view/character_selection_page.dart index ef37270b..8169f899 100644 --- a/lib/theme/view/character_selection_page.dart +++ b/lib/select_character/view/character_selection_page.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pinball/l10n/l10n.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball/theme/theme.dart'; import 'package:pinball_theme/pinball_theme.dart'; class CharacterSelectionDialog extends StatelessWidget { @@ -19,7 +19,7 @@ class CharacterSelectionDialog extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( - create: (_) => ThemeCubit(), + create: (_) => SelectCharacterCubit(), child: const CharacterSelectionView(), ); } @@ -109,12 +109,15 @@ class CharacterImageButton extends StatelessWidget { @override Widget build(BuildContext context) { - final currentCharacterTheme = context.select( - (cubit) => cubit.state.theme.characterTheme, + final currentCharacterTheme = + context.select( + (cubit) => cubit.state.selectedCharacter.characterTheme, ); return GestureDetector( - onTap: () => context.read().characterSelected(characterTheme), + onTap: () => context + .read() + .characterSelected(characterTheme), child: DecoratedBox( decoration: BoxDecoration( color: (currentCharacterTheme == characterTheme) diff --git a/lib/theme/view/view.dart b/lib/select_character/view/view.dart similarity index 100% rename from lib/theme/view/view.dart rename to lib/select_character/view/view.dart diff --git a/lib/theme/cubit/theme_state.dart b/lib/theme/cubit/theme_state.dart deleted file mode 100644 index 078f5c84..00000000 --- a/lib/theme/cubit/theme_state.dart +++ /dev/null @@ -1,16 +0,0 @@ -// ignore_for_file: public_member_api_docs -// TODO(allisonryan0002): Document this section when the API is stable. - -part of 'theme_cubit.dart'; - -class ThemeState extends Equatable { - const ThemeState(this.theme); - - const ThemeState.initial() - : theme = const PinballTheme(characterTheme: DashTheme()); - - final PinballTheme theme; - - @override - List get props => [theme]; -} diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 5e4fefe9..c9e2f9e1 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -1,4 +1,2 @@ export 'app_colors.dart'; export 'app_text_style.dart'; -export 'cubit/theme_cubit.dart'; -export 'view/view.dart'; diff --git a/test/game/view/pinball_game_page_test.dart b/test/game/view/pinball_game_page_test.dart index bbed2963..0fe3f9b0 100644 --- a/test/game/view/pinball_game_page_test.dart +++ b/test/game/view/pinball_game_page_test.dart @@ -5,7 +5,7 @@ import 'package:flame/game.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball/game/game.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import '../../helpers/helpers.dart'; @@ -13,18 +13,18 @@ void main() { final game = PinballTestGame(); group('PinballGamePage', () { - late ThemeCubit themeCubit; + late SelectCharacterCubit selectCharacterCubit; late GameBloc gameBloc; setUp(() async { await Future.wait(game.preLoadAssets()); - themeCubit = MockThemeCubit(); + selectCharacterCubit = MockSelectCharacterCubit(); gameBloc = MockGameBloc(); whenListen( - themeCubit, - const Stream.empty(), - initialState: const ThemeState.initial(), + selectCharacterCubit, + const Stream.empty(), + initialState: const SelectCharacterState.initial(), ); whenListen( @@ -37,7 +37,7 @@ void main() { testWidgets('renders PinballGameView', (tester) async { await tester.pumpApp( PinballGamePage(), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); expect(find.byType(PinballGameView), findsOneWidget); @@ -62,7 +62,7 @@ void main() { game: game, ), assetsManagerCubit: assetsManagerCubit, - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); expect( @@ -95,7 +95,7 @@ void main() { game: game, ), assetsManagerCubit: assetsManagerCubit, - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, gameBloc: gameBloc, ); @@ -126,7 +126,7 @@ void main() { }, ), ), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); await tester.tap(find.text('Tap me')); diff --git a/test/game/view/widgets/play_button_overlay_test.dart b/test/game/view/widgets/play_button_overlay_test.dart index 210cc347..0345978d 100644 --- a/test/game/view/widgets/play_button_overlay_test.dart +++ b/test/game/view/widgets/play_button_overlay_test.dart @@ -1,7 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import '../../../helpers/helpers.dart'; diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index 9b0f67c9..5b784fe4 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -8,7 +8,7 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/leaderboard/leaderboard.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -35,7 +35,7 @@ class MockGameBloc extends Mock implements GameBloc {} class MockGameState extends Mock implements GameState {} -class MockThemeCubit extends Mock implements ThemeCubit {} +class MockSelectCharacterCubit extends Mock implements SelectCharacterCubit {} class MockLeaderboardBloc extends Mock implements LeaderboardBloc {} diff --git a/test/helpers/pump_app.dart b/test/helpers/pump_app.dart index 92e2c042..6b8af007 100644 --- a/test/helpers/pump_app.dart +++ b/test/helpers/pump_app.dart @@ -14,7 +14,7 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:mockingjay/mockingjay.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/l10n/l10n.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'helpers.dart'; @@ -52,7 +52,7 @@ extension PumpApp on WidgetTester { MockNavigator? navigator, GameBloc? gameBloc, AssetsManagerCubit? assetsManagerCubit, - ThemeCubit? themeCubit, + SelectCharacterCubit? selectCharacterCubit, LeaderboardRepository? leaderboardRepository, PinballAudio? pinballAudio, }) { @@ -70,7 +70,7 @@ extension PumpApp on WidgetTester { child: MultiBlocProvider( providers: [ BlocProvider.value( - value: themeCubit ?? MockThemeCubit(), + value: selectCharacterCubit ?? MockSelectCharacterCubit(), ), BlocProvider.value( value: gameBloc ?? MockGameBloc(), diff --git a/test/select_character/cubit/select_character_cubit_test.dart b/test/select_character/cubit/select_character_cubit_test.dart new file mode 100644 index 00000000..97f61cb4 --- /dev/null +++ b/test/select_character/cubit/select_character_cubit_test.dart @@ -0,0 +1,25 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/select_character/select_character.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +void main() { + group('SelectCharacterCubit', () { + test('initial state has Dash character theme', () { + final selectCharacterCubit = SelectCharacterCubit(); + expect( + selectCharacterCubit.state.selectedCharacter.characterTheme, + equals(const DashTheme()), + ); + }); + + blocTest( + 'charcterSelected emits selected character theme', + build: SelectCharacterCubit.new, + act: (bloc) => bloc.characterSelected(const SparkyTheme()), + expect: () => [ + const SelectCharacterState(PinballTheme(characterTheme: SparkyTheme())), + ], + ); + }); +} diff --git a/test/theme/cubit/theme_state_test.dart b/test/select_character/cubit/select_character_state_test.dart similarity index 54% rename from test/theme/cubit/theme_state_test.dart rename to test/select_character/cubit/select_character_state_test.dart index 49a2a387..c311bfe3 100644 --- a/test/theme/cubit/theme_state_test.dart +++ b/test/select_character/cubit/select_character_state_test.dart @@ -1,18 +1,18 @@ // ignore_for_file: prefer_const_constructors import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; void main() { group('ThemeState', () { test('can be instantiated', () { - expect(const ThemeState.initial(), isNotNull); + expect(const SelectCharacterState.initial(), isNotNull); }); test('supports value equality', () { expect( - ThemeState.initial(), - equals(const ThemeState.initial()), + SelectCharacterState.initial(), + equals(const SelectCharacterState.initial()), ); }); }); diff --git a/test/theme/view/character_selection_page_test.dart b/test/select_character/view/character_selection_page_test.dart similarity index 78% rename from test/theme/view/character_selection_page_test.dart rename to test/select_character/view/character_selection_page_test.dart index dcf54a13..54292be2 100644 --- a/test/theme/view/character_selection_page_test.dart +++ b/test/select_character/view/character_selection_page_test.dart @@ -4,21 +4,21 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockingjay/mockingjay.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball/theme/theme.dart'; import 'package:pinball_theme/pinball_theme.dart'; import '../../helpers/helpers.dart'; void main() { - late ThemeCubit themeCubit; + late SelectCharacterCubit selectCharacterCubit; setUp(() { - themeCubit = MockThemeCubit(); + selectCharacterCubit = MockSelectCharacterCubit(); whenListen( - themeCubit, - const Stream.empty(), - initialState: const ThemeState.initial(), + selectCharacterCubit, + const Stream.empty(), + initialState: const SelectCharacterState.initial(), ); }); @@ -26,7 +26,7 @@ void main() { testWidgets('renders CharacterSelectionView', (tester) async { await tester.pumpApp( CharacterSelectionDialog(), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); expect(find.byType(CharacterSelectionView), findsOneWidget); }); @@ -46,7 +46,7 @@ void main() { }, ), ), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); await tester.tap(find.text('Tap me')); @@ -61,7 +61,7 @@ void main() { const titleText = 'Choose your character!'; await tester.pumpApp( CharacterSelectionView(), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); expect(find.text(titleText), findsOneWidget); @@ -75,19 +75,20 @@ void main() { await tester.pumpApp( CharacterSelectionView(), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); await tester.tap(find.byKey(sparkyButtonKey)); - verify(() => themeCubit.characterSelected(SparkyTheme())).called(1); + verify(() => selectCharacterCubit.characterSelected(SparkyTheme())) + .called(1); }); testWidgets('displays how to play dialog when start is tapped', (tester) async { await tester.pumpApp( CharacterSelectionView(), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); await tester.ensureVisible(find.byType(TextButton)); await tester.tap(find.byType(TextButton)); @@ -100,7 +101,7 @@ void main() { testWidgets('CharacterImageButton renders correctly', (tester) async { await tester.pumpApp( CharacterImageButton(DashTheme()), - themeCubit: themeCubit, + selectCharacterCubit: selectCharacterCubit, ); expect(find.byType(Image), findsOneWidget); diff --git a/test/theme/cubit/theme_cubit_test.dart b/test/theme/cubit/theme_cubit_test.dart deleted file mode 100644 index 1f2d24e0..00000000 --- a/test/theme/cubit/theme_cubit_test.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/theme/theme.dart'; -import 'package:pinball_theme/pinball_theme.dart'; - -void main() { - group('ThemeCubit', () { - test('initial state has Dash character theme', () { - final themeCubit = ThemeCubit(); - expect(themeCubit.state.theme.characterTheme, equals(const DashTheme())); - }); - - blocTest( - 'charcterSelected emits selected character theme', - build: ThemeCubit.new, - act: (bloc) => bloc.characterSelected(const SparkyTheme()), - expect: () => [ - const ThemeState(PinballTheme(characterTheme: SparkyTheme())), - ], - ); - }); -}