Skip to content

Commit 26e3cbb

Browse files
committed
test(server): verify GameResult for incomplete stepped GameRoom
1 parent 1b17289 commit 26e3cbb

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

server/src/test/java/sc/server/network/LobbyGameTest.kt

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ import io.kotest.assertions.until.Interval
55
import io.kotest.assertions.until.fibonacci
66
import io.kotest.assertions.withClue
77
import io.kotest.core.spec.style.WordSpec
8-
import io.kotest.matchers.collections.shouldBeEmpty
9-
import io.kotest.matchers.collections.shouldHaveSize
10-
import io.kotest.matchers.nulls.shouldNotBeNull
11-
import io.kotest.matchers.shouldBe
12-
import io.kotest.matchers.string.shouldContain
8+
import io.kotest.matchers.*
9+
import io.kotest.matchers.collections.*
10+
import io.kotest.matchers.nulls.*
11+
import io.kotest.matchers.string.*
1312
import sc.api.plugins.Team
1413
import sc.protocol.ResponsePacket
1514
import sc.protocol.requests.JoinPreparedRoomRequest
@@ -55,7 +54,15 @@ class LobbyGameTest: WordSpec({
5554
lobby.games shouldHaveSize 1
5655
return prepared
5756
}
58-
57+
fun observeRoom(roomId: String): MessageListener<ObservableRoomMessage> {
58+
val roomListener = MessageListener<ObservableRoomMessage>()
59+
withClue("accept observation") {
60+
admin.observe(roomId, roomListener::addMessage)
61+
adminListener.waitForMessage(ObservationResponse::class)
62+
}
63+
return roomListener
64+
}
65+
5966
val playerClients = Array(2) { testLobby.connectClient() }
6067
val playerHandlers = Array(2) { TestGameHandler() }
6168
val players = Array(2) { playerClients[it].asPlayer(playerHandlers[it]) }
@@ -64,7 +71,15 @@ class LobbyGameTest: WordSpec({
6471
players[0].joinGame(TestPlugin.TEST_PLUGIN_UUID)
6572
"create a room for it" {
6673
await("Room opened") { lobby.games.size shouldBe 1 }
67-
lobby.games.single().clients shouldHaveSize 1
74+
val room = lobby.games.single()
75+
room.clients shouldHaveSize 1
76+
"return GameResult on step" {
77+
val roomListener = observeRoom(room.id)
78+
admin.control(room.id).step()
79+
val result = roomListener.waitForMessage(GameResult::class)
80+
result.winner shouldBe Team.ONE
81+
playerHandlers[0].gameResult?.winner shouldBe Team.ONE
82+
}
6883
playerClients[0].stop()
6984
await("Stops when client dies") { lobby.games shouldHaveSize 0 }
7085
// TODO do not terminate room when client leaves
@@ -163,12 +178,7 @@ class LobbyGameTest: WordSpec({
163178
room.slots[1].isEmpty shouldBe false
164179
}
165180

166-
val roomListener = MessageListener<ObservableRoomMessage>()
167-
withClue("accept observation") {
168-
admin.observe(prepared.roomId, roomListener::addMessage)
169-
adminListener.waitForMessage(ObservationResponse::class)
170-
}
171-
181+
val roomListener = observeRoom(prepared.roomId)
172182
players[0].joinGameWithReservation(prepared.reservations.single())
173183
"react to controller" {
174184
await("game start") {

0 commit comments

Comments
 (0)