diff --git a/packages/leaderboard_repository/lib/src/leaderboard_repository.dart b/packages/leaderboard_repository/lib/src/leaderboard_repository.dart index 30f6810f..7491112b 100644 --- a/packages/leaderboard_repository/lib/src/leaderboard_repository.dart +++ b/packages/leaderboard_repository/lib/src/leaderboard_repository.dart @@ -152,4 +152,15 @@ class LeaderboardRepository { throw FetchPlayerRankingException(error, stackTrace); } } + + /// Checks if the given [username] is allowed. The [username] is not allowed + /// if it is a bad word. + Future isUsernameAllowed({required String username}) async { + // TODO(jonathandaniels-vgv): load this list of bad words from an endpoint + final badWords = ['badword']; + final filteredUsername = username.trim().toLowerCase(); + final isUsernameABadWord = badWords.contains(filteredUsername); + final isUsernameAllowed = !isUsernameABadWord; + return isUsernameAllowed; + } } diff --git a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart index 1341d3f4..abc006fe 100644 --- a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart +++ b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart @@ -223,5 +223,46 @@ void main() { ); }); }); + + group('isUsernameAllowed', () { + late LeaderboardRepository leaderboardRepository; + + setUp(() async { + leaderboardRepository = LeaderboardRepository(firestore); + }); + + test('returns true if username is not a bad word', () async { + final isUsernameAllowedResponse = + await leaderboardRepository.isUsernameAllowed( + username: 'goodword', + ); + expect( + isUsernameAllowedResponse, + isTrue, + ); + }); + + test('returns false if username is a bad word', () async { + final isUsernameAllowedResponse = + await leaderboardRepository.isUsernameAllowed( + username: 'badword', + ); + expect( + isUsernameAllowedResponse, + isFalse, + ); + }); + + test('bad word detection should be case insensitive', () async { + final isUsernameAllowedResponse = + await leaderboardRepository.isUsernameAllowed( + username: ' bAdWoRd ', + ); + expect( + isUsernameAllowedResponse, + isFalse, + ); + }); + }); }); }