From 729e7f6adc5c224e42cfc3dfaec2c7f3c7630516 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Wed, 5 Mar 2025 17:49:53 +0100 Subject: [PATCH] PlayerHand test --- .../kotlin/eventDemo/app/entity/PlayerHand.kt | 13 +++++- .../eventDemo/app/entity/PlayerHandKtTest.kt | 42 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/test/kotlin/eventDemo/app/entity/PlayerHandKtTest.kt diff --git a/src/main/kotlin/eventDemo/app/entity/PlayerHand.kt b/src/main/kotlin/eventDemo/app/entity/PlayerHand.kt index 1b89bca..6c15bde 100644 --- a/src/main/kotlin/eventDemo/app/entity/PlayerHand.kt +++ b/src/main/kotlin/eventDemo/app/entity/PlayerHand.kt @@ -2,7 +2,7 @@ package eventDemo.app.entity typealias PlayerHands = Map> -fun PlayerHands.addCard( +fun PlayerHands.removeCard( player: Player, card: Card, ) = mapValues { (p, cards) -> @@ -12,3 +12,14 @@ fun PlayerHands.addCard( cards } } + +fun PlayerHands.addCards( + player: Player, + newCards: List, +) = mapValues { (p, cards) -> + if (p == player) { + cards + newCards + } else { + cards + } +} diff --git a/src/test/kotlin/eventDemo/app/entity/PlayerHandKtTest.kt b/src/test/kotlin/eventDemo/app/entity/PlayerHandKtTest.kt new file mode 100644 index 0000000..9dbca47 --- /dev/null +++ b/src/test/kotlin/eventDemo/app/entity/PlayerHandKtTest.kt @@ -0,0 +1,42 @@ +package eventDemo.app.entity + +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.ints.shouldBeExactly +import kotlin.test.assertNotNull + +class PlayerHandKtTest : + FunSpec({ + test("addCards") { + // Given + val playerNumbers = 4 + val players = (1..playerNumbers).map { Player(name = "name $it") }.toSet() + val firstPlayer = players.first() + val playersHands: PlayerHands = players.associateWith { emptyList() } + val card = Card.NumericCard(0, Card.Color.Red) + + // When + val newHands: PlayerHands = playersHands.addCards(firstPlayer, listOf(card)) + + assertNotNull(newHands[firstPlayer]).size shouldBeExactly 1 + assertNotNull(newHands[players.last()]).size shouldBeExactly 0 + } + + test("removeCard") { + // Given + val playerNumbers = 4 + val players = (1..playerNumbers).map { Player(name = "name $it") }.toSet() + val firstPlayer = players.first() + val card1 = Card.NumericCard(1, Card.Color.Red) + val card2 = Card.NumericCard(2, Card.Color.Red) + val playersHands: PlayerHands = + players + .associateWith> { emptyList() } + .addCards(firstPlayer, listOf(card1, card2)) + + // When + val newHands: PlayerHands = playersHands.removeCard(firstPlayer, card1) + + assertNotNull(newHands[firstPlayer]).size shouldBeExactly 1 + assertNotNull(newHands[players.last()]).size shouldBeExactly 0 + } + })