package mx.edu.um.mateo.inscripciones.dao;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mx.edu.um.mateo.general.dao.BaseDao;
import mx.edu.um.mateo.general.model.Organizacion;
import mx.edu.um.mateo.general.model.Usuario;
import mx.edu.um.mateo.general.test.BaseDaoTest;
import mx.edu.um.mateo.general.utils.Constantes;
import mx.edu.um.mateo.inscripciones.model.Institucion;
import mx.edu.um.mateo.inscripciones.model.Paquete;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.Assert.*;
/**
* @author semdariobarbaamaya
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:mateo.xml", "classpath:security.xml"})
@Transactional
public class InstitucionDaoTest extends BaseDaoTest {
@Autowired
private InstitucionDao instance;
@SuppressWarnings("unchecked")
@Test
public void debieraMostrarListaDeInstitucion() {
log.debug("Debiera mostrar lista de institucion");
Usuario usuario = obtieneUsuario();
Institucion institucion = null;
for (int i = 0; i < 20; i++) {
institucion = new Institucion();
institucion.setNombre("Nombre-test");
institucion.setPorcentaje(new BigDecimal("123"));
institucion.setStatus("A");
institucion.setOrganizacion(usuario.getEmpresa().getOrganizacion());
instance.graba(institucion);
assertNotNull(institucion.getId());
}
Map<String, Object> params = new HashMap<>();
params.put("empresa", usuario.getEmpresa().getId());
Map<String, Object> result = instance.lista(params);
assertNotNull(result.get(Constantes.CONTAINSKEY_INSTITUCION));
assertNotNull(result.get(Constantes.CONTAINSKEY_CANTIDAD));
assertEquals(10, ((List<Institucion>) result.get(Constantes.CONTAINSKEY_INSTITUCION)).size());
assertEquals(20, ((Long) result.get(Constantes.CONTAINSKEY_CANTIDAD)).intValue());
}
@Test
public void debieraObtenerInstitucion() {
log.debug("Debiera obtener Institucion");
Usuario usuario = obtieneUsuario();
Institucion institucion = new Institucion();
institucion.setNombre("Institucion-test");
institucion.setPorcentaje(new BigDecimal("123"));
institucion.setStatus("A");
institucion.setOrganizacion(usuario.getEmpresa().getOrganizacion());
instance.graba(institucion);
assertNotNull(institucion.getId());
Long id = institucion.getId();
Institucion result = instance.obtiene(id);
assertNotNull(result.getId());
assertEquals("Institucion-test", result.getNombre());
}
@Test
public void debieraCrearInstitucion() {
log.debug("Debiera crear institucion");
Usuario usuario = obtieneUsuario();
Institucion institucion = new Institucion();
institucion.setNombre("Institucion-test");
institucion.setPorcentaje(new BigDecimal("123"));
institucion.setStatus("A");
institucion.setOrganizacion(usuario.getEmpresa().getOrganizacion());
instance.graba(institucion);
assertNotNull(institucion.getId());
Long id = institucion.getId();
Institucion result = instance.obtiene(id);
assertNotNull(result.getId());
assertEquals(institucion.getNombre(), result.getNombre());
}
@Test
public void debieraActualizarInstitucion() {
log.debug("Debiera actualizar institucion");
Usuario usuario = obtieneUsuario();
Institucion institucion = new Institucion();
institucion.setNombre("Institucion-test");
institucion.setPorcentaje(new BigDecimal("123"));
institucion.setStatus("A");
institucion.setOrganizacion(usuario.getEmpresa().getOrganizacion());
instance.graba(institucion);
assertNotNull(institucion.getId());
Long id = institucion.getId();
Institucion result = instance.obtiene(id);
assertNotNull(result.getId());
assertEquals(institucion.getNombre(), result.getNombre());
result.setNombre("PruebaNombre");
instance.actualiza(result);
currentSession().refresh(institucion);
assertEquals(result.getNombre(), institucion.getNombre());
}
@Test
public void debieraEliminarInstitucion() {
log.debug("Debiera actualizar institucion");
Usuario usuario = obtieneUsuario();
Institucion institucion = new Institucion();
institucion.setNombre("Institucion-test");
institucion.setPorcentaje(new BigDecimal("123"));
institucion.setStatus("A");
institucion.setOrganizacion(usuario.getEmpresa().getOrganizacion());
instance.graba(institucion);
assertNotNull(institucion.getId());
Long id = institucion.getId();
institucion.setNombre("PRUEBA");
instance.graba(institucion);
assertNotNull(institucion.getId());
String nombre = instance.elimina(institucion.getId());
assertEquals("PRUEBA", nombre);
try {
Institucion institucion1 = instance.obtiene(institucion.getId());
fail("Se encontro paquete " + institucion1);
} catch (ObjectRetrievalFailureException e) {
log.debug("Se elimino con exito el paquete {}", nombre);
}
}
}