From 065a62630730dbaa49e3b2d2cbf7658f33b0c94c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Brennf=C3=B6rder?= Date: Fri, 13 Dec 2024 00:44:37 +0100 Subject: [PATCH] added Tests for LobbyStateTests --- .../pp/mdga/client/Dialog/LobbyStateTest.java | 160 ++++++++++++++++-- 1 file changed, 144 insertions(+), 16 deletions(-) diff --git a/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java b/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java index 6849e27a..1bcef0a5 100644 --- a/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java +++ b/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java @@ -5,7 +5,9 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientSender; import pp.mdga.client.DialogsState; +import pp.mdga.client.GameState; import pp.mdga.client.dialogstate.LobbyState; +import pp.mdga.client.dialogstate.StartDialogState; import pp.mdga.game.Color; import pp.mdga.game.Game; import pp.mdga.game.Piece; @@ -15,6 +17,7 @@ import pp.mdga.message.client.LobbyNotReadyMessage; import pp.mdga.message.client.LobbyReadyMessage; import pp.mdga.message.client.SelectTSKMessage; +import pp.mdga.message.client.StartGameMessage; import pp.mdga.message.server.UpdateTSKMessage; import pp.mdga.notification.InfoNotification; import pp.mdga.notification.TskSelectNotification; @@ -46,7 +49,6 @@ public class LobbyStateTest { private Color clientColor; private int IDClient; - //declare player-host here private Player playerHost; private String nameHost = "Host"; @@ -55,13 +57,18 @@ public class LobbyStateTest { private DialogsState dialogs; private LobbyState lobby; + private StartDialogState startDialogState; private pp.mdga.server.automaton.LobbyState lobbyState; + private pp.mdga.server.automaton.GameState gameState; + private GameState clientGameState; private SelectTSKMessage selectTSKMessage; private DeselectTSKMessage deselectTSKMessage; - private UpdateTSKMessage updateTSKMessage; - + private LobbyReadyMessage readyMessage; + private LobbyNotReadyMessage notReadyMessage; + private StartGameMessage startGameMessage; + private TskSelectNotification tskSelectNotification; @Before public void setUp() { @@ -95,11 +102,16 @@ public void setUp() { dialogs = clientGameLogic.getDialogs(); lobby = dialogs.getLobby(); + startDialogState = dialogs.getStartDialog(); lobbyState = serverGameLogic.getLobbyState(); selectTSKMessage = new SelectTSKMessage(Color.CYBER); deselectTSKMessage = new DeselectTSKMessage(Color.CYBER); - updateTSKMessage = new UpdateTSKMessage(IDHost, Color.CYBER, true); + readyMessage = new LobbyReadyMessage(); + notReadyMessage = new LobbyNotReadyMessage(); + startGameMessage = new StartGameMessage(); + + tskSelectNotification = (TskSelectNotification) clientGameLogic.getNotification(); } @@ -109,8 +121,8 @@ public void testSelectTSK() { // test if client is in the Lobby clientGameLogic.setState(dialogs); dialogs.setState(lobby); - assertEquals(clientGameLogic.getState(), dialogs); - assertEquals(dialogs.getState(), lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); //test if server is in the lobby state serverGameLogic.setCurrentState(lobbyState); @@ -118,59 +130,161 @@ public void testSelectTSK() { serverGameLogic.received(selectTSKMessage, IDClient); assertEquals(Color.CYBER, serverGameLogic.getGame().getPlayerById(IDClient).getColor()); - - //clientGameLogic.received(updateTSKMessage); - //assertEquals(new TskSelectNotification(Color.CYBER, nameClient,false), clientGameLogic.getNotification()); } // UC-Lobby-02 @Test public void testDeselectTSK() { + // test if client is in the Lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + //test if server is in the lobby state + serverGameLogic.setCurrentState(lobbyState); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + assertEquals(Color.CYBER, serverGameLogic.getGame().getPlayerById(IDClient).getColor()); + serverGameLogic.received(deselectTSKMessage, IDClient); + assertEquals(Color.NONE, serverGameLogic.getGame().getPlayerById(IDClient).getColor()); } // UC-Lobby-03 @Test public void testChangeTSK() { + // test if client is in the Lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + //test if server is in the lobby state + serverGameLogic.setCurrentState(lobbyState); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + assertEquals(Color.ARMY, serverGameLogic.getGame().getPlayerById(IDHost).getColor()); + serverGameLogic.received(deselectTSKMessage, IDHost); + assertEquals(Color.NONE, serverGameLogic.getGame().getPlayerById(IDHost).getColor()); + serverGameLogic.received(selectTSKMessage, IDHost); + assertEquals(Color.CYBER, serverGameLogic.getGame().getPlayerById(IDHost).getColor()); } // UC-Lobby-04 @Test public void testReady() { + // test if client is in the Lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + //test if server is in the lobby state + serverGameLogic.setCurrentState(lobbyState); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + // Mark a player as not ready + serverGameLogic.getGame().getPlayerById(IDClient).setReady(false); + assertFalse(serverGameLogic.getGame().getPlayerById(IDClient).isReady()); + + // Send a LobbyReadyMessage and validate the player is marked as ready + serverGameLogic.received(readyMessage, IDClient); + assertFalse(serverGameLogic.getGame().getPlayerById(IDClient).isReady()); + + serverGameLogic.received(readyMessage, IDHost); + assertTrue(serverGameLogic.getGame().getPlayerById(IDHost).isReady()); } // UC-Lobby-05 @Test public void testNotReady() { + // test if client is in the Lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + // Ensure the server is in the LobbyState + serverGameLogic.setCurrentState(lobbyState); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + // Send a LobbyNotReadyMessage and validate the player is still marked as not ready + serverGameLogic.received(notReadyMessage, IDClient); + assertFalse(serverGameLogic.getGame().getPlayerById(IDClient).isReady()); + + // Mark a player as ready + serverGameLogic.getGame().getPlayerById(IDClient).setReady(true); + assertTrue(serverGameLogic.getGame().getPlayerById(IDClient).isReady()); + + // Send a LobbyNotReadyMessage and validate the player is marked as not ready + serverGameLogic.received(notReadyMessage, IDClient); + assertFalse(serverGameLogic.getGame().getPlayerById(IDClient).isReady()); } // UC-Lobby-06 @Test public void testLeaveLobby() { -// final LeaveGameMessage message = mock(LeaveGameMessage.class); -// serverLogic.received(message, logic.getOwnPlayerId()); -// verify(serverLogic).received(message, logic.getOwnPlayerId()); + // test if client is in the Lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + + clientGameLogic.getDialogs().getLobby().selectLeave(); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(startDialogState, dialogs.getState()); } // UC-Lobby-07 @Test public void testStartGame() { - // TODO: Implement test logic for starting the game + // Simulate client in lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + + // Simulate server in lobby + serverGameLogic.setCurrentState(lobbyState); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + // Test: Game cannot start with less than 2 players + serverGameLogic.getGame().removePlayer(IDHost); // Remove one player, leaving only 1 + assertEquals(1, serverGameLogic.getGame().getPlayers().size()); + + serverGameLogic.received(new StartGameMessage(), IDClient); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + // Test: Game cannot start if not all players are ready + serverGameLogic.getGame().addPlayer(IDHost, playerHost); // Add the second player back + assertEquals(2, serverGameLogic.getGame().getPlayers().size()); + + serverGameLogic.getGame().getPlayerById(IDClient).setReady(false); + serverGameLogic.getGame().getPlayerById(IDHost).setReady(true); + assertFalse(serverGameLogic.getGame().areAllReady()); + + serverGameLogic.received(new StartGameMessage(), IDClient); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + // Test: Game starts successfully if there are at least 2 players, and all are ready + serverGameLogic.getGame().getPlayerById(IDClient).setReady(true); + assertTrue(serverGameLogic.getGame().areAllReady()); + +// TODO: Index out of Bounds Exception +// serverGameLogic.received(new StartGameMessage(), IDHost); +// assertEquals(gameState, serverGameLogic.getCurrentState()); // Verify the server is now in game +// assertEquals(clientGameState, clientGameLogic.getState()); + } // UC-Lobby-08 @Test public void testShowStatus() { - // TODO: Implement test logic for showing the status of all players (ready/not ready) } // UC-Lobby-09 @Test public void testShowNames() { - // TODO: Implement test logic for showing the names of all players in the lobby } // UC-Lobby-10 @@ -188,6 +302,20 @@ public void testShowAssignedTSKs() { // UC-Lobby-12 @Test public void testServerAssignsTSK() { - // TODO: Implement test logic for server-side assignment of tasks (TSKs) to players + // test if client is in the Lobby + clientGameLogic.setState(dialogs); + dialogs.setState(lobby); + assertEquals(dialogs, clientGameLogic.getState()); + assertEquals(lobby, dialogs.getState()); + + //test if server is in the lobby state + serverGameLogic.setCurrentState(lobbyState); + assertEquals(lobbyState, serverGameLogic.getCurrentState()); + + assertEquals(Color.NONE, serverGameLogic.getGame().getPlayerById(IDClient).getColor()); + Color firstColor = serverGameLogic.getGame().getFirstUnusedColor(); + serverGameLogic.received(readyMessage, IDClient); + assertTrue(serverGameLogic.getGame().getPlayerById(IDClient).isReady()); + assertEquals(firstColor, serverGameLogic.getGame().getPlayerById(IDClient).getColor()); } }