diff --git a/src/main/kotlin/player/services/PlayerServiceImpl.kt b/src/main/kotlin/player/services/PlayerServiceImpl.kt index 22f92a79e6374f8607d1379fac4ba07a36849927..57eb05aa5c4b5661f32b76bcade0c0780bc09c10 100644 --- a/src/main/kotlin/player/services/PlayerServiceImpl.kt +++ b/src/main/kotlin/player/services/PlayerServiceImpl.kt @@ -37,11 +37,17 @@ class PlayerServiceImpl(private val playerRepository: PlayerRepository) : Player override suspend fun getPlayersRanked(): List<PlayerInfoDTO> { val allPlayers = playerRepository.findAll() + var currentRank = 1 + var previousPoints = 0 return allPlayers.sortedByDescending { it.pointsNumber }.mapIndexed { index, player -> + if (previousPoints != player.pointsNumber) { + currentRank = index + 1 + } + previousPoints = player.pointsNumber PlayerInfoDTO( pseudo = player.pseudo, pointsNumber = player.pointsNumber, - ranking = index + 1 + ranking = currentRank, ) } diff --git a/src/test/kotlin/player/PlayerServiceTest.kt b/src/test/kotlin/player/PlayerServiceTest.kt index e4aaa1421feb7f93179853ef875c8538b64fc455..38de6ebb68381f15eb2f914beb2ac962e83cce2b 100644 --- a/src/test/kotlin/player/PlayerServiceTest.kt +++ b/src/test/kotlin/player/PlayerServiceTest.kt @@ -102,6 +102,16 @@ class PlayerServiceTest { assertThat(result.last().ranking).isEqualTo(2) } + @Test + fun `when getting all players with two players with the same points number, should return the same rank`() { + val player2WithSamePoints = player2.copy(pointsNumber = 30) + val player3WithSamePoints = Player(pseudo = "Charlie", pointsNumber = 30) + coEvery { playerRepository.findAll() } returns listOf(player1, player2WithSamePoints, player3WithSamePoints) + val result = runBlocking { playerService.getPlayersRanked() } + assertThat(result.first().ranking).isEqualTo(result[1].ranking) + assertThat(result.last().ranking).isNotEqualTo(2) + } + @Test fun `when deleting all players, should call the repository once`() { coEvery { playerRepository.deleteAllPlayers() } just runs