summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/Lobby.java26
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/LobbyTest.java28
2 files changed, 52 insertions, 2 deletions
diff --git a/src/main/java/org/luxons/sevenwonders/game/Lobby.java b/src/main/java/org/luxons/sevenwonders/game/Lobby.java
index 30b31d4b..b115d32e 100644
--- a/src/main/java/org/luxons/sevenwonders/game/Lobby.java
+++ b/src/main/java/org/luxons/sevenwonders/game/Lobby.java
@@ -2,6 +2,7 @@ package org.luxons.sevenwonders.game;
import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
import org.luxons.sevenwonders.game.data.GameDefinition;
@@ -13,10 +14,10 @@ public class Lobby {
private final Player owner;
- private final List<Player> players;
-
private final GameDefinition gameDefinition;
+ private List<Player> players;
+
private State state = State.LOBBY;
public Lobby(long id, String name, Player owner, GameDefinition gameDefinition) {
@@ -36,6 +37,10 @@ public class Lobby {
return name;
}
+ public List<Player> getPlayers() {
+ return players;
+ }
+
public synchronized int addPlayer(Player player) throws GameAlreadyStartedException, PlayerOverflowException {
if (hasStarted()) {
throw new GameAlreadyStartedException();
@@ -76,6 +81,17 @@ public class Lobby {
return players.size() >= gameDefinition.getMinPlayers();
}
+ public void reorderPlayers(List<String> orderedUserNames) {
+ players = orderedUserNames.stream().map(this::getPlayer).collect(Collectors.toList());
+ }
+
+ private Player getPlayer(String userName) {
+ return players.stream()
+ .filter(p -> p.getUserName().equals(userName))
+ .findAny()
+ .orElseThrow(() -> new UnknownPlayerException(userName));
+ }
+
public boolean isOwner(String userName) {
return owner.getUserName().equals(userName);
}
@@ -98,4 +114,10 @@ public class Lobby {
super(name);
}
}
+
+ static class UnknownPlayerException extends IllegalArgumentException {
+ UnknownPlayerException(String userName) {
+ super(userName);
+ }
+ }
}
diff --git a/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java b/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java
index 8e59dea1..65069b88 100644
--- a/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java
+++ b/src/test/java/org/luxons/sevenwonders/game/LobbyTest.java
@@ -1,5 +1,7 @@
package org.luxons.sevenwonders.game;
+import java.util.Arrays;
+
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
@@ -13,6 +15,7 @@ import org.luxons.sevenwonders.game.Lobby.GameAlreadyStartedException;
import org.luxons.sevenwonders.game.Lobby.PlayerNameAlreadyUsedException;
import org.luxons.sevenwonders.game.Lobby.PlayerOverflowException;
import org.luxons.sevenwonders.game.Lobby.PlayerUnderflowException;
+import org.luxons.sevenwonders.game.Lobby.UnknownPlayerException;
import org.luxons.sevenwonders.game.data.GameDefinition;
import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
@@ -110,6 +113,31 @@ public class LobbyTest {
}
}
+ @Test
+ public void reorderPlayers_failsOnSameName() {
+ Player player1 = new Player("Test User 1", "testuser1");
+ Player player2 = new Player("Test User 2", "testuser2");
+ Player player3 = new Player("Test User 3", "testuser3");
+ lobby.addPlayer(player1);
+ lobby.addPlayer(player2);
+ lobby.addPlayer(player3);
+ lobby.reorderPlayers(Arrays.asList("testuser3", "testuser1", "testuser2"));
+ assertEquals("testuser3", lobby.getPlayers().get(0).getUserName());
+ assertEquals("testuser1", lobby.getPlayers().get(1).getUserName());
+ assertEquals("testuser2", lobby.getPlayers().get(2).getUserName());
+ }
+
+ @Test(expected = UnknownPlayerException.class)
+ public void reorderPlayers_failsOnUnknownPlayer() {
+ Player player1 = new Player("Test User 1", "testuser1");
+ Player player2 = new Player("Test User 2", "testuser2");
+ Player player3 = new Player("Test User 3", "testuser3");
+ lobby.addPlayer(player1);
+ lobby.addPlayer(player2);
+ lobby.addPlayer(player3);
+ lobby.reorderPlayers(Arrays.asList("testuser4", "testuser1", "testuser2"));
+ }
+
@Theory
public void startGame_failsBelowMinPlayers(int nbPlayers) {
assumeTrue(nbPlayers < gameDefinition.getMinPlayers());
bgstack15