diff --git a/src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java b/src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java new file mode 100644 index 0000000..3f071fd --- /dev/null +++ b/src/test/java/it/polimi/ingsw/gc14/Controller/ClientControllerTest.java @@ -0,0 +1,141 @@ +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