From 4f5ef137029f0be9f23e03e445c6129b6f7852e1 Mon Sep 17 00:00:00 2001 From: Jorge Coca Date: Fri, 6 May 2022 17:31:57 -0500 Subject: [PATCH 1/2] chore(leaderboard_repository): remove allowed words check (#372) --- .../lib/src/leaderboard_repository.dart | 20 ---- .../lib/src/models/exceptions.dart | 9 -- .../test/src/leaderboard_repository_test.dart | 92 ------------------- 3 files changed, 121 deletions(-) diff --git a/packages/leaderboard_repository/lib/src/leaderboard_repository.dart b/packages/leaderboard_repository/lib/src/leaderboard_repository.dart index c522584c..838cfc4e 100644 --- a/packages/leaderboard_repository/lib/src/leaderboard_repository.dart +++ b/packages/leaderboard_repository/lib/src/leaderboard_repository.dart @@ -49,26 +49,6 @@ class LeaderboardRepository { } } - /// Determines if the given [initials] are allowed. - Future areInitialsAllowed({required String initials}) async { - // Initials can only be three uppercase A-Z letters - final initialsRegex = RegExp(r'^[A-Z]{3}$'); - if (!initialsRegex.hasMatch(initials)) { - return false; - } - try { - final document = await _firebaseFirestore - .collection('prohibitedInitials') - .doc('list') - .get(); - final prohibitedInitials = - document.get('prohibitedInitials') as List; - return !prohibitedInitials.contains(initials); - } on Exception catch (error, stackTrace) { - throw FetchProhibitedInitialsException(error, stackTrace); - } - } - Future> _fetchLeaderboardSortedByScore() async { try { final querySnapshot = await _firebaseFirestore diff --git a/packages/leaderboard_repository/lib/src/models/exceptions.dart b/packages/leaderboard_repository/lib/src/models/exceptions.dart index f709a27e..be679949 100644 --- a/packages/leaderboard_repository/lib/src/models/exceptions.dart +++ b/packages/leaderboard_repository/lib/src/models/exceptions.dart @@ -58,12 +58,3 @@ class AddLeaderboardEntryException extends LeaderboardException { const AddLeaderboardEntryException(Object error, StackTrace stackTrace) : super(error, stackTrace); } - -/// {@template fetch_prohibited_initials_exception} -/// Exception thrown when failure occurs while fetching prohibited initials. -/// {@endtemplate} -class FetchProhibitedInitialsException extends LeaderboardException { - /// {@macro fetch_prohibited_initials_exception} - const FetchProhibitedInitialsException(Object error, StackTrace stackTrace) - : super(error, stackTrace); -} diff --git a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart index d13a9940..1809ab38 100644 --- a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart +++ b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart @@ -21,9 +21,6 @@ class _MockQueryDocumentSnapshot extends Mock class _MockDocumentReference extends Mock implements DocumentReference> {} -class _MockDocumentSnapshot extends Mock - implements DocumentSnapshot> {} - void main() { group('LeaderboardRepository', () { late FirebaseFirestore firestore; @@ -368,94 +365,5 @@ void main() { verify(() => documentReference.delete()).called(2); }); }); - - group('areInitialsAllowed', () { - late LeaderboardRepository leaderboardRepository; - late CollectionReference> collectionReference; - late DocumentReference> documentReference; - late DocumentSnapshot> documentSnapshot; - - setUp(() async { - collectionReference = _MockCollectionReference(); - documentReference = _MockDocumentReference(); - documentSnapshot = _MockDocumentSnapshot(); - leaderboardRepository = LeaderboardRepository(firestore); - - when(() => firestore.collection('prohibitedInitials')) - .thenReturn(collectionReference); - when(() => collectionReference.doc('list')) - .thenReturn(documentReference); - when(() => documentReference.get()) - .thenAnswer((_) async => documentSnapshot); - when(() => documentSnapshot.get('prohibitedInitials')) - .thenReturn(['BAD']); - }); - - test('returns true if initials are three letters and allowed', () async { - final isUsernameAllowedResponse = - await leaderboardRepository.areInitialsAllowed( - initials: 'ABC', - ); - expect( - isUsernameAllowedResponse, - isTrue, - ); - }); - - test( - 'returns false if initials are shorter than 3 characters', - () async { - final areInitialsAllowedResponse = - await leaderboardRepository.areInitialsAllowed(initials: 'AB'); - expect(areInitialsAllowedResponse, isFalse); - }, - ); - - test( - 'returns false if initials are longer than 3 characters', - () async { - final areInitialsAllowedResponse = - await leaderboardRepository.areInitialsAllowed(initials: 'ABCD'); - expect(areInitialsAllowedResponse, isFalse); - }, - ); - - test( - 'returns false if initials contain a lowercase letter', - () async { - final areInitialsAllowedResponse = - await leaderboardRepository.areInitialsAllowed(initials: 'AbC'); - expect(areInitialsAllowedResponse, isFalse); - }, - ); - - test( - 'returns false if initials contain a special character', - () async { - final areInitialsAllowedResponse = - await leaderboardRepository.areInitialsAllowed(initials: 'A@C'); - expect(areInitialsAllowedResponse, isFalse); - }, - ); - - test('returns false if initials are forbidden', () async { - final areInitialsAllowedResponse = - await leaderboardRepository.areInitialsAllowed(initials: 'BAD'); - expect(areInitialsAllowedResponse, isFalse); - }); - - test( - 'throws FetchProhibitedInitialsException when Exception occurs ' - 'when trying to retrieve information from firestore', - () async { - when(() => firestore.collection('prohibitedInitials')) - .thenThrow(Exception('oops')); - expect( - () => leaderboardRepository.areInitialsAllowed(initials: 'ABC'), - throwsA(isA()), - ); - }, - ); - }); }); } From 480b08d3c25b52d06eb525d81abc388976cce26b Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Fri, 6 May 2022 17:48:00 -0500 Subject: [PATCH 2/2] feat(pinball_flame): add readBloc extension (#374) --- .../pinball_flame/lib/src/flame_provider.dart | 14 ++++++++ packages/pinball_flame/pubspec.yaml | 2 ++ .../test/src/flame_provider_test.dart | 33 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/packages/pinball_flame/lib/src/flame_provider.dart b/packages/pinball_flame/lib/src/flame_provider.dart index 35afb0a5..85a1004c 100644 --- a/packages/pinball_flame/lib/src/flame_provider.dart +++ b/packages/pinball_flame/lib/src/flame_provider.dart @@ -1,6 +1,8 @@ // ignore_for_file: public_member_api_docs +import 'package:bloc/bloc.dart'; import 'package:flame/components.dart'; +import 'package:flame_bloc/flame_bloc.dart'; class FlameProvider extends Component { FlameProvider.value( @@ -63,3 +65,15 @@ extension ReadFlameProvider on Component { return providers.first.provider; } } + +extension ReadFlameBlocProvider on Component { + B readBloc, S>() { + final providers = ancestors().whereType>(); + assert( + providers.isNotEmpty, + 'No FlameBlocProvider<$B, $S> available on the component tree', + ); + + return providers.first.bloc; + } +} diff --git a/packages/pinball_flame/pubspec.yaml b/packages/pinball_flame/pubspec.yaml index 125e7757..4639a080 100644 --- a/packages/pinball_flame/pubspec.yaml +++ b/packages/pinball_flame/pubspec.yaml @@ -7,7 +7,9 @@ environment: sdk: ">=2.16.0 <3.0.0" dependencies: + bloc: ^8.0.0 flame: ^1.1.1 + flame_bloc: ^1.4.0 flame_forge2d: git: url: https://github.com/flame-engine/flame diff --git a/packages/pinball_flame/test/src/flame_provider_test.dart b/packages/pinball_flame/test/src/flame_provider_test.dart index cfc10613..71d69e0c 100644 --- a/packages/pinball_flame/test/src/flame_provider_test.dart +++ b/packages/pinball_flame/test/src/flame_provider_test.dart @@ -1,11 +1,15 @@ // ignore_for_file: cascade_invocations +import 'package:bloc/bloc.dart'; import 'package:flame/components.dart'; import 'package:flame/game.dart'; +import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_flame/pinball_flame.dart'; +class _FakeCubit extends Fake implements Cubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(FlameGame.new); @@ -100,4 +104,33 @@ void main() { ); }, ); + + group( + 'ReadFlameBlocProvider', + () { + flameTester.test('loads provider', (game) async { + final component = Component(); + final bloc = _FakeCubit(); + final provider = FlameBlocProvider<_FakeCubit, Object>.value( + value: bloc, + children: [component], + ); + await game.ensureAdd(provider); + expect(component.readBloc<_FakeCubit, Object>(), equals(bloc)); + }); + + flameTester.test( + 'throws assertionError when no provider is found', + (game) async { + final component = Component(); + await game.ensureAdd(component); + + expect( + () => component.readBloc<_FakeCubit, Object>(), + throwsAssertionError, + ); + }, + ); + }, + ); }