package com.rzg.zombieland.server.meta;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Test;
import com.google.gson.Gson;
import com.rzg.zombieland.comunes.comunicacion.pojo.POJOCreacionPartida;
import com.rzg.zombieland.comunes.comunicacion.pojo.POJOPartida;
import com.rzg.zombieland.comunes.misc.EstadoPartida;
import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException;
import com.rzg.zombieland.comunes.misc.ZombielandException;
import com.rzg.zombieland.server.controlador.AbstractPartidasTest;
import com.rzg.zombieland.server.sesion.Jugador;
import com.rzg.zombieland.server.sesion.ServicioSesion;
import com.rzg.zombieland.server.sesion.Sesion;
public class PartidaTest extends AbstractPartidasTest {
@Test
public void testCrearPartida() throws ParametrosNoValidosException {
crearPartida();
Partida partida = partidasCreadas.get(0);
assertEquals(1, partida.getJugadores().size());
assertEquals(getUltimoAdmin(), partida.getJugadores().get(0));
assertEquals(getUltimoAdmin(), partida.getAdministrador());
assertEquals(1, partida.getJugadores().size());
assertEquals(getUltimaCantidadRondas(), partida.getCantidadRondas());
assertEquals(getUltimaCantidadJugadores(), partida.getMaximoJugadores());
assertEquals(getUltimoNombre(), partida.getNombre());
}
@Test
public void testGetPojo() throws ParametrosNoValidosException {
crearPartida();
Partida partida = partidasCreadas.get(0);
POJOCreacionPartida pojoCreacion =
new POJOCreacionPartida(getUltimaCantidadRondas(),
getUltimaCantidadJugadores(),
getUltimoNombre());
POJOPartida pojo = new POJOPartida(pojoCreacion, getUltimoAdmin().getNombre());
assertEquals(pojo, partida.getPOJO(getUltimoAdmin()));
}
@Test
public void testNotificar() throws ZombielandException {
crearPartida();
Jugador otroJugador = crearJugador();
EnviaPeticionesImpl enviaPeticiones = new EnviaPeticionesImpl();
Sesion sesion = new Sesion(getUltimoAdmin(), enviaPeticiones);
ServicioSesion.getInstancia().addSesion(sesion);
Partida partida = partidasCreadas.get(0);
sesion.setPartida(partida);
partida.addJugador(otroJugador);
POJOPartida pojo =
new Gson().fromJson(enviaPeticiones.getUltimaPeticion().getMensajePeticion(),
POJOPartida.class);
assertEquals(pojo, partida.getPOJO(getUltimoAdmin()));
partida.removerJugador(otroJugador);
pojo = new Gson().fromJson(enviaPeticiones.getUltimaPeticion().getMensajePeticion(),
POJOPartida.class);
assertEquals(pojo, partida.getPOJO(getUltimoAdmin()));
}
/**
* Prueba que notificar del arranque env�e la proyecci�n con el POJO.
* @throws ZombielandException
*/
@Test
public void testNotificarArrancar() throws ZombielandException {
Partida partida = crearPartida();
EnviaPeticionesImpl enviaPeticiones = new EnviaPeticionesImpl();
Sesion sesion = new Sesion(getUltimoAdmin(), enviaPeticiones);
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
for (int i = 1; i < getUltimaCantidadJugadores(); i++) {
Jugador jugador = crearJugador();
sesion = new Sesion(jugador, new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
partida.addJugador(jugador);
}
POJOPartida pojo =
new Gson().fromJson(enviaPeticiones.getUltimaPeticion().getMensajePeticion(),
POJOPartida.class);
assertEquals(pojo, partida.getPOJO(getUltimoAdmin()));
assertNotNull(pojo.getProyeccion());
}
@Test
public void testAgregarJugadoresDeMas() throws ZombielandException {
crearPartida();
Partida partida = partidasCreadas.get(0);
Sesion sesion = new Sesion(getUltimoAdmin(), new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
for (int i = 1; i < getUltimaCantidadJugadores(); i++) {
assertTrue(partida.puedenUnirseJugadores());
Jugador jugador = crearJugador();
sesion = new Sesion(jugador, new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
partida.addJugador(jugador);
}
try {
assertFalse(partida.puedenUnirseJugadores());
partida.addJugador(crearJugador());
fail("Deber�a haber lanzado una excepci�n");
} catch (ZombielandException e) {
// Esperada.
}
}
@Test
public void testQuitarJugadorQueNoEstaba() throws ZombielandException {
crearPartida();
Partida partida = partidasCreadas.get(0);
Sesion sesion = new Sesion(getUltimoAdmin(), new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
try {
partidasCreadas.get(0).removerJugador(crearJugador());
fail("Deber�a haber lanzado una excepci�n");
} catch (ZombielandException e) {
// Esperada.
}
}
@Test
public void testArrancar() throws ZombielandException {
Partida partida = crearPartida();
Sesion sesion = new Sesion(getUltimoAdmin(), new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
for (int i = 1; i < getUltimaCantidadJugadores(); i++) {
assertEquals(EstadoPartida.EN_ESPERA, partida.getEstado());
// Hasta que no arranca, no se pueden mover.
try {
partida.moverTodos();
fail("Deber�a haber lanzado una excepci�n");
} catch (ZombielandException e) {
// Esperada.
}
Jugador jugador = crearJugador();
sesion = new Sesion(jugador, new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
partida.addJugador(jugador);
}
assertEquals(EstadoPartida.ACTIVA, partida.getEstado());
partida.moverTodos();
}
}