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 org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.google.gson.Gson;
import com.rzg.zombieland.comunes.comunicacion.pojo.POJOInicioSesion;
import com.rzg.zombieland.comunes.comunicacion.respuesta.RespuestaGenerica;
import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException;
import com.rzg.zombieland.comunes.misc.ZombielandException;
import com.rzg.zombieland.server.comunicacion.controlador.ControladorConSesion;
import com.rzg.zombieland.server.comunicacion.controlador.ControladorInicioSesion;
import com.rzg.zombieland.server.meta.EnviaPeticionesImpl;
import com.rzg.zombieland.server.persistencia.HibernateSingleton;
import com.rzg.zombieland.server.persistencia.JugadorDao;
import com.rzg.zombieland.server.sesion.Jugador;
import com.rzg.zombieland.server.sesion.ServicioSesion;
/**
* Prueba el controlador de inicio de sesi�n.
* @author nicolas
*
*/
public class ControladorInicioSesionTest {
private Jugador jugadorValido;
/**
* Inicializa el test cargando datos previos en la DB.
* @throws ZombielandException
* @throws ParametrosNoValidosException
*/
@Before
public void setUp() throws ParametrosNoValidosException {
HibernateSingleton.setTest();
JugadorDao dao = new JugadorDao();
jugadorValido = new Jugador("juan", "1234", "1234", "a", "b");
dao.guardarObjeto(jugadorValido);
dao.cerrarSesion();
}
/**
* Cierra todo antes de matar el test.
*/
@After
public void tearDown() {
HibernateSingleton.cerrarConexion();
ServicioSesion.matarInstancia();
}
/**
* Prueba un inicio de sesi�n con datos v�lidos.
* @throws ZombielandException
* @throws ParametrosNoValidosException
*/
@Test
public void testInicioValido() throws ZombielandException, ParametrosNoValidosException {
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
ControladorInicioSesion controlador = new ControladorInicioSesion(manejador, new EnviaPeticionesImpl());
POJOInicioSesion pojo = new POJOInicioSesion(jugadorValido.getNombre(), jugadorValido.getClave());
Gson gson = new Gson();
RespuestaGenerica respuesta = gson.fromJson(controlador.procesar(gson.toJson(pojo)),
RespuestaGenerica.class);
assertTrue(respuesta.fuePeticionExitosa());
Assert.assertEquals(jugadorValido, manejador.getSesion().getJugador());
Assert.assertEquals(manejador.getSesion(),
ServicioSesion.getInstancia().getSesion(jugadorValido));
Assert.assertNotNull(manejador.getSesion().getId());
}
/**
* Prueba un inicio de sesi�n con nombre no v�lido.
* @throws ZombielandException
* @throws ParametrosNoValidosException
*/
@Test
public void testInicioNombreNoValido() throws ZombielandException, ParametrosNoValidosException {
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
ControladorInicioSesion controlador = new ControladorInicioSesion(manejador, new EnviaPeticionesImpl());
POJOInicioSesion pojo = new POJOInicioSesion("asd", jugadorValido.getClave());
Gson gson = new Gson();
RespuestaGenerica respuesta = gson.fromJson(controlador.procesar(gson.toJson(pojo)),
RespuestaGenerica.class);
assertFalse(respuesta.fuePeticionExitosa());
Assert.assertNull(manejador.getSesion());
Assert.assertNull(ServicioSesion.getInstancia().getSesion(jugadorValido));
}
/**
* Prueba un inicio de sesi�n con clave no v�lida.
* @throws ZombielandException
* @throws ParametrosNoValidosException
*/
@Test
public void testInicioClaveNoValida() throws ZombielandException, ParametrosNoValidosException {
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
ControladorInicioSesion controlador = new ControladorInicioSesion(manejador, new EnviaPeticionesImpl());
POJOInicioSesion pojo = new POJOInicioSesion(jugadorValido.getNombre(), "claveNoValida");
Gson gson = new Gson();
RespuestaGenerica respuesta = gson.fromJson(controlador.procesar(gson.toJson(pojo)),
RespuestaGenerica.class);
assertFalse(respuesta.fuePeticionExitosa());
Assert.assertNull(manejador.getSesion());
}
/**
* Prueba cerrar la sesi�n.
* @throws ZombielandException
* @throws ParametrosNoValidosException
*/
@Test
public void testInicioYCierre() throws ZombielandException, ParametrosNoValidosException {
// Inicio la sesi�n.
ManejadorSesionImpl manejador = new ManejadorSesionImpl();
ControladorInicioSesion controlador = new ControladorInicioSesion(manejador, new EnviaPeticionesImpl());
POJOInicioSesion pojo = new POJOInicioSesion(jugadorValido.getNombre(), jugadorValido.getClave());
Gson gson = new Gson();
controlador.procesar(gson.toJson(pojo));
// Intento realizar una acci�n de autenticaci�n.
ControladorConSesion controladorConSesion = new ControladorConSesion(manejador) {
@Override
protected String procesarAutenticado(String respuesta) {
// TODO Auto-generated method stub
return "exito";
}
};
assertEquals("exito", controladorConSesion.procesar("test"));
assertFalse(manejador.getSesionCerrada());
manejador.getSesion().cerrar();
RespuestaGenerica respuesta = gson.fromJson(controladorConSesion.procesar(gson.toJson(pojo)),
RespuestaGenerica.class);
assertFalse(respuesta.fuePeticionExitosa());
assertTrue(manejador.getSesionCerrada());
}
// TODO testear cierre de sesi�n.
}