diff --git a/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart b/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart index 0a701257..7b0304ff 100644 --- a/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart +++ b/test/game/components/android_acres/behaviors/ramp_bonus_behavior_test.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:bloc_test/bloc_test.dart'; import 'package:flame/components.dart'; import 'package:flame_test/flame_test.dart'; -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/components/android_acres/behaviors/behaviors.dart'; @@ -14,6 +13,10 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockSpaceshipRampCubit extends Mock implements SpaceshipRampCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -29,16 +32,16 @@ void main() { Assets.images.android.ramp.arrow.active5.keyName, Assets.images.android.rail.main.keyName, Assets.images.android.rail.exit.keyName, - Assets.images.score.oneMillion.keyName, + Assets.images.score.fiveThousand.keyName, ]; group('RampBonusBehavior', () { - const bonusPoints = Points.oneMillion; + const shotPoints = Points.oneMillion; late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -53,145 +56,65 @@ void main() { ); flameBlocTester.testGameWidget( - "hit on door sensor doesn't add any score", + "when withoutBonus doesn't add any score or show any score points", setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); - final behavior = RampBonusBehavior( - points: bonusPoints, - scorePosition: Vector2.zero(), + final bloc = _MockSpaceshipRampCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: SpaceshipRampState.initial(), ); - final parent = SpaceshipRamp.test(); - final sensors = [ - RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ), - ]; - - await parent.addAll(sensors); - await game.ensureAdd(parent); - await parent.ensureAdd(behavior); - - for (final sensor in sensors) { - sensor.bloc.onDoor(ball); - } - await tester.pump(); - - final scores = game.descendants().whereType(); - await game.ready(); - - verifyNever(() => gameBloc.add(Scored(points: bonusPoints.value))); - expect(scores.length, 0); - }, - ); - - flameBlocTester.testGameWidget( - 'hit on inside sensor without previous hit on door sensor ' - "doesn't add any score", - setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); - - final behavior = RampBonusBehavior( - points: bonusPoints, + final behavior = RampShotBehavior( + points: shotPoints, scorePosition: Vector2.zero(), ); - final parent = SpaceshipRamp.test(); - final doorSensor = RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ); - final insideSensor = RampSensor.test( - type: RampSensorType.inside, - bloc: RampSensorCubit(), + final parent = SpaceshipRamp.test( + bloc: bloc, ); - await parent.addAll([doorSensor, insideSensor]); await game.ensureAdd(parent); await parent.ensureAdd(behavior); - insideSensor.bloc.onInside(ball); - await tester.pump(); final scores = game.descendants().whereType(); await game.ready(); - verifyNever(() => gameBloc.add(Scored(points: bonusPoints.value))); + verifyNever(() => gameBloc.add(Scored(points: shotPoints.value))); expect(scores.length, 0); }, ); flameBlocTester.testGameWidget( - 'hit on inside sensor after hit on door sensor ' - "less than 10 times doesn't add any score neither shows score points", + 'when withBonus add score and show score points', setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); - final behavior = RampBonusBehavior( - points: bonusPoints, - scorePosition: Vector2.zero(), - ); - final parent = SpaceshipRamp.test(); - final doorSensor = RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ); - final insideSensor = RampSensor.test( - type: RampSensorType.inside, - bloc: RampSensorCubit(), + final bloc = _MockSpaceshipRampCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: SpaceshipRampState.initial().copyWith( + status: SpaceshipRampStatus.withBonus, + ), ); - - await parent.addAll([doorSensor, insideSensor]); - await game.ensureAdd(parent); - await parent.ensureAdd(behavior); - - doorSensor.bloc.onDoor(ball); - insideSensor.bloc.onInside(ball); - - await tester.pump(); - - final scores = game.descendants().whereType(); - await game.ready(); - - verifyNever(() => gameBloc.add(Scored(points: bonusPoints.value))); - expect(scores.length, 0); - }, - ); - - flameBlocTester.testGameWidget( - 'hit on inside sensor after hit on door sensor ' - '10 times add score and show score point', - setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); - final behavior = RampBonusBehavior( - points: bonusPoints, + final behavior = RampShotBehavior( + points: shotPoints, scorePosition: Vector2.zero(), ); - final parent = SpaceshipRamp.test(); - final doorSensor = RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ); - final insideSensor = RampSensor.test( - type: RampSensorType.inside, - bloc: RampSensorCubit(), + final parent = SpaceshipRamp.test( + bloc: bloc, ); - await parent.addAll([doorSensor, insideSensor]); await game.ensureAdd(parent); await parent.ensureAdd(behavior); - for (var i = 0; i < 10; i++) { - doorSensor.bloc.onDoor(ball); - insideSensor.bloc.onInside(ball); - } - await tester.pump(); final scores = game.descendants().whereType(); await game.ready(); - verify(() => gameBloc.add(Scored(points: bonusPoints.value))).called(1); - expect(scores.length, 1); + verifyNever(() => gameBloc.add(MultiplierIncreased())); + verifyNever(() => gameBloc.add(Scored(points: shotPoints.value))); + expect(scores.length, 0); }, ); }); diff --git a/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart b/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart index 55336264..968782d6 100644 --- a/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart +++ b/test/game/components/android_acres/behaviors/ramp_shot_behavior_test.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'package:bloc_test/bloc_test.dart'; import 'package:flame/components.dart'; import 'package:flame_test/flame_test.dart'; -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/components/android_acres/behaviors/behaviors.dart'; @@ -14,6 +13,10 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockSpaceshipRampCubit extends Mock implements SpaceshipRampCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -38,7 +41,7 @@ void main() { late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -53,65 +56,26 @@ void main() { ); flameBlocTester.testGameWidget( - "hit on door sensor doesn't increase multiplier " + "when not shot doesn't increase multiplier " 'neither add any score or show any score points', setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); - final behavior = RampShotBehavior( - points: shotPoints, - scorePosition: Vector2.zero(), + final bloc = _MockSpaceshipRampCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: SpaceshipRampState.initial(), ); - final parent = SpaceshipRamp.test(); - final sensors = [ - RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ), - ]; - - await parent.addAll(sensors); - await game.ensureAdd(parent); - await parent.ensureAdd(behavior); - - for (final sensor in sensors) { - sensor.bloc.onDoor(ball); - } - await tester.pump(); - - final scores = game.descendants().whereType(); - await game.ready(); - - verifyNever(() => gameBloc.add(MultiplierIncreased())); - verifyNever(() => gameBloc.add(Scored(points: shotPoints.value))); - expect(scores.length, 0); - }, - ); - - flameBlocTester.testGameWidget( - 'hit on inside sensor without previous hit on door sensor ' - "doesn't increase multiplier neither add any score or shows score points", - setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); final behavior = RampShotBehavior( points: shotPoints, scorePosition: Vector2.zero(), ); - final parent = SpaceshipRamp.test(); - final doorSensor = RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ); - final insideSensor = RampSensor.test( - type: RampSensorType.inside, - bloc: RampSensorCubit(), + final parent = SpaceshipRamp.test( + bloc: bloc, ); - await parent.addAll([doorSensor, insideSensor]); await game.ensureAdd(parent); await parent.ensureAdd(behavior); - insideSensor.bloc.onInside(ball); - await tester.pump(); final scores = game.descendants().whereType(); @@ -124,71 +88,35 @@ void main() { ); flameBlocTester.testGameWidget( - 'hit on inside sensor after hit on door sensor ' - 'increase multiplier', + 'when shot increase multiplier add score and show score points', setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); - final behavior = RampShotBehavior( - points: shotPoints, - scorePosition: Vector2.zero(), - ); - final parent = SpaceshipRamp.test(); - final doorSensor = RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ); - final insideSensor = RampSensor.test( - type: RampSensorType.inside, - bloc: RampSensorCubit(), + final bloc = _MockSpaceshipRampCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: SpaceshipRampState.initial().copyWith( + shot: false, + ), ); - - await parent.addAll([doorSensor, insideSensor]); - await game.ensureAdd(parent); - await parent.ensureAdd(behavior); - - insideSensor.bloc.onDoor(ball); - insideSensor.bloc.onInside(ball); - - await tester.pump(); - await game.ready(); - - verify(() => gameBloc.add(MultiplierIncreased())).called(1); - }, - ); - - flameBlocTester.testGameWidget( - 'hit on inside sensor after hit on door sensor ' - 'add score and show score points', - setUp: (game, tester) async { - final ball = Ball(baseColor: Colors.red); final behavior = RampShotBehavior( points: shotPoints, scorePosition: Vector2.zero(), ); - final parent = SpaceshipRamp.test(); - final doorSensor = RampSensor.test( - type: RampSensorType.door, - bloc: RampSensorCubit(), - ); - final insideSensor = RampSensor.test( - type: RampSensorType.inside, - bloc: RampSensorCubit(), + final parent = SpaceshipRamp.test( + bloc: bloc, ); - await parent.addAll([doorSensor, insideSensor]); await game.ensureAdd(parent); await parent.ensureAdd(behavior); - doorSensor.bloc.onDoor(ball); - insideSensor.bloc.onInside(ball); - await tester.pump(); final scores = game.descendants().whereType(); await game.ready(); - verify(() => gameBloc.add(Scored(points: shotPoints.value))).called(1); - expect(scores.length, 1); + verifyNever(() => gameBloc.add(MultiplierIncreased())); + verifyNever(() => gameBloc.add(Scored(points: shotPoints.value))); + expect(scores.length, 0); }, ); });