Server/Server/src/test/java/uulm/teamname/marvelous/server/lobbymanager/LobbyConnectionTest.java

295 lines
12 KiB
Java

package uulm.teamname.marvelous.server.lobbymanager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.MockedStatic;
import uulm.teamname.marvelous.gamelibrary.events.Event;
import uulm.teamname.marvelous.gamelibrary.events.EventBuilder;
import uulm.teamname.marvelous.gamelibrary.events.EventType;
import uulm.teamname.marvelous.gamelibrary.messages.BasicMessage;
import org.java_websocket.WebSocket;
import uulm.teamname.marvelous.gamelibrary.messages.ParticipantType;
import uulm.teamname.marvelous.gamelibrary.messages.server.EventMessage;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.function.BiConsumer;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.Assertions.*;
class LobbyConnectionTest {
@BeforeEach
void setUp() {
}
BiConsumer<WebSocket, BasicMessage> sendMessageCallback;
BiConsumer<WebSocket, String> sendErrorCallback;
WebSocket player1, player2, spectator;
Participant player1Participant, player2Participant, spectatorParticipant;
LobbyConnection connection;
@BeforeEach
void beforeEach() {
sendMessageCallback = mock(BiConsumer.class);
sendErrorCallback = mock(BiConsumer.class);
// player1 = mock(WebSocket.class);
// player2 = mock(WebSocket.class);
// spectator = mock(WebSocket.class);
//
// player1Participant = new Participant(player1, ParticipantType.PlayerOne, "Player1");
// player2Participant = new Participant(player2, ParticipantType.PlayerTwo, "Player2");
// spectatorParticipant = new Participant(spectator, ParticipantType.Spectator, "Spectator");
//
// connection = new LobbyConnection("/AwesomeGame", sendMessageCallback, sendErrorCallback);
}
/*
@Test
void lobbyIsFullTest() {
assertThat(connection.isFull()).isFalse();
connection.addPlayer1(player1Participant);
assertThat(connection.isFull()).isFalse();
connection.addPlayer2(player2Participant);
assertThat(connection.isFull()).isTrue();
}
@Test
void lobbyIsFullTestTwo() {
assertThat(connection.isFull()).isFalse();
connection.addPlayer2(player2Participant);
assertThat(connection.isFull()).isFalse();
connection.addSpectator(spectatorParticipant);
assertThat(connection.isFull()).isFalse();
connection.addPlayer1(player1Participant);
assertThat(connection.isFull()).isTrue();
}
@Test
void addPlayerOneTest(){
var websocket = mock(WebSocket.class);
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
assertThat(connection.addPlayer1(playerOne)).isTrue();
assertThat(connection.hasPlayer1()).isTrue();
assertThat(connection.addPlayer1(playerOne)).isFalse();
}
@Test
void addPlayerTwoTest(){
var websocket = mock(WebSocket.class);
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
assertThat(connection.addPlayer2(playerTwo)).isTrue();
assertThat(connection.hasPlayer2()).isTrue();
assertThat(connection.addPlayer2(playerTwo)).isFalse();
}
@Test
void addPlayerTest(){
var websocket = mock(WebSocket.class);
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
assertThat(connection.addPlayer(playerOne)).isTrue();
assertThat(connection.addPlayer(playerTwo)).isTrue();
assertThat(connection.addPlayer(spectator)).isFalse();
assertThat(connection.contains(playerOne)).isTrue();
assertThat(connection.contains(playerTwo)).isTrue();
assertThat(connection.contains(spectator)).isFalse();
}
@Test
void addSpectatorTest(){
var websocket = mock(WebSocket.class);
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
assertThat(connection.addSpectator(playerOne)).isFalse();
assertThat(connection.addSpectator(playerTwo)).isFalse();
assertThat(connection.addSpectator(spectator)).isTrue();
assertThat(connection.contains(playerOne)).isFalse();
assertThat(connection.contains(playerTwo)).isFalse();
assertThat(connection.contains(spectator)).isTrue();
}
@Test
void addOneSpectatorAndOnePlayer(){
var websocket = mock(WebSocket.class);
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
assertThat(connection.addPlayer(playerOne)).isTrue();
assertThat(connection.addSpectator(spectator)).isTrue();
assertThat(connection.contains(playerOne)).isTrue();
assertThat(connection.contains(spectator)).isTrue();
}
@Test
void removeParticipantTest(){
var websocket = mock(WebSocket.class);
Participant playerOne = new Participant(websocket, ParticipantType.PlayerOne, "PlayerOne");
Participant playerTwo = new Participant(websocket, ParticipantType.PlayerTwo, "PlayerTwo");
Participant spectator = new Participant(websocket, ParticipantType.Spectator,"Spectator");
connection.addPlayer(playerOne);
connection.addPlayer(playerTwo);
connection.addSpectator(spectator);
assertThat(connection.removeParticipant(spectator)).isTrue();
assertThat(connection.removeParticipant(playerOne)).isTrue();
assertThat(connection.removeParticipant(playerOne)).isFalse();
assertThat(connection.removeParticipant(playerTwo)).isTrue();
}
@Test
void sendMessageTest(){
var webSocket = mock(WebSocket.class);
var participant = new Participant(webSocket, ParticipantType.PlayerOne, "playerOne");
var event = new Event[]{
new EventBuilder(EventType.PauseStartEvent).buildGameEvent(),
new EventBuilder(EventType.MoveEvent).buildGameEvent()
};
var message = new EventMessage();
message.messages = event;
connection.sendEvents(participant, event);
verify(sendMessageCallback).accept(participant.getConnection(), message);
}
@Test
void broadcastEventTest(){
var player1 = mock(WebSocket.class);
var player2 = mock(WebSocket.class);
var spectator1 = mock(WebSocket.class);
var spectator2 = mock(WebSocket.class);
Participant playerOne = new Participant(player1, ParticipantType.PlayerOne, "playerOne");
Participant playerTwo = new Participant(player2, ParticipantType.PlayerTwo, "playerTwo");
Participant spectatorOne = new Participant(spectator1, ParticipantType.Spectator, "spectatorOne");
Participant spectatorTwo = new Participant(spectator2, ParticipantType.Spectator, "spectatorTwo");
connection.addPlayer(playerOne);
connection.addPlayer(playerTwo);
connection.addSpectator(spectatorOne);
connection.addSpectator(spectatorTwo);
var events = new Event[]{
new EventBuilder(EventType.PauseStartEvent).buildGameEvent(),
new EventBuilder(EventType.MoveEvent).buildGameEvent()
};
var message = new EventMessage();
message.messages = events;
connection.broadcastEvents(events);
verify(sendMessageCallback).accept(playerOne.getConnection(), message);
verify(sendMessageCallback).accept(playerTwo.getConnection(), message);
verify(sendMessageCallback).accept(spectatorOne.getConnection(), message);
verify(sendMessageCallback).accept(spectatorTwo.getConnection(), message);
}
@Test
void broadcastEventsListToArrayTest(){
var player1 = mock(WebSocket.class);
var player2 = mock(WebSocket.class);
var spectatorSocket = mock(WebSocket.class);
Participant playerOne = new Participant(player1, ParticipantType.PlayerOne, "playerOne");
Participant playerTwo = new Participant(player2, ParticipantType.PlayerTwo, "playerTwo");
Participant spectator = new Participant(spectatorSocket, ParticipantType.Spectator, "spectator");
connection.addPlayer(playerOne);
connection.addPlayer(playerTwo);
connection.addSpectator(spectator);
var events = new ArrayList<Event>();
events.add(new EventBuilder(EventType.PauseStartEvent).buildGameEvent());
events.add(new EventBuilder(EventType.MoveEvent).buildGameEvent());
connection.broadcastEvents(events);
var message = new EventMessage();
message.messages = events.toArray(new Event[0]);
verify(sendMessageCallback).accept(playerOne.getConnection(), message);
verify(sendMessageCallback).accept(playerTwo.getConnection(), message);
verify(sendMessageCallback).accept(spectator.getConnection(), message);
}
@Test
void hashCodeTest() {
var hashSet = new HashSet<LobbyConnection>();
LobbyConnection connection = new LobbyConnection("yay", null, null);
hashSet.add(connection);
assertThat(hashSet).containsOnly(connection);
connection.addPlayer1(mock(Participant.class));
assertThat(hashSet).containsOnly(connection);
var spectator = new Participant(null, ParticipantType.Spectator, "SomeSpectator");
connection.addSpectator(spectator);
assertThat(hashSet).containsOnly(connection);
}
@Test
void broadcastToAllExceptTest(){
var player1 = mock(WebSocket.class);
var player2 = mock(WebSocket.class);
var spectator1 = mock(WebSocket.class);
var spectator2 = mock(WebSocket.class);
Participant playerOne = new Participant(player1, ParticipantType.PlayerOne, "playerOne");
Participant playerTwo = new Participant(player2, ParticipantType.PlayerTwo, "playerTwo");
Participant spectatorOne = new Participant(spectator1, ParticipantType.Spectator, "spectatorOne");
Participant spectatorTwo = new Participant(spectator2, ParticipantType.Spectator, "spectatorTwo");
connection.addPlayer(playerOne);
connection.addPlayer(playerTwo);
connection.addSpectator(spectatorOne);
connection.addSpectator(spectatorTwo);
var events = new Event[]{
new EventBuilder(EventType.PauseStartEvent).buildGameEvent(),
new EventBuilder(EventType.MoveEvent).buildGameEvent()
};
var message = new EventMessage();
message.messages = events;
connection.broadcastToAllExcept(playerTwo, events);
verify(sendMessageCallback).accept(playerOne.getConnection(), message);
//playerTwo is the only one who doesn't receive the message
verify(sendMessageCallback, never()).accept(playerTwo.getConnection(), message);
verify(sendMessageCallback).accept(spectatorOne.getConnection(), message);
verify(sendMessageCallback).accept(spectatorTwo.getConnection(), message);
}
@Test
void terminateTest(){
assertThat(connection.isActive()).isFalse();
connection.terminateConnection();
assertThat(connection.isActive()).isTrue();
} */
}