Select Git revision
PlayerIntegrationTest.kt

Clément CORNU authored
PlayerIntegrationTest.kt 1.95 KiB
package player
import BaseIntegrationTest
import betclic.test.player.dtos.PlayerCreationDTO
import betclic.test.player.dtos.PlayerUpdateDTO
import betclic.test.player.entities.Player
import betclic.test.player.repositories.PlayerRepository
import io.ktor.client.request.*
import io.ktor.http.*
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import org.koin.test.inject
import kotlin.test.assertEquals
private const val NAME_1 = "Clement"
private const val NAME_2 = "Maxime"
class PlayerIntegrationTest : BaseIntegrationTest() {
@Test
fun `When calling player creation, a player should be saved in DB`() = iTest {
val response = client.post("/players") {
val player = PlayerCreationDTO(pseudo = NAME_1)
val json = Json.encodeToString(player)
header(HttpHeaders.ContentType, ContentType.Application.Json)
setBody(json)
}
assertEquals(HttpStatusCode.Created, response.status)
val playerRepository by inject<PlayerRepository>()
val player = playerRepository.findPlayerByPseudo(NAME_1)
assertThat(player).extracting("pseudo", "pointsNumber")
.containsExactly(NAME_1, 0)
}
@Test
fun `When calling player update, a player should be updated in DB`() = iTest {
val playerRepository by inject<PlayerRepository>()
playerRepository.createNewPlayer(Player(pseudo = NAME_2, pointsNumber = 0))
val response = client.put("/players") {
header(HttpHeaders.ContentType, ContentType.Application.Json)
setBody(Json.encodeToString(PlayerUpdateDTO(pseudo = NAME_2, pointsNumber = 30)))
}
assertEquals(HttpStatusCode.OK, response.status)
val player = playerRepository.findPlayerByPseudo(NAME_2)
assertThat(player).extracting("pseudo", "pointsNumber")
.containsExactly(NAME_2, 30)
}
}