Se agrega el test de DaoUzyTUsuario, además se controlan excepciones en el…

Se agrega el test de DaoUzyTUsuario, además se controlan excepciones en el método de asignar perfiles
parent 2f37fd30
package ec.edu.espe.movilidad.MovilidadWS.Controller;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUsuarioConPerfiles;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario.IServiceUzyTUsuario;
......@@ -45,10 +46,10 @@ public class UzyTUsuarioController {
}
@PostMapping("/asignar_perfil/{uzytusuario_id}/{uzytperfil_id}")
public ResponseEntity<DtoUzyTUsuario> asignarPerfilAUsuario(
public ResponseEntity<DtoUsuarioConPerfiles> asignarPerfilAUsuario(
@PathVariable("uzytusuario_id") Long uzytusuario_id,
@PathVariable("uzytperfil_id") Long uzytperfil_id) {
DtoUzyTUsuario usuarioAsignado = serviceUzyTUsuario.asignarPerfilAUsuario(uzytusuario_id, uzytperfil_id);
DtoUsuarioConPerfiles usuarioAsignado = serviceUzyTUsuario.asignarPerfilAUsuario(uzytusuario_id, uzytperfil_id);
if (usuarioAsignado != null) {
return new ResponseEntity<>(usuarioAsignado, HttpStatus.OK);
} else {
......
......@@ -8,35 +8,22 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@Repository
public interface DaoUzyTUsuario extends JpaRepository<ModelUzyTUsuario, Long> {
@Query("SELECT u FROM ModelUzyTUsuario u WHERE u.uzytusuario_nombres = :nombre AND u.uzytusuario_apellidos = :apellido")
List<ModelUzyTUsuario> findByNombresAndApellidos(@Param("nombre") String nombre, @Param("apellido") String apellido);
@Query("SELECT u FROM ModelUzyTUsuario u WHERE u.uzytusuario_nombres LIKE CONCAT(:primerNombre, '%')")
List<ModelUzyTUsuario> findByPrimerNombre(@Param("primerNombre") String primerNombre);
@Query("SELECT u FROM ModelUzyTUsuario u WHERE u.uzytusuario_apellidos = :apellido")
List<ModelUzyTUsuario> findByApellido(@Param("apellido") String apellido);
@Query("SELECT u FROM ModelUzyTUsuario u WHERE LOWER(u.uzytusuario_nombres) LIKE CONCAT('%', LOWER(:usuario), '%') OR LOWER(u.uzytusuario_apellidos) LIKE CONCAT('%', LOWER(:usuario), '%')")
List<ModelUzyTUsuario> findByUsuario(@Param("usuario") String usuario);
@Query("SELECT u FROM ModelUzyTUsuario u WHERE u.spriden_id = :spriden_id")
Optional<ModelUzyTUsuario> findBySpridenID(@Param("spriden_id") String spriden_id);
@Query("SELECT u FROM ModelUzyTUsuario u WHERE u.uzytusuario_email_institucional = :email")
ModelUzyTUsuario findByEmail(@Param("email") String email);
@Query("SELECT u FROM ModelUzyTUsuario u WHERE u.uzytusuario_nombres = :username")
ModelUzyTUsuario findByUsername(@Param("username") String username);
@Query("SELECT u.uzytperfils FROM ModelUzyTUsuario u WHERE u.uzytusuario_id = :uzytusuario_id")
Set<ModelUzyTPerfil> findPerfilesByUsuarioId(@Param("uzytusuario_id") Long uzytusuario_id);
}
package ec.edu.espe.movilidad.MovilidadWS.Dto;
import lombok.Data;
import java.util.Set;
@Data
public class DtoUsuarioConPerfiles {
private Long uzytusuario_id;
private String uzytusuario_nombres;
private Set<DtoUzyTPerfil> perfiles;
}
\ No newline at end of file
package ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUsuarioConPerfiles;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario;
......@@ -19,7 +20,7 @@ public interface IServiceUzyTUsuario {
Set<DtoUzyTPerfil> findPerfilesByUsuarioId(Long uzytusuario_id);
DtoUzyTUsuario asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id);
DtoUsuarioConPerfiles asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id);
boolean eliminar(Long id);
}
......@@ -2,6 +2,7 @@ package ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUsuarioConPerfiles;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTPerfilMapper;
......@@ -81,24 +82,6 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario {
}
}
@Override
public Set<DtoUzyTPerfil> findPerfilesByUsuarioId(Long uzytusuario_id) {
try {
if (uzytusuario_id == null || uzytusuario_id <= 0) {
throw new IllegalArgumentException("El ID debe ser válido y mayor que cero.");
}
Set<ModelUzyTPerfil> perfiles = daoUzyTUsuario.findPerfilesByUsuarioId(uzytusuario_id);
if (perfiles.isEmpty()) { // cuando la colección de perfiles es nula
throw new ResourceNotFoundException("No se encontraron perfiles de usuario para el ID: " + uzytusuario_id);
}
return mapperPerfil.entitiesToDtosSet(perfiles);
} catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) {
throw new RuntimeException("Error al buscar perfiles de usuario: " + ex.getMessage());
}
}
@Override
public DtoUzyTUsuario guardar(DtoUzyTUsuario dtoUzyTUsuario) throws Exception {
try {
......@@ -227,7 +210,7 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario {
@Override
public DtoUzyTUsuario asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id) {
public DtoUsuarioConPerfiles asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id) {
try {
if (uzytusuario_id <= 0 || uzytperfil_id <= 0) {
throw new IllegalArgumentException("Se debe ingresar un ID válido y mayor que cero.");
......@@ -235,12 +218,22 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario {
ModelUzyTUsuario usuario = daoUzyTUsuario.findById(uzytusuario_id).orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado con ID: " + uzytusuario_id));
ModelUzyTPerfil perfil = daoUzyTPerfil.findById(uzytperfil_id).orElseThrow(() -> new ResourceNotFoundException("Perfil no encontrado con ID: " + uzytperfil_id));
if (usuario.getUzytperfils().contains(perfil)) {
throw new IllegalArgumentException("El perfil ya está asignado al usuario.");
}
// Aquí asigno el perfil al usuario
usuario.getUzytperfils().add(perfil);
ModelUzyTUsuario usuarioAsignado = daoUzyTUsuario.save(usuario);
daoUzyTUsuario.save(usuario);
Set<DtoUzyTPerfil> perfilesDto = mapperPerfil.entitiesToDtosSet(usuario.getUzytperfils());
// Convertir el modelo a DTO y devolverlo
return mapper.entityToDto(usuarioAsignado);
// Se crea un objetjo de DtoUsuarioConPerfiles para asignarles su valor a los campos
DtoUsuarioConPerfiles dtoUsuarioConPerfiles = new DtoUsuarioConPerfiles();
dtoUsuarioConPerfiles.setUzytusuario_id(usuario.getUzytusuario_id());
dtoUsuarioConPerfiles.setUzytusuario_nombres(usuario.getUzytusuario_nombres());
dtoUsuarioConPerfiles.setPerfiles(perfilesDto);
return dtoUsuarioConPerfiles;
} catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
......@@ -249,4 +242,23 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario {
}
}
@Override
public Set<DtoUzyTPerfil> findPerfilesByUsuarioId(Long uzytusuario_id) {
try {
if (uzytusuario_id == null || uzytusuario_id <= 0) {
throw new IllegalArgumentException("El ID debe ser válido y mayor que cero.");
}
Set<ModelUzyTPerfil> perfiles = daoUzyTUsuario.findPerfilesByUsuarioId(uzytusuario_id);
if (perfiles.isEmpty()) { // cuando la colección de perfiles es nula
throw new ResourceNotFoundException("No se encontraron perfiles de usuario para el ID: " + uzytusuario_id);
}
return mapperPerfil.entitiesToDtosSet(perfiles);
} catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) {
throw new RuntimeException("Error al buscar perfiles de usuario: " + ex.getMessage());
}
}
}
package ec.edu.espe.movilidad.MovilidadWS.Dao;
import static org.junit.jupiter.api.Assertions.*;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Set;
@SpringBootTest
class DaoUzyTUsuarioTests {
@Autowired
private DaoUzyTUsuario daoUzyTUsuario;
@BeforeEach
void setUp() {
}
@DisplayName("Test buscar un usuario")
@Test
void testfindByUsuario() {
String usuarioBuscado = "JOEL";
List<ModelUzyTUsuario> result = daoUzyTUsuario.findByUsuario(usuarioBuscado);
// Verificar que el resultado no esté vacío
assertFalse(result.isEmpty());
// Verificar que el nombre o apellido del usuario coincida con el usuario buscado
for (ModelUzyTUsuario usuario : result) {
assertTrue(usuario.getUzytusuario_nombres().toLowerCase().contains(usuarioBuscado.toLowerCase())
|| usuario.getUzytusuario_apellidos().toLowerCase().contains(usuarioBuscado.toLowerCase()));
}
}
@DisplayName("Test buscar un usuario por el email institucional")
@Test
void testfindByEmail() {
String usuarioEmailBuscado = "jamolina13@espe.edu.ec";
ModelUzyTUsuario result = daoUzyTUsuario.findByEmail(usuarioEmailBuscado);
// Verificar que el resultado no sea nulo
assertNotNull(result);
// Verificar que el email del usuario coincida con el email buscado
assertEquals(usuarioEmailBuscado, result.getUzytusuario_email_institucional());
}
@DisplayName("Test buscar un los perfiles asignados al usuario")
@Test
void testfindPerfilesByUsuarioId() {
Long usuarioID = 7L;
Set<ModelUzyTPerfil> result = daoUzyTUsuario.findPerfilesByUsuarioId(usuarioID);
// Verificar que el resultado no sea nulo y no este vacío
assertNotNull(result);
assertFalse(result.isEmpty());
String nombrePerfilBuscado = "Director de Programa";
boolean perfilEncontrado = result.stream()
.anyMatch(perfil -> nombrePerfilBuscado.equalsIgnoreCase(perfil.getUzytperfil_nombre()));
assertTrue(perfilEncontrado);
}
}
package ec.edu.espe.movilidad.MovilidadWS.Service;
import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException;
import ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTPerfilMapper;
import ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTUsuarioMapper;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario.ServiceUzyTUsuario;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
......@@ -44,6 +45,7 @@ class ServiceUzyTUsuarioTests {
serviceUzyTUsuario = new ServiceUzyTUsuario(daoUzyTUsuario, daoUzyTPerfil, mapper, mapperPerfil);
}
//LISTAR USUARIO POR ID
@DisplayName("Test para listar a los usuarios por el ID")
@Test
void testListarPorID() {
......@@ -71,13 +73,16 @@ class ServiceUzyTUsuarioTests {
@Test
void testListarPorID_CasoError_UsuarioNoEncontrado() {
Long id = 1L;
when(daoUzyTUsuario.findById(id)).thenReturn(Optional.empty());
when(daoUzyTUsuario.findById(id)).thenReturn(Optional.empty()); // se devulve vacío
assertThrows(ResourceNotFoundException.class, () -> serviceUzyTUsuario.ListarPorID(id));
}
//LISTAR REGISTROS
@DisplayName("Test para listar todos los usuarios existentes (Caso exitoso)")
@Test
void testListarRegistros_CasoExitoso() {
List<ModelUzyTUsuario> usuarios = Arrays.asList(new ModelUzyTUsuario(), new ModelUzyTUsuario());
DtoUzyTUsuario dtoUsuario = new DtoUzyTUsuario();
......@@ -112,10 +117,12 @@ class ServiceUzyTUsuarioTests {
}
//BUSCAR USUARIOS
@DisplayName("Test para buscar usuarios por nombre (Caso exitoso)")
@Test
void testFindByUsuario_CasoExitoso() {
String usuario = "example";
String usuario = "Joel";
ModelUzyTUsuario modelUzyTUsuario = new ModelUzyTUsuario();
DtoUzyTUsuario dtoUzyTUsuario = new DtoUzyTUsuario();
......@@ -145,6 +152,8 @@ class ServiceUzyTUsuarioTests {
assertThrows(ResourceNotFoundException.class, () -> serviceUzyTUsuario.findByUsuario(usuario));
}
//GUARDAR USUARIO
@DisplayName("Test para guardar un nuevo usuario correctamente (Caso exitoso)")
@Test
void testGuardar_CasoExitoso() throws Exception {
......@@ -223,6 +232,7 @@ class ServiceUzyTUsuarioTests {
}
//EDITAR USUARIO
@DisplayName("Test para editar un usuario - ID negativo (Caso de error)")
@Test
void testEditar_IdNegativo() {
......@@ -242,14 +252,14 @@ class ServiceUzyTUsuarioTests {
Long id = 1L;
DtoUzyTUsuario dtoUzyTUsuario = new DtoUzyTUsuario();
dtoUzyTUsuario.setUzytusuario_id(id);
dtoUzyTUsuario.setUzytusuario_nombres("NuevoNombre");
dtoUzyTUsuario.setUzytusuario_apellidos("ape");
dtoUzyTUsuario.setUzytusuario_nombres("Nuevo Nombre");
dtoUzyTUsuario.setUzytusuario_apellidos("Nuevo Apellido");
// Obtener el usuario existente a través del ID
ModelUzyTUsuario usuarioExistente = new ModelUzyTUsuario();
usuarioExistente.setUzytusuario_id(id);
usuarioExistente.setUzytusuario_nombres("f");
usuarioExistente.setUzytusuario_apellidos("s");
usuarioExistente.setUzytusuario_nombres("Nombre U");
usuarioExistente.setUzytusuario_apellidos("Apellido U");
// Configurar el comportamiento esperado del método findById del daoUzyTUsuario
when(daoUzyTUsuario.findById(id)).thenReturn(Optional.of(usuarioExistente));
......@@ -280,6 +290,7 @@ class ServiceUzyTUsuarioTests {
verify(mapper).entityToDto(usuarioExistente);
}
//ELIMINAR USUARIO
@Test
void testEliminar_CasoExitoso() {
// Datos del usuario a simular
......@@ -328,10 +339,37 @@ class ServiceUzyTUsuarioTests {
verify(daoUzyTUsuario, times(1)).findById(id);
}
//ASIGNAR PERFIL USUARIO
@Test
void testAsignarPerfilAUsuario_PerfilYaAsignado() {
Long uzytusuario_id = 1L;
Long uzytperfil_id = 2L;
ModelUzyTUsuario usuario = new ModelUzyTUsuario();
usuario.setUzytusuario_id(uzytusuario_id);
usuario.setUzytusuario_nombres("Usuario de Prueba");
ModelUzyTPerfil perfil = new ModelUzyTPerfil();
perfil.setUzytperfil_id(uzytperfil_id);
perfil.setUzytperfil_nombre("Perfil de Prueba");
usuario.getUzytperfils().add(perfil);
when(daoUzyTUsuario.findById(uzytusuario_id)).thenReturn(Optional.of(usuario));
when(daoUzyTPerfil.findById(uzytperfil_id)).thenReturn(Optional.of(perfil));
// Se ejecuta el método a probar y verifica que se lanza la excepción
Assertions.assertThrows(IllegalArgumentException.class, () -> serviceUzyTUsuario.asignarPerfilAUsuario(uzytusuario_id, uzytperfil_id));
// Verifica que el perfil no se agregó nuevamente al usuario
Assertions.assertEquals(1, usuario.getUzytperfils().size());
}
@DisplayName("Test para asignar un perfil a un usuario - Usuario o Perfil no existen (Caso de error)")
@Test
void testAsignarPerfilAUsuario_UsuarioOPerfilNoExiste() {
// Datos de usuario y perfil a simular (IDs inválidos)
// Datos de usuario y perfil a simular (ID inválidos)
Long usuarioId = 1L;
Long perfilId = 1L;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment