diff --git a/packages/pinball_components/lib/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_contact_behavior.dart b/packages/pinball_components/lib/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_contact_behavior.dart index 09666492..c64dc107 100644 --- a/packages/pinball_components/lib/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_contact_behavior.dart +++ b/packages/pinball_components/lib/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_contact_behavior.dart @@ -5,7 +5,8 @@ import 'package:pinball_flame/pinball_flame.dart'; // TODO(alestiago): Evaluate if there is any useful documentation that could // be added to this class. // ignore: public_member_api_docs -class DashBumperBallContactBehavior extends ContactBehavior { +class DashNestBumperBallContactBehavior + extends ContactBehavior { @override void beginContact(Object other, Contact contact) { super.beginContact(other, contact); diff --git a/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart b/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart index a1caf04e..36081aef 100644 --- a/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart +++ b/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart @@ -33,7 +33,7 @@ class DashNestBumper extends BodyComponent with InitialPosition { position: spritePosition, current: bloc.state, ), - DashBumperBallContactBehavior(), + DashNestBumperBallContactBehavior(), ...?children, ], renderBody: false, diff --git a/packages/pinball_components/test/helpers/mocks.dart b/packages/pinball_components/test/helpers/mocks.dart index d4bd41fd..d69a6131 100644 --- a/packages/pinball_components/test/helpers/mocks.dart +++ b/packages/pinball_components/test/helpers/mocks.dart @@ -22,3 +22,5 @@ class MockAlienBumperCubit extends Mock implements AlienBumperCubit {} class MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {} class MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} + +class MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {} diff --git a/packages/pinball_components/test/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behavior_test.dart index caf577ed..d8475b3d 100644 --- a/packages/pinball_components/test/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behavior_test.dart @@ -5,7 +5,7 @@ import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_components/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behavior.dart'; +import 'package:pinball_components/src/components/alien_bumper/behaviors/behaviors.dart'; import '../../../../helpers/helpers.dart'; diff --git a/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart new file mode 100644 index 00000000..6fa9bddd --- /dev/null +++ b/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart @@ -0,0 +1,51 @@ +// ignore_for_file: cascade_invocations + +import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_test/flame_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/dash_nest_bumper/behaviors/behaviors.dart'; + +import '../../../../helpers/helpers.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + final flameTester = FlameTester(TestGame.new); + + group( + 'DashNestBumperBallContactBehavior', + () { + test('can be instantiated', () { + expect( + DashNestBumperBallContactBehavior(), + isA(), + ); + }); + + group( + 'beginContact', + () { + flameTester.test('emits onBallContacted when contacts with a ball', + (game) async { + final behavior = DashNestBumperBallContactBehavior(); + final bloc = MockDashNestBumperCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: DashNestBumperState.active, + ); + + final alienBumper = DashNestBumper.test(bloc: bloc); + await alienBumper.add(behavior); + await game.ensureAdd(alienBumper); + + behavior.beginContact(MockBall(), MockContact()); + + verify(alienBumper.bloc.onBallContacted).called(1); + }); + }, + ); + }, + ); +} diff --git a/packages/pinball_components/test/src/components/dash_nest_bumper/cubit/dash_nest_bumper_cubit_test.dart b/packages/pinball_components/test/src/components/dash_nest_bumper/cubit/dash_nest_bumper_cubit_test.dart new file mode 100644 index 00000000..7e26bbf3 --- /dev/null +++ b/packages/pinball_components/test/src/components/dash_nest_bumper/cubit/dash_nest_bumper_cubit_test.dart @@ -0,0 +1,24 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_components/pinball_components.dart'; + +void main() { + group( + 'DashNestBumperCubit', + () { + blocTest( + 'onBallContacted emits active', + build: DashNestBumperCubit.new, + act: (bloc) => bloc.onBallContacted(), + expect: () => [DashNestBumperState.active], + ); + + blocTest( + 'onReset emits inactive', + build: DashNestBumperCubit.new, + act: (bloc) => bloc.onReset(), + expect: () => [DashNestBumperState.inactive], + ); + }, + ); +} diff --git a/packages/pinball_components/test/src/components/dash_nest_bumper_test.dart b/packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart similarity index 61% rename from packages/pinball_components/test/src/components/dash_nest_bumper_test.dart rename to packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart index c2d72a70..c5accec9 100644 --- a/packages/pinball_components/test/src/components/dash_nest_bumper_test.dart +++ b/packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart @@ -4,8 +4,9 @@ import 'package:flame/components.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/dash_nest_bumper/behaviors/behaviors.dart'; -import '../../helpers/helpers.dart'; +import '../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -40,13 +41,26 @@ void main() { expect(game.contains(bumper), isTrue); }); - flameTester.test('adds new children', (game) async { - final component = Component(); - final dashNestBumper = DashNestBumper.a( - children: [component], - ); - await game.ensureAdd(dashNestBumper); - expect(dashNestBumper.children, contains(component)); + group('adds', () { + flameTester.test('adds new children', (game) async { + final component = Component(); + final dashNestBumper = DashNestBumper.a( + children: [component], + ); + await game.ensureAdd(dashNestBumper); + expect(dashNestBumper.children, contains(component)); + }); + + flameTester.test('an DashNestBumperBallContactBehavior', (game) async { + final dashNestBumper = DashNestBumper.a(); + await game.ensureAdd(dashNestBumper); + expect( + dashNestBumper.children + .whereType() + .single, + isNotNull, + ); + }); }); }); }