From a4251d28e18006689fc3fa3bbc0c95c3a4529eca Mon Sep 17 00:00:00 2001 From: MatteoPellegrino05 Date: Fri, 15 May 2026 16:38:06 +0200 Subject: [PATCH] Add: GameControllerTest coverage for totem choice and player reconnection --- .../gc14/Controller/GameControllerTest.java | 125 ++++++++++++++++-- 1 file changed, 116 insertions(+), 9 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Controller/GameControllerTest.java b/src/test/java/it/polimi/ingsw/gc14/Controller/GameControllerTest.java index ddb1425..321669b 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Controller/GameControllerTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Controller/GameControllerTest.java @@ -5,6 +5,8 @@ import it.polimi.ingsw.gc14.Model.Cards.TribeCard; import it.polimi.ingsw.gc14.Model.Game; import it.polimi.ingsw.gc14.Model.GamePackage.GameStages; import it.polimi.ingsw.gc14.Model.Player; +import it.polimi.ingsw.gc14.Model.Totems; + import org.junit.jupiter.api.Test; import java.util.LinkedList; @@ -15,6 +17,30 @@ import static org.junit.jupiter.api.Assertions.*; class GameControllerTest { + private void completeTotemChoice(Game game, GameController controller) { + assertEquals(GameStages.TOTEM_CHOICE, game.getCurrentState().getGameStage()); + + while (game.getCurrentState().getGameStage() == GameStages.TOTEM_CHOICE) { + Player current = game.getCurrentState().getCurrentPlayer(); + assertNotNull(current); + + List availableTotems = game.getAvailableTotems(); + assertFalse(availableTotems.isEmpty()); + + Totems selectedTotem = availableTotems.get(0); + + assertTrue(controller.TotemChoice( + current.getUserName(), + selectedTotem.name() + )); + + assertEquals(selectedTotem, current.totem); + } + + assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage()); + assertNotNull(game.getCurrentState().getCurrentPlayer()); + } + private Game createStartedGame() { Game game = new Game(3); GameController controller = new GameController(game); @@ -23,6 +49,8 @@ class GameControllerTest { assertTrue(controller.addPlayer("Marco")); assertTrue(controller.addPlayer("Luca")); + completeTotemChoice(game, controller); + return game; } @@ -113,12 +141,17 @@ class GameControllerTest { if (!game.getLowerListBuilding().isEmpty()) { current.addFood(100); - assertTrue(controller.drawLowerBuildingCard(username, 0)); - return; + + if (controller.drawLowerBuildingCard(username, 0)) { + return; + } } - assertTrue(controller.SkipNoDrawable(username)); - return; + if (game.getCurrentState().getNUpper() == 0 + || game.getUpperListTribeCards().stream().allMatch(TribeCard::IsEventCard)) { + assertTrue(controller.SkipNoDrawable(username)); + return; + } } if (game.getCurrentState().getNUpper() > 0) { @@ -131,12 +164,17 @@ class GameControllerTest { if (!game.getUpperListBuilding().isEmpty()) { current.addFood(100); - assertTrue(controller.drawUpperBuildingCard(username, 0)); - return; + + if (controller.drawUpperBuildingCard(username, 0)) { + return; + } } - assertTrue(controller.SkipNoDrawable(username)); - return; + if (game.getCurrentState().getNLower() == 0 + || game.getLowerListTribeCards().stream().allMatch(TribeCard::IsEventCard)) { + assertTrue(controller.SkipNoDrawable(username)); + return; + } } fail("Current player has no remaining draw actions."); @@ -173,10 +211,74 @@ class GameControllerTest { assertNotNull(game.getPlayerByUsername("Marco")); assertNotNull(game.getPlayerByUsername("Luca")); - assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage()); + assertEquals(GameStages.TOTEM_CHOICE, game.getCurrentState().getGameStage()); assertFalse(controller.addPlayer("Extra")); } + @Test + void totemChoiceShouldAssignTotemsAndStartSlotChoice() { + Game game = new Game(3); + GameController controller = new GameController(game); + + assertTrue(controller.addPlayer("Giorgio")); + assertTrue(controller.addPlayer("Marco")); + assertTrue(controller.addPlayer("Luca")); + + completeTotemChoice(game, controller); + + assertEquals(GameStages.SLOT_CHOICE, game.getCurrentState().getGameStage()); + + assertNotNull(game.getPlayerByUsername("Giorgio").totem); + assertNotNull(game.getPlayerByUsername("Marco").totem); + assertNotNull(game.getPlayerByUsername("Luca").totem); + } + + @Test + void totemChoiceShouldReturnFalseForWrongPlayer() { + Game game = new Game(3); + GameController controller = new GameController(game); + + assertTrue(controller.addPlayer("Giorgio")); + assertTrue(controller.addPlayer("Marco")); + assertTrue(controller.addPlayer("Luca")); + + Player current = game.getCurrentState().getCurrentPlayer(); + assertNotNull(current); + + String wrongUsername = + current.getUserName().equals("Giorgio") ? "Marco" : "Giorgio"; + + Totems selectedTotem = game.getAvailableTotems().get(0); + + assertFalse(controller.TotemChoice(wrongUsername, selectedTotem.name())); + } + + @Test + void disconnectedPlayerShouldDelegateToModel() { + Game game = createStartedGame(); + GameController controller = new GameController(game); + + Player current = game.getCurrentState().getCurrentPlayer(); + assertNotNull(current); + + assertTrue(controller.DisconnectedPlayer(current.getUserName())); + + assertTrue(game.disconnetedPlayers.containsKey(current)); + assertTrue(game.disconnetedPlayers.get(current)); + } + + @Test + void reconnectPlayerShouldDelegateToModel() { + Game game = createStartedGame(); + GameController controller = new GameController(game); + + Player current = game.getCurrentState().getCurrentPlayer(); + assertNotNull(current); + + assertTrue(controller.DisconnectedPlayer(current.getUserName())); + assertTrue(controller.ReconnectPlayer(current.getUserName())); + } + @Test void allMethodsShouldReturnFalseForUnknownUsername() { Game game = new Game(3); @@ -191,6 +293,9 @@ class GameControllerTest { assertFalse(controller.pickOptionalTribeCard("ghost", 0)); assertFalse(controller.pickOptionalBuildingCard("ghost", 0)); assertFalse(controller.noOptionalCard("ghost")); + assertFalse(controller.TotemChoice("ghost", Totems.values()[0].name())); + assertFalse(controller.DisconnectedPlayer("ghost")); + assertFalse(controller.ReconnectPlayer("ghost")); } @Test @@ -310,6 +415,8 @@ class GameControllerTest { assertFalse(controller.addPlayer("p2")); assertTrue(controller.addPlayer("p3")); + completeTotemChoice(game, controller); + Queue players = new LinkedList<>(); for (int i = 0; i < game.getNPlayers(); i++) {