Fix sensivity to tests classes order

This commit is contained in:
Claude Brisson
2023-05-24 06:44:16 +02:00
parent 978a4c23ba
commit a9697b9dce

View File

@@ -1,12 +1,15 @@
package org.jeudego.pairgoth.test package org.jeudego.pairgoth.test
import com.republicate.kson.Json import com.republicate.kson.Json
import org.jeudego.pairgoth.model.ID
import org.junit.jupiter.api.MethodOrderer.MethodName import org.junit.jupiter.api.MethodOrderer.MethodName
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.TestMethodOrder import org.junit.jupiter.api.TestMethodOrder
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
import kotlin.test.fail
@TestMethodOrder(MethodName::class) @TestMethodOrder(MethodName::class)
@@ -72,16 +75,24 @@ class BasicTests: TestBase() {
"club" to "75Op" "club" to "75Op"
) )
var aTournamentID: ID? = null
var aTeamTournamentID: ID? = null
var aPlayerID: ID? = null
var anotherPlayerID: ID? = null
var aTournamentGameID: ID? = null
@Test @Test
fun `001 create tournament`() { fun `001 create tournament`() {
val resp = TestAPI.post("/api/tour", aTournament) as Json.Object val resp = TestAPI.post("/api/tour", aTournament).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
aTournamentID = resp.getInt("id")
assertNotNull(aTournamentID)
} }
@Test @Test
fun `002 get tournament`() { fun `002 get tournament`() {
val resp = TestAPI.get("/api/tour/1") as Json.Object val resp = TestAPI.get("/api/tour/$aTournamentID").asObject()
assertEquals(1, resp.getInt("id"), "First tournament should have id #1") assertEquals(aTournamentID, resp.getInt("id"), "First tournament should have id #$aTournamentID")
// filter out "id", and also "komi", "rules" and "gobanSize" which were provided by default // filter out "id", and also "komi", "rules" and "gobanSize" which were provided by default
val cmp = Json.Object(*resp.entries.filter { it.key !in listOf("id", "komi", "rules", "gobanSize") }.map { Pair(it.key, it.value) }.toTypedArray()) val cmp = Json.Object(*resp.entries.filter { it.key !in listOf("id", "komi", "rules", "gobanSize") }.map { Pair(it.key, it.value) }.toTypedArray())
assertEquals(aTournament.toString(), cmp.toString(), "tournament differs") assertEquals(aTournament.toString(), cmp.toString(), "tournament differs")
@@ -89,11 +100,12 @@ class BasicTests: TestBase() {
@Test @Test
fun `003 register user`() { fun `003 register user`() {
val resp = TestAPI.post("/api/tour/1/part", aPlayer) as Json.Object val resp = TestAPI.post("/api/tour/$aTournamentID/part", aPlayer).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
val players = TestAPI.get("/api/tour/1/part") as Json.Array aPlayerID = resp.getInt("id")
val players = TestAPI.get("/api/tour/$aTournamentID/part").asArray()
val player = players[0] as Json.Object val player = players[0] as Json.Object
assertEquals(1, player.getInt("id"), "First player should have id #1") assertEquals(aPlayerID, player.getInt("id"), "First player should have id #$aPlayerID")
// filter out "id" // filter out "id"
val cmp = Json.Object(*player.entries.filter { it.key != "id" }.map { Pair(it.key, it.value) }.toTypedArray()) val cmp = Json.Object(*player.entries.filter { it.key != "id" }.map { Pair(it.key, it.value) }.toTypedArray())
assertEquals(aPlayer.toString(), cmp.toString(), "player differs") assertEquals(aPlayer.toString(), cmp.toString(), "player differs")
@@ -101,70 +113,72 @@ class BasicTests: TestBase() {
@Test @Test
fun `004 modify user`() { fun `004 modify user`() {
// remove player #1 from round #2 // remove player aPlayer from round #2
val resp = TestAPI.put("/api/tour/1/part/1", Json.Object("skip" to Json.Array(2))) as Json.Object val resp = TestAPI.put("/api/tour/$aTournamentID/part/$aPlayerID", Json.Object("skip" to Json.Array(2))).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
val player = TestAPI.get("/api/tour/1/part/1") as Json.Object val player = TestAPI.get("/api/tour/$aTournamentID/part/$aPlayerID").asObject()
assertEquals("[2]", player.getArray("skip").toString(), "First player should have id #1") assertEquals("[2]", player.getArray("skip").toString(), "First player should skip round #2")
} }
@Test @Test
fun `005 pair`() { fun `005 pair`() {
val resp = TestAPI.post("/api/tour/1/part", anotherPlayer) as Json.Object val resp = TestAPI.post("/api/tour/$aTournamentID/part", anotherPlayer).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
var games = TestAPI.post("/api/tour/1/pair/1", Json.Array("all")) anotherPlayerID = resp.getInt("id")
var games = TestAPI.post("/api/tour/$aTournamentID/pair/1", Json.Array("all")).asArray()
aTournamentGameID = (games[0] as Json.Object).getInt("id")
val possibleResults = setOf( val possibleResults = setOf(
"""[{"id":1,"w":1,"b":2,"h":0,"r":"?"}]""", """[{"id":$aTournamentGameID,"w":$aPlayerID,"b":$anotherPlayerID,"h":0,"r":"?"}]""",
"""[{"id":1,"w":2,"b":1,"h":0,"r":"?"}]""" """[{"id":$aTournamentGameID,"w":$anotherPlayerID,"b":$aPlayerID,"h":0,"r":"?"}]"""
) )
assertTrue(possibleResults.contains(games.toString()), "pairing differs") assertTrue(possibleResults.contains(games.toString()), "pairing differs")
games = TestAPI.get("/api/tour/1/res/1") as Json.Array games = TestAPI.get("/api/tour/$aTournamentID/res/1").asArray()
assertTrue(possibleResults.contains(games.toString()), "results differs") assertTrue(possibleResults.contains(games.toString()), "results differs")
val empty = TestAPI.get("/api/tour/1/pair/1") as Json.Array val empty = TestAPI.get("/api/tour/$aTournamentID/pair/1").asArray()
assertEquals("[]", empty.toString(), "no more pairables for round 1") assertEquals("[]", empty.toString(), "no more pairables for round 1")
} }
@Test @Test
fun `006 result`() { fun `006 result`() {
val resp = TestAPI.put("/api/tour/1/res/1", Json.parse("""{"id":1,"result":"b"}""")) as Json.Object val resp = TestAPI.put("/api/tour/$aTournamentID/res/1", Json.parse("""{"id":$aTournamentGameID,"result":"b"}""")).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
val games = TestAPI.get("/api/tour/1/res/1") val games = TestAPI.get("/api/tour/$aTournamentID/res/1")
val possibleResults = setOf( val possibleResults = setOf(
"""[{"id":1,"w":1,"b":2,"h":0,"r":"b"}]""", """[{"id":$aTournamentGameID,"w":$aPlayerID,"b":$anotherPlayerID,"h":0,"r":"b"}]""",
"""[{"id":1,"w":2,"b":1,"h":0,"r":"b"}]""" """[{"id":$aTournamentGameID,"w":$anotherPlayerID,"b":$aPlayerID,"h":0,"r":"b"}]"""
) )
assertTrue(possibleResults.contains(games.toString()), "results differ") assertTrue(possibleResults.contains(games.toString()), "results differ")
} }
@Test @Test
fun `007 team tournament, MacMahon`() { fun `007 team tournament, MacMahon`() {
var resp = TestAPI.post("/api/tour", aTeamTournament) as Json.Object var resp = TestAPI.post("/api/tour", aTeamTournament).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
assertEquals(2, resp.getInt("id"), "expecting id #2 for new tournament") aTeamTournamentID = resp.getInt("id")
resp = TestAPI.post("/api/tour/2/part", aPlayer) as Json.Object resp = TestAPI.post("/api/tour/$aTeamTournamentID/part", aPlayer).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
assertEquals(3, resp.getInt("id"), "expecting id #3 for new player") val aTeamPlayerID = resp.getInt("id") ?: fail("id cannot be null")
resp = TestAPI.post("/api/tour/2/part", anotherPlayer) as Json.Object resp = TestAPI.post("/api/tour/$aTeamTournamentID/part", anotherPlayer).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
assertEquals(4, resp.getInt("id"), "expecting id #{ for new player") val anotherTeamPlayerID = resp.getInt("id") ?: fail("id cannot be null")
assertTrue(resp.getBoolean("success") == true, "expecting success") var arr = TestAPI.get("/api/tour/$aTeamTournamentID/pair/1").asArray()
var arr = TestAPI.get("/api/tour/2/pair/1") as Json.Array
assertEquals("[]", arr.toString(), "expecting an empty array") assertEquals("[]", arr.toString(), "expecting an empty array")
resp = TestAPI.post("/api/tour/2/team", Json.parse("""{ "name":"The Buffallos", "players":[3, 4] }""") as Json.Object) as Json.Object resp = TestAPI.post("/api/tour/$aTeamTournamentID/team", Json.parse("""{ "name":"The Buffallos", "players":[$aTeamPlayerID, $anotherTeamPlayerID] }""")?.asObject() ?: fail("no null allowed here")).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
assertEquals(5, resp.getInt("id"), "expecting team id #5") val aTeamID = resp.getInt("id") ?: error("no null allowed here")
resp = TestAPI.get("/api/tour/2/team/5") as Json.Object resp = TestAPI.get("/api/tour/$aTeamTournamentID/team/$aTeamID").asObject()
assertEquals("""{"id":5,"name":"The Buffallos","players":[3,4]}""", resp.toString(), "expecting team description") assertEquals("""{"id":$aTeamID,"name":"The Buffallos","players":[$aTeamPlayerID,$anotherTeamPlayerID]}""", resp.toString(), "expecting team description")
arr = TestAPI.get("/api/tour/2/pair/1") as Json.Array arr = TestAPI.get("/api/tour/$aTeamTournamentID/pair/1").asArray()
assertEquals("[5]", arr.toString(), "expecting a singleton array") assertEquals("[$aTeamID]", arr.toString(), "expecting a singleton array")
// nothing stops us in reusing players in different teams, at least for now... // nothing stops us in reusing players in different teams, at least for now...
resp = TestAPI.post("/api/tour/2/team", Json.parse("""{ "name":"The Billies", "players":[3, 4] }""") as Json.Object) as Json.Object resp = TestAPI.post("/api/tour/$aTeamTournamentID/team", Json.parse("""{ "name":"The Billies", "players":[$aTeamPlayerID, $anotherTeamPlayerID] }""")?.asObject() ?: fail("no null here")).asObject()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
assertEquals(6, resp.getInt("id"), "expecting team id #6") val anotherTeamID = resp.getInt("id") ?: fail("no null here")
arr = TestAPI.get("/api/tour/2/pair/1") as Json.Array arr = TestAPI.get("/api/tour/$aTeamTournamentID/pair/1").asArray()
assertEquals("[5,6]", arr.toString(), "expecting two pairables") assertEquals("[$aTeamID,$anotherTeamID]", arr.toString(), "expecting two pairables")
arr = TestAPI.post("/api/tour/2/pair/1", Json.parse("""["all"]""")) as Json.Array arr = TestAPI.post("/api/tour/$aTeamTournamentID/pair/1", Json.parse("""["all"]""")).asArray()
assertTrue(resp.getBoolean("success") == true, "expecting success") assertTrue(resp.getBoolean("success") == true, "expecting success")
val expected = """"["id":1,"w":5,"b":6,"h":3,"r":"?"]""" // TODO check pairing
// val expected = """"["id":1,"w":5,"b":6,"h":3,"r":"?"]"""
} }
} }