Fix: full game flow test and add: edge case coverage

This commit is contained in:
MatteoPellegrino05
2026-05-06 15:51:01 +02:00
parent 3f0073cdda
commit 318b82de4f
@@ -699,6 +699,8 @@ class GameTest {
assertTrue(game.addPlayer(new Player("p" + nPlayers + "_" + i))); assertTrue(game.addPlayer(new Player("p" + nPlayers + "_" + i)));
} }
assertEquals(nPlayers, game.getCurrentPlayerNumber());
assertEquals(nPlayers, game.getPlayers().size());
assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage()); assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage());
assertEquals(1, game.getCurrentState().getRound()); assertEquals(1, game.getCurrentState().getRound());
assertNotNull(game.getCurrentState().getCurrentPlayer()); assertNotNull(game.getCurrentState().getCurrentPlayer());
@@ -706,6 +708,7 @@ class GameTest {
for (int expectedRound = 1; expectedRound < 10; expectedRound++) { for (int expectedRound = 1; expectedRound < 10; expectedRound++) {
assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage()); assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage());
assertEquals(expectedRound, game.getCurrentState().getRound()); assertEquals(expectedRound, game.getCurrentState().getRound());
assertEquals(nPlayers, game.getCurrentPlayerNumber());
playOneFullRound(game); playOneFullRound(game);
@@ -721,6 +724,7 @@ class GameTest {
"The round should increase after completing round " + expectedRound + "." "The round should increase after completing round " + expectedRound + "."
); );
assertEquals(nPlayers, game.getCurrentPlayerNumber());
assertNotNull(game.getCurrentState().getCurrentPlayer()); assertNotNull(game.getCurrentState().getCurrentPlayer());
} }
@@ -735,11 +739,8 @@ class GameTest {
"The game should end after completing round 10 with " + nPlayers + " players." "The game should end after completing round 10 with " + nPlayers + " players."
); );
assertEquals( assertEquals(10, game.getCurrentState().getRound());
10, assertEquals(nPlayers, game.getPlayers().size());
game.getCurrentState().getRound(),
"The game should end at round 10 with " + nPlayers + " players."
);
} }
} }
@@ -1095,4 +1096,105 @@ class GameTest {
); );
} }
@Test
void skipDrawingShouldRejectWrongPlayer() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "skip_wrong_");
completeSlotChoice(game);
Player current = game.getCurrentState().getCurrentPlayer();
Player wrongPlayer = players.stream()
.filter(p -> !p.equals(current))
.findFirst()
.orElseThrow();
assertFalse(game.SkipLowerDrawing(wrongPlayer));
assertFalse(game.SkipUpperDrawing(wrongPlayer));
}
@Test
void skipDrawingShouldReturnFalseWhenDrawableCardsExist() {
Game game = new Game(3);
addPlayers(game, 3, "skip_drawable_");
completeSlotChoice(game);
Player current = game.getCurrentState().getCurrentPlayer();
assertNotNull(current);
boolean checkedAtLeastOneSkip = false;
if (game.getCurrentState().getNLower() > 0
&& firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()) != -1) {
assertFalse(game.SkipLowerDrawing(current));
checkedAtLeastOneSkip = true;
}
if (game.getCurrentState().getNUpper() > 0
&& firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()) != -1) {
assertFalse(game.SkipUpperDrawing(current));
checkedAtLeastOneSkip = true;
}
assertTrue(
checkedAtLeastOneSkip,
"The test should check at least one skip rejection when drawable cards exist."
);
}
@Test
void pickOptionalTribeCardShouldRejectEventCard() {
Game game = new Game(3);
List<Player> players = addPlayers(game, 3, "optional_event_");
giveOptionalEffectToAllPlayers(players.get(0), players.get(1), players.get(2));
completeSlotChoice(game);
resolveActionsUntilOptionalCardEffect(game);
Player current = game.getCurrentState().getCurrentPlayer();
assertNotNull(current);
int eventIndex = firstEventIndexOrMinusOne(game.getUpperListTribeCards());
assertNotEquals(
-1,
eventIndex,
"There should be at least one event card in the upper tribe list to test rejection."
);
assertFalse(game.PickOptionalTribeCardByIndex(current, eventIndex));
}
@Test
void cardListsShouldReturnCopiesOfLists() {
Game game = new Game(3);
List<TribeCard> upper = game.getUpperListTribeCards();
int originalSize = upper.size();
upper.clear();
assertEquals(originalSize, game.getUpperListTribeCards().size());
}
@Test
void getPlayersShouldReturnAddedPlayers() {
Game game = new Game(3);
Player p1 = new Player("gp1");
Player p2 = new Player("gp2");
assertTrue(game.addPlayer(p1));
assertTrue(game.addPlayer(p2));
assertEquals(2, game.getPlayers().size());
assertTrue(game.getPlayers().contains(p1));
assertTrue(game.getPlayers().contains(p2));
}
} }