package com.rzg.zombieland.server.controlador;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.UUID;
import org.junit.Test;
import com.google.gson.Gson;
import com.rzg.zombieland.comunes.comunicacion.pojo.POJOUnirsePartida;
import com.rzg.zombieland.comunes.comunicacion.respuesta.RespuestaUnirsePartida;
import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException;
import com.rzg.zombieland.comunes.misc.ZombielandException;
import com.rzg.zombieland.server.comunicacion.controlador.ControladorUnirsePartida;
import com.rzg.zombieland.server.meta.EnviaPeticionesImpl;
import com.rzg.zombieland.server.meta.Partida;
import com.rzg.zombieland.server.meta.ServicioPartidas;
import com.rzg.zombieland.server.sesion.Jugador;
import com.rzg.zombieland.server.sesion.ServicioSesion;
import com.rzg.zombieland.server.sesion.Sesion;
public class ControladorUnirsePartidaTest extends AbstractPartidasTest {
@Test
public void testUnirseExistente() throws ZombielandException {
Gson gson = new Gson();
Partida partida = crearPartida();
Sesion sesion = new Sesion(getUltimoAdmin(), new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
manejador.crearSesion();
ServicioPartidas.getInstancia().addPartida(partida);
ControladorUnirsePartida controlador = new ControladorUnirsePartida(manejador);
String idPartida = partida.getId().toString();
POJOUnirsePartida pojo = new POJOUnirsePartida(idPartida, false);
String sRespuesta = controlador.procesarAutenticado(gson.toJson(pojo));
RespuestaUnirsePartida respuesta = gson.fromJson(sRespuesta, RespuestaUnirsePartida.class);
assertTrue("La respuesta no fue exitosa: " + respuesta.getMensajeError(),
respuesta.fuePeticionExitosa());
assertEquals(manejador.getSesion().getPartida().getPOJO(getUltimoAdmin()),
respuesta.getPartida());
assertEquals(2, manejador.getSesion().getPartida().getJugadores().size());
}
@Test
public void testUnirseLlena() throws ZombielandException {
Gson gson = new Gson();
Partida partida = crearPartida();
Sesion sesion = new Sesion(getUltimoAdmin(), new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
manejador.crearSesion();
ServicioPartidas.getInstancia().addPartida(partida);
llenarPartida(partida);
ControladorUnirsePartida controlador = new ControladorUnirsePartida(manejador);
String idPartida = partida.getId().toString();
POJOUnirsePartida pojo = new POJOUnirsePartida(idPartida, false);
String sRespuesta = controlador.procesarAutenticado(gson.toJson(pojo));
RespuestaUnirsePartida respuesta = gson.fromJson(sRespuesta, RespuestaUnirsePartida.class);
assertFalse(respuesta.fuePeticionExitosa());
assertEquals(Partida.MENSAJE_PARTIDA_EN_PROGRESO, respuesta.getMensajeError());
}
@Test
public void testObservarLlena() throws ZombielandException {
Gson gson = new Gson();
Partida partida = crearPartida();
Sesion sesion = new Sesion(getUltimoAdmin(), new EnviaPeticionesImpl());
sesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(sesion);
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
manejador.crearSesion();
ServicioPartidas.getInstancia().addPartida(partida);
ServicioSesion.getInstancia().addSesion(manejador.getSesion());
llenarPartida(partida);
ControladorUnirsePartida controlador = new ControladorUnirsePartida(manejador);
String idPartida = partida.getId().toString();
POJOUnirsePartida pojo = new POJOUnirsePartida(idPartida, true);
String sRespuesta = controlador.procesarAutenticado(gson.toJson(pojo));
RespuestaUnirsePartida respuesta = gson.fromJson(sRespuesta, RespuestaUnirsePartida.class);
assertTrue(respuesta.fuePeticionExitosa());
}
private void llenarPartida(Partida partida) throws ParametrosNoValidosException,
ZombielandException {
while (partida.puedenUnirseJugadores()) {
Jugador otro = crearJugador();
Sesion otraSesion = new Sesion(otro, new EnviaPeticionesImpl());
otraSesion.setPartida(partida);
ServicioSesion.getInstancia().addSesion(otraSesion);
partida.addJugador(otro);
}
}
@Test
public void testUnirseNoExistente() throws ParametrosNoValidosException {
Gson gson = new Gson();
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
manejador.crearSesion();
ControladorUnirsePartida controlador = new ControladorUnirsePartida(manejador);
POJOUnirsePartida pojo = new POJOUnirsePartida(UUID.randomUUID().toString(), false);
String sRespuesta = controlador.procesarAutenticado(gson.toJson(pojo));
RespuestaUnirsePartida respuesta = gson.fromJson(sRespuesta, RespuestaUnirsePartida.class);
assertFalse(respuesta.fuePeticionExitosa());
assertEquals(ControladorUnirsePartida.MENSAJE_PARTIDA_NO_EXISTENTE, respuesta.getMensajeError());
}
}