From 815b40a8e7bde830ca423111857a338910b23bd3 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Thu, 14 May 2026 13:48:12 +0200 Subject: [PATCH] Fixed: disconnection during lobby creation --- .../java/it/polimi/ingsw/gc14/Model/Game.java | 25 ++-- .../gc14/Controller/ClientControllerTest.java | 141 ------------------ 2 files changed, 15 insertions(+), 151 deletions(-) delete mode 100644 src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 1b59d3d..65c8cf1 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -96,20 +96,25 @@ public class Game implements Serializable { return false; } disconnetedPlayers.put(player,true); - if(currentState.getCurrentPlayer().equals(player)) - if(!currentState.getGameStage().equals(GameStages.TOTEM_CHOICE)) + if (currentState.equals(GameStages.WAITING)) { + playersList.remove(player); + return true; + } + if(currentState.getCurrentPlayer().equals(player)) { + if (!currentState.getGameStage().equals(GameStages.TOTEM_CHOICE)) { nextPlayerSetup(); - else - { - if(totemChoiceQueue.isEmpty()) - { - player.totem=getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size()-1)); - } - else { + return true; + } + else { + if (totemChoiceQueue.isEmpty()) { + player.totem = getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size() - 1)); + } else { totemChoiceQueue.add(player); } - currentState.PlayerUpdate(totemChoiceQueue.poll(),null); + currentState.PlayerUpdate(totemChoiceQueue.poll(), null); + return true; } + } return true; } diff --git a/src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java b/src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java deleted file mode 100644 index 3f071fd..0000000 --- a/src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java +++ /dev/null @@ -1,141 +0,0 @@ -package it.polimi.ingsw.gc14.Controller; - -import it.polimi.ingsw.gc14.Model.Game; -import it.polimi.ingsw.gc14.Model.Player; -import it.polimi.ingsw.gc14.Network.IClient; -import it.polimi.ingsw.gc14.View.IView; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.rmi.RemoteException; - -import static org.junit.jupiter.api.Assertions.*; - -class ClientControllerTest { - - private FakeView view; - private FakeClient client; - private ClientController controller; - - @BeforeEach - void setUp() { - view = new FakeView(); - client = new FakeClient(); - controller = new ClientController(view); - controller.setClient(client); - } - - @Test - void testConstructorInitialization() { - assertSame(view, controller.view); - assertNotNull(controller.localController); - } - - @Test - void testSetModelUpdatesLocalControllerAndView() { - Game game = createGame(); - controller.setModel(game); - - assertSame(game, controller.localController.getModel()); - assertSame(game, view.model); - } - - @Test - void testOnError() { - controller.onError("Errore di test"); - assertEquals("Errore di test", view.lastError); - } - - @Test - void testSetClientDelegatesAction() { - FakeClient newClient = new FakeClient(); - controller.setClient(newClient); - - Game game = createGame(); - controller.setModel(game); - - String current = game.getCurrentState().getCurrentPlayer().getUserName(); - controller.drawUpperTribeCard(current, 0); - - assertEquals("drawUpperTribeCard", newClient.lastMethodCalled); - assertEquals(current, newClient.lastUsername); - assertEquals(0, newClient.lastPos); - } - - @Test - void testDrawUpperTribeCardDelegatesCorrectly() { - Game game = createGame(); - controller.setModel(game); - - String current = game.getCurrentState().getCurrentPlayer().getUserName(); - controller.drawUpperTribeCard(current, 0); - - assertEquals("drawUpperTribeCard", client.lastMethodCalled); - assertEquals(current, client.lastUsername); - assertEquals(0, client.lastPos); - assertNull(view.lastError); - } - - @Test - void testDrawUpperTribeCardWrongPlayerShowsError() { - Game game = createGame(); - controller.setModel(game); - - String current = game.getCurrentState().getCurrentPlayer().getUserName(); - String wrong = current.equals("p1") ? "p2" : "p1"; - controller.drawUpperTribeCard(wrong, 0); - - assertEquals("It's not your turn!", view.lastError); - assertNull(client.lastMethodCalled); - } - - @Test - void testSlotChoiceDelegatesCorrectly() { - Game game = createGame(); - controller.setModel(game); - - String current = game.getCurrentState().getCurrentPlayer().getUserName(); - controller.slotChoice(current, 1); - - assertEquals("slotChoice", client.lastMethodCalled); - assertEquals(current, client.lastUsername); - assertEquals(1, client.lastPos); - assertNull(view.lastError); - } - - - private Game createGame() { - Game game = new Game(2); - game.addPlayer(new Player("p1")); - game.addPlayer(new Player("p2")); - return game; - } - - - private static class FakeView implements IView { - Game model; - String lastError; - - @Override public void setModel(Game game) { this.model = game; } - @Override public void render() {} - @Override public void showMessage(String message) {} - @Override public void showError(String message) { this.lastError = message; } - } - - private static class FakeClient implements IClient { - String lastMethodCalled; - String lastUsername; - int lastPos; - - @Override public boolean connect(String username, int preferredInt) { return true; } - @Override public void drawUpperTribeCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawUpperTribeCard"; lastUsername = u; lastPos = pos; } - @Override public void drawLowerTribeCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawLowerTribeCard"; lastUsername = u; lastPos = pos; } - @Override public void drawUpperBuildingCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawUpperBuildingCard"; lastUsername = u; lastPos = pos; } - @Override public void drawLowerBuildingCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawLowerBuildingCard"; lastUsername = u; lastPos = pos; } - @Override public void skipTurn(String u) throws RemoteException { lastMethodCalled = "skipTurn"; lastUsername = u; } - @Override public void pickOptionalTribeCard(String u, int pos) throws RemoteException { lastMethodCalled = "pickOptionalTribeCard"; lastUsername = u; lastPos = pos; } - @Override public void pickOptionalBuildingCard(String u, int pos) throws RemoteException { lastMethodCalled = "pickOptionalBuildingCard"; lastUsername = u; lastPos = pos; } - @Override public void noOptionalCard(String u) throws RemoteException { lastMethodCalled = "noOptionalCard"; lastUsername = u; } - @Override public void slotChoice(String u, int pos) throws RemoteException { lastMethodCalled = "slotChoice"; lastUsername = u; lastPos = pos; } - } -} \ No newline at end of file