create notifications for reply the players implement notifications on GameEventPlayerNotificationListener add priority to the eventbus.subscribe() improve JWT creation update libs koin + ktor remove output of GameCommandStream improve logs create a function disableShuffleDeck to disable the shuffle of the deck (for tests)
106 lines
4.2 KiB
Kotlin
106 lines
4.2 KiB
Kotlin
package eventDemo.app.entity
|
|
|
|
import eventDemo.allCardCount
|
|
import eventDemo.allCards
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.matchers.collections.shouldBeUnique
|
|
import io.kotest.matchers.ints.shouldBeExactly
|
|
import kotlin.test.assertNotNull
|
|
|
|
class DeckTest :
|
|
FunSpec({
|
|
val totalCardsNumber = 104
|
|
test("newWithoutPlayers") {
|
|
// When
|
|
val deck = Deck.newWithoutPlayers()
|
|
|
|
// Then
|
|
deck.stack.size shouldBeExactly totalCardsNumber
|
|
deck.discard.size shouldBeExactly 0
|
|
deck.playersHands.size shouldBeExactly 0
|
|
|
|
deck.allCardCount() shouldBeExactly totalCardsNumber
|
|
deck.allCards().shouldBeUnique()
|
|
deck.allCards().map { it.id }.shouldBeUnique()
|
|
}
|
|
|
|
test("initHands") {
|
|
// Given
|
|
val playerNumbers = 4
|
|
val players = (1..playerNumbers).map { Player(name = "name $it") }.toSet()
|
|
val deck = Deck.newWithoutPlayers()
|
|
|
|
// When
|
|
val initDeck = deck.initHands(players)
|
|
|
|
// Then
|
|
initDeck.stack.size shouldBeExactly totalCardsNumber - (playerNumbers * 7)
|
|
initDeck.discard.size shouldBeExactly 0
|
|
initDeck.playersHands.size shouldBeExactly playerNumbers
|
|
initDeck.playersHands.forEach { (_, cards) -> cards.size shouldBeExactly 7 }
|
|
initDeck.allCardCount() shouldBeExactly totalCardsNumber
|
|
}
|
|
|
|
test("takeOneCardFromStackTo") {
|
|
// Given
|
|
val playerNumbers = 4
|
|
val players = (1..playerNumbers).map { Player(name = "name $it") }.toSet()
|
|
val deck = Deck.newWithoutPlayers().initHands(players)
|
|
val firstPlayer = players.first()
|
|
|
|
// When
|
|
val modifiedDeck = deck.takeOneCardFromStackTo(firstPlayer)
|
|
|
|
// Then
|
|
modifiedDeck.discard.size shouldBeExactly 0
|
|
modifiedDeck.stack.size shouldBeExactly totalCardsNumber - (playerNumbers * 7) - 1
|
|
modifiedDeck.playersHands.size shouldBeExactly playerNumbers
|
|
assertNotNull(modifiedDeck.playersHands.getHand(firstPlayer)).size shouldBeExactly 7 + 1
|
|
modifiedDeck.playersHands
|
|
.filterKeys { it != firstPlayer.id }
|
|
.forEach { (_, cards) -> cards.size shouldBeExactly 7 }
|
|
modifiedDeck.allCardCount() shouldBeExactly totalCardsNumber
|
|
}
|
|
|
|
test("putOneCardFromHand") {
|
|
// Given
|
|
val playerNumbers = 4
|
|
val players = (1..playerNumbers).map { Player(name = "name $it") }.toSet()
|
|
val deck = Deck.newWithoutPlayers().initHands(players)
|
|
val firstPlayer = players.first()
|
|
|
|
// When
|
|
val card = deck.playersHands.getHand(firstPlayer)!!.first()
|
|
val modifiedDeck = deck.putOneCardFromHand(firstPlayer, card)
|
|
|
|
// Then
|
|
modifiedDeck.discard.size shouldBeExactly 1
|
|
modifiedDeck.stack.size shouldBeExactly totalCardsNumber - (playerNumbers * 7)
|
|
modifiedDeck.playersHands.size shouldBeExactly playerNumbers
|
|
assertNotNull(modifiedDeck.playersHands.getHand(firstPlayer)).size shouldBeExactly 6
|
|
modifiedDeck.playersHands
|
|
.filterKeys { it != firstPlayer.id }
|
|
.forEach { (_, cards) -> cards.size shouldBeExactly 7 }
|
|
modifiedDeck.allCardCount() shouldBeExactly totalCardsNumber
|
|
}
|
|
|
|
test("placeFirstCardOnDiscard") {
|
|
// Given
|
|
val playerNumbers = 4
|
|
val players = (1..playerNumbers).map { Player(name = "name $it") }.toSet()
|
|
val deck = Deck.newWithoutPlayers().initHands(players)
|
|
val firstPlayer = players.first()
|
|
|
|
// When
|
|
val modifiedDeck = deck.placeFirstCardOnDiscard()
|
|
|
|
// Then
|
|
modifiedDeck.discard.size shouldBeExactly 1
|
|
modifiedDeck.stack.size shouldBeExactly totalCardsNumber - (playerNumbers * 7) - 1
|
|
modifiedDeck.playersHands.size shouldBeExactly playerNumbers
|
|
modifiedDeck.playersHands
|
|
.forEach { (_, cards) -> cards.size shouldBeExactly 7 }
|
|
modifiedDeck.allCardCount() shouldBeExactly totalCardsNumber
|
|
}
|
|
})
|