From a9697b9dce648ffd6bfcadf224ddec0c531b71e2 Mon Sep 17 00:00:00 2001 From: Claude Brisson Date: Wed, 24 May 2023 06:44:16 +0200 Subject: [PATCH] Fix sensivity to tests classes order --- webapp/src/test/kotlin/BasicTests.kt | 94 ++++++++++++++++------------ 1 file changed, 54 insertions(+), 40 deletions(-) diff --git a/webapp/src/test/kotlin/BasicTests.kt b/webapp/src/test/kotlin/BasicTests.kt index e9c70cc..b408da5 100644 --- a/webapp/src/test/kotlin/BasicTests.kt +++ b/webapp/src/test/kotlin/BasicTests.kt @@ -1,12 +1,15 @@ package org.jeudego.pairgoth.test import com.republicate.kson.Json +import org.jeudego.pairgoth.model.ID import org.junit.jupiter.api.MethodOrderer.MethodName import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.TestMethodOrder import kotlin.test.assertEquals +import kotlin.test.assertNotNull import kotlin.test.assertTrue +import kotlin.test.fail @TestMethodOrder(MethodName::class) @@ -72,16 +75,24 @@ class BasicTests: TestBase() { "club" to "75Op" ) + var aTournamentID: ID? = null + var aTeamTournamentID: ID? = null + var aPlayerID: ID? = null + var anotherPlayerID: ID? = null + var aTournamentGameID: ID? = null + @Test 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") + aTournamentID = resp.getInt("id") + assertNotNull(aTournamentID) } @Test fun `002 get tournament`() { - val resp = TestAPI.get("/api/tour/1") as Json.Object - assertEquals(1, resp.getInt("id"), "First tournament should have id #1") + val resp = TestAPI.get("/api/tour/$aTournamentID").asObject() + 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 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") @@ -89,11 +100,12 @@ class BasicTests: TestBase() { @Test 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") - 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 - 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" val cmp = Json.Object(*player.entries.filter { it.key != "id" }.map { Pair(it.key, it.value) }.toTypedArray()) assertEquals(aPlayer.toString(), cmp.toString(), "player differs") @@ -101,70 +113,72 @@ class BasicTests: TestBase() { @Test fun `004 modify user`() { - // remove player #1 from round #2 - val resp = TestAPI.put("/api/tour/1/part/1", Json.Object("skip" to Json.Array(2))) as Json.Object + // remove player aPlayer from round #2 + val resp = TestAPI.put("/api/tour/$aTournamentID/part/$aPlayerID", Json.Object("skip" to Json.Array(2))).asObject() assertTrue(resp.getBoolean("success") == true, "expecting success") - val player = TestAPI.get("/api/tour/1/part/1") as Json.Object - assertEquals("[2]", player.getArray("skip").toString(), "First player should have id #1") + val player = TestAPI.get("/api/tour/$aTournamentID/part/$aPlayerID").asObject() + assertEquals("[2]", player.getArray("skip").toString(), "First player should skip round #2") } @Test 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") - 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( - """[{"id":1,"w":1,"b":2,"h":0,"r":"?"}]""", - """[{"id":1,"w":2,"b":1,"h":0,"r":"?"}]""" + """[{"id":$aTournamentGameID,"w":$aPlayerID,"b":$anotherPlayerID,"h":0,"r":"?"}]""", + """[{"id":$aTournamentGameID,"w":$anotherPlayerID,"b":$aPlayerID,"h":0,"r":"?"}]""" ) 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") - 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") } @Test 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") - val games = TestAPI.get("/api/tour/1/res/1") + val games = TestAPI.get("/api/tour/$aTournamentID/res/1") val possibleResults = setOf( - """[{"id":1,"w":1,"b":2,"h":0,"r":"b"}]""", - """[{"id":1,"w":2,"b":1,"h":0,"r":"b"}]""" + """[{"id":$aTournamentGameID,"w":$aPlayerID,"b":$anotherPlayerID,"h":0,"r":"b"}]""", + """[{"id":$aTournamentGameID,"w":$anotherPlayerID,"b":$aPlayerID,"h":0,"r":"b"}]""" ) assertTrue(possibleResults.contains(games.toString()), "results differ") } @Test 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") - assertEquals(2, resp.getInt("id"), "expecting id #2 for new tournament") - resp = TestAPI.post("/api/tour/2/part", aPlayer) as Json.Object + aTeamTournamentID = resp.getInt("id") + resp = TestAPI.post("/api/tour/$aTeamTournamentID/part", aPlayer).asObject() assertTrue(resp.getBoolean("success") == true, "expecting success") - assertEquals(3, resp.getInt("id"), "expecting id #3 for new player") - resp = TestAPI.post("/api/tour/2/part", anotherPlayer) as Json.Object + val aTeamPlayerID = resp.getInt("id") ?: fail("id cannot be null") + resp = TestAPI.post("/api/tour/$aTeamTournamentID/part", anotherPlayer).asObject() assertTrue(resp.getBoolean("success") == true, "expecting success") - assertEquals(4, resp.getInt("id"), "expecting id #{ for new player") - assertTrue(resp.getBoolean("success") == true, "expecting success") - var arr = TestAPI.get("/api/tour/2/pair/1") as Json.Array + val anotherTeamPlayerID = resp.getInt("id") ?: fail("id cannot be null") + var arr = TestAPI.get("/api/tour/$aTeamTournamentID/pair/1").asArray() 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") - assertEquals(5, resp.getInt("id"), "expecting team id #5") - resp = TestAPI.get("/api/tour/2/team/5") as Json.Object - assertEquals("""{"id":5,"name":"The Buffallos","players":[3,4]}""", resp.toString(), "expecting team description") - arr = TestAPI.get("/api/tour/2/pair/1") as Json.Array - assertEquals("[5]", arr.toString(), "expecting a singleton array") + val aTeamID = resp.getInt("id") ?: error("no null allowed here") + resp = TestAPI.get("/api/tour/$aTeamTournamentID/team/$aTeamID").asObject() + assertEquals("""{"id":$aTeamID,"name":"The Buffallos","players":[$aTeamPlayerID,$anotherTeamPlayerID]}""", resp.toString(), "expecting team description") + arr = TestAPI.get("/api/tour/$aTeamTournamentID/pair/1").asArray() + assertEquals("[$aTeamID]", arr.toString(), "expecting a singleton array") // 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") - assertEquals(6, resp.getInt("id"), "expecting team id #6") - arr = TestAPI.get("/api/tour/2/pair/1") as Json.Array - assertEquals("[5,6]", arr.toString(), "expecting two pairables") - arr = TestAPI.post("/api/tour/2/pair/1", Json.parse("""["all"]""")) as Json.Array + val anotherTeamID = resp.getInt("id") ?: fail("no null here") + arr = TestAPI.get("/api/tour/$aTeamTournamentID/pair/1").asArray() + assertEquals("[$aTeamID,$anotherTeamID]", arr.toString(), "expecting two pairables") + arr = TestAPI.post("/api/tour/$aTeamTournamentID/pair/1", Json.parse("""["all"]""")).asArray() 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":"?"]""" } }