Skip to content
Snippets Groups Projects
Commit 8fea5840 authored by Clément CORNU's avatar Clément CORNU
Browse files

feat: handle same points number edge case

parent 1e7638f6
Branches
No related tags found
No related merge requests found
......@@ -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,
)
}
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment