From f8e5c038a7f4b74caaf08f35d613ecbc35675342 Mon Sep 17 00:00:00 2001 From: Jonathan Daniels Date: Fri, 22 Apr 2022 14:59:51 -0700 Subject: [PATCH] feat(leaderboard_repository): enable ability to check if a username is allowed --- .../lib/src/leaderboard_repository.dart | 11 +++++ .../test/src/leaderboard_repository_test.dart | 41 +++++++++++++++++++ 2 files changed, 52 insertions(+) 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, + ); + }); + }); }); }