Se agrega el ServiceUzyTUsuarioTests para el servicio de ServiceUzyTUsuario,…

Se agrega el ServiceUzyTUsuarioTests para el servicio de ServiceUzyTUsuario, además se agrega el manejo de excepciones en el ServiceUzyTUsuario, por lo que se agrega la clase de GlobalExceptionHandler
parent e2642237
......@@ -39,9 +39,10 @@ dependencies {
compileOnly 'org.projectlombok:lombok' // Dependencia para generar automáticamente código repetitivo en Java
runtimeOnly 'com.oracle.database.jdbc:ojdbc8' // Dependencia para el controlador JDBC de Oracle
annotationProcessor 'org.projectlombok:lombok' // Procesador de anotaciones para Lombok
testImplementation 'org.springframework.boot:spring-boot-starter-test' // Dependencia para pruebas unitarias en Spring Boot
// Dependencia para pruebas unitarias en Spring Boot
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
testImplementation 'org.mockito:mockito-core:3.12.4'
}
tasks.named('test') {
......
......@@ -7,6 +7,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Set;
......@@ -29,7 +30,7 @@ public class UzyTUsuarioController {
@GetMapping("/exampleFindId/{id}")
public ResponseEntity<DtoUzyTUsuario> ListarPorID(@PathVariable Long id) {
return new ResponseEntity<>(serviceUzyTUsuario.ListarPorID(id), HttpStatus.OK);
return ResponseEntity.ok(serviceUzyTUsuario.ListarPorID(id));
}
@GetMapping("/getAll")
......@@ -44,25 +45,30 @@ public class UzyTUsuarioController {
}
@PostMapping("/asignar_perfil/{uzytusuario_id}/{uzytperfil_id}")
public void asignarPerfilAUsuario(@PathVariable("uzytusuario_id") Long uzytusuario_id,
@PathVariable("uzytperfil_id") Long uzytperfil_id) {
serviceUzyTUsuario.asignarPerfilAUsuario(uzytusuario_id, uzytperfil_id);
public ResponseEntity<DtoUzyTUsuario> asignarPerfilAUsuario(
@PathVariable("uzytusuario_id") Long uzytusuario_id,
@PathVariable("uzytperfil_id") Long uzytperfil_id) {
DtoUzyTUsuario usuarioAsignado = serviceUzyTUsuario.asignarPerfilAUsuario(uzytusuario_id, uzytperfil_id);
if (usuarioAsignado != null) {
return new ResponseEntity<>(usuarioAsignado, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
@GetMapping("/buscarUsuario")
public ResponseEntity<List<DtoUzyTUsuario>> buscarUsuarios(@RequestParam(required = false) String usuario) {
List<DtoUzyTUsuario> usuarios = serviceUzyTUsuario.findByUsuario(usuario);
return ResponseEntity.ok(usuarios);
return new ResponseEntity<>(serviceUzyTUsuario.findByUsuario(usuario), HttpStatus.OK);
}
@PostMapping("/guardar")
public ResponseEntity<DtoUzyTUsuario> guardar(@RequestBody DtoUzyTUsuario dtoUzyTUsuario) {
public ResponseEntity<DtoUzyTUsuario> guardar( @Valid @RequestBody DtoUzyTUsuario dtoUzyTUsuario) throws Exception {
return new ResponseEntity<>(serviceUzyTUsuario.guardar(dtoUzyTUsuario), HttpStatus.OK);
}
@PutMapping("/editar/{id}")
public ResponseEntity<DtoUzyTUsuario> editar(@PathVariable Long id, @RequestBody DtoUzyTUsuario dtoUzyTUsuario) {
public ResponseEntity<DtoUzyTUsuario> editar(@PathVariable Long id, @Valid @RequestBody DtoUzyTUsuario dtoUzyTUsuario) {
return new ResponseEntity<>(serviceUzyTUsuario.editar(id, dtoUzyTUsuario), HttpStatus.OK);
}
......
package ec.edu.espe.movilidad.MovilidadWS.Exceptions.Configuration;
import ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.NoSuchElementException;
//Clase para capturar y manejar globalmente las excepciones producidas
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
@ExceptionHandler(NoSuchElementException.class)
public ResponseEntity<String> handleNoSuchElementException(NoSuchElementException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleRuntimeException(RuntimeException ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage());
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGenericException(Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Ha ocurrido un error inesperado -> "+ ex.getMessage());
}
}
package ec.edu.espe.movilidad.MovilidadWS.Exceptions;
import org.springframework.http.HttpStatus;
public class Error extends RuntimeException{
private HttpStatus estado;
private String mensaje;
public Error(HttpStatus estado, String mensaje) {
super();
this.estado = estado;
this.mensaje = mensaje;
}
public Error(HttpStatus estado, String mensaje, String mensaje1) {
super();
this.estado = estado;
this.mensaje = mensaje;
this.mensaje = mensaje1;
}
public HttpStatus getEstado() {
return estado;
}
public void setEstado(HttpStatus estado) {
this.estado = estado;
}
public String getMensaje() {
return mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
}
......@@ -3,39 +3,9 @@ package ec.edu.espe.movilidad.MovilidadWS.Exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(value = HttpStatus.NOT_FOUND) //cuando no se encuentre un registro
public class ResourceNotFoundException extends RuntimeException{
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) // error interno del servidor
public static class InternalServerErrorException extends RuntimeException {
public InternalServerErrorException(String message) {
super(message);
}
}
@ResponseStatus(value = HttpStatus.UNAUTHORIZED) // no autorizado
public static class UnauthorizedException extends RuntimeException {
public UnauthorizedException(String message) {
super(message);
}
}
@ResponseStatus(value = HttpStatus.BAD_REQUEST) // solicitud incorrecta
public static class ValidationException extends RuntimeException {
public ValidationException(String message) {
super(message);
}
}
@ResponseStatus(value = HttpStatus.NOT_FOUND) // acceso a datos incorrecto
public static class DataAccessException extends RuntimeException {
public DataAccessException(String message) {
super(message);
}
}
}
......@@ -3,6 +3,7 @@ package ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTUsuario;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
......@@ -10,11 +11,10 @@ import java.util.stream.Collectors;
@Component
public class UzyTUsuarioMapper {
private final ModelMapper modelMapper;
@Autowired
private ModelMapper modelMapper;
public UzyTUsuarioMapper(ModelMapper modelMapper) {
this.modelMapper = modelMapper;
}
public DtoUzyTUsuario entityToDto(ModelUzyTUsuario entity) {
return modelMapper.map(entity, DtoUzyTUsuario.class);
......
......@@ -49,7 +49,6 @@ public class UzyTavProgObjEstartegicoMapper {
ModelUzyTavProyec proyec = entityManager.find(ModelUzyTavProyec.class, proyectoID);
entity.setUzytavproyec(proyec);
}
return entity;
}
}
......@@ -31,7 +31,7 @@ public class ModelUzyTUsuario {
@Column(name = "uzytusuario_nombres")
private String uzytusuario_nombres;
@Column(name = "uzytusuario_apellidos")
@Column(name = "uzytusuario_apellidos", nullable = false)
private String uzytusuario_apellidos;
@Column(name = "uzytusuario_email")
......
......@@ -10,16 +10,16 @@ public interface IServiceUzyTUsuario {
DtoUzyTUsuario ListarPorID(Long id);
List<DtoUzyTUsuario> ListarRegistros();
List<DtoUzyTUsuario> ListarRegistros() ;
List<DtoUzyTUsuario> findByUsuario(String usuario);
DtoUzyTUsuario guardar(DtoUzyTUsuario dtoUzyTUsuario);
DtoUzyTUsuario guardar(DtoUzyTUsuario dtoUzyTUsuario) throws Exception;
DtoUzyTUsuario editar( Long id, DtoUzyTUsuario dtoUzyTUsuario);
Set<DtoUzyTPerfil> findPerfilesByUsuarioId(Long uzytusuario_id);
void asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id);
DtoUzyTUsuario asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id);
boolean eliminar(Long id);
}
......@@ -4,19 +4,20 @@ import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
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 org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException;
@Service
public class ServiceUzyTUsuario implements IServiceUzyTUsuario{
public class ServiceUzyTUsuario implements IServiceUzyTUsuario {
private final DaoUzyTUsuario daoUzyTUsuario;
......@@ -35,102 +36,167 @@ public class ServiceUzyTUsuario implements IServiceUzyTUsuario{
@Override
public DtoUzyTUsuario ListarPorID(Long id) {
ModelUzyTUsuario entity = daoUzyTUsuario.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("No se encontró el registro con ID: " + id));
return mapper.entityToDto(entity);
try {
if (id <= 0) {
throw new IllegalArgumentException("El parámetro 'id' debe ser un valor positivo.");
}
ModelUzyTUsuario entity = daoUzyTUsuario.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado con ID: " + id));
return mapper.entityToDto(entity);
} catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) { // Manejo de cualquier error en el servidor
throw new RuntimeException("Error al buscar usuario con ID: " + id);
}
}
@Override
public List<DtoUzyTUsuario> ListarRegistros() {
List<ModelUzyTUsuario> entities = daoUzyTUsuario.findAll();
return mapper.entitiesToDtos(entities);
try {
List<ModelUzyTUsuario> entities = daoUzyTUsuario.findAll();
return mapper.entitiesToDtos(entities);
} catch (Exception ex) {
throw new RuntimeException("Error al listar registros de usuarios: " + ex.getMessage());
}
}
@Override
public List<DtoUzyTUsuario> findByUsuario(String usuario) {
if (usuario != null) {
// Buscar por cualquier letra en nombres o apellidos
List<ModelUzyTUsuario> entities = daoUzyTUsuario.findByUsuario(usuario);
return mapper.entitiesToDtos(entities);
if (usuario != null && !usuario.isEmpty()) {
try {
// Buscar por cualquier letra en nombres o apellidos
List<ModelUzyTUsuario> entities = daoUzyTUsuario.findByUsuario(usuario);
if (entities.isEmpty()) {
throw new ResourceNotFoundException("No se encontraron usuarios con el nombre proporcionado.");
}
return mapper.entitiesToDtos(entities);
} catch (ResourceNotFoundException ex) {
throw ex;
} catch (Exception ex) {
throw new RuntimeException("Error al buscar usuarios por nombre: " + ex.getMessage());
}
} else {
// No se proporcionaron parámetros de búsqueda válidos
return Collections.emptyList();
throw new IllegalArgumentException("Parámetro de búsqueda inválido: el usuario no puede ser nulo o vacío.");
}
}
@Override
public DtoUzyTUsuario guardar(DtoUzyTUsuario dtoUzyTUsuario) {
ModelUzyTUsuario entity = mapper.dtoToEntity(dtoUzyTUsuario);
ModelUzyTUsuario nuevoEntity = daoUzyTUsuario.save(entity);
return mapper.entityToDto(nuevoEntity);
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 editar(Long id, DtoUzyTUsuario dtoUzyTUsuario) {
public DtoUzyTUsuario guardar(DtoUzyTUsuario dtoUzyTUsuario) throws Exception {
try {
ModelUzyTUsuario entity = daoUzyTUsuario.findById(id).get();
if (entity != null) {
entity.setUzytusuario_cc(dtoUzyTUsuario.getUzytusuario_cc());
entity.setUzytusuario_clave(dtoUzyTUsuario.getUzytusuario_clave());
entity.setUzytusuario_nombres(dtoUzyTUsuario.getUzytusuario_nombres());
entity.setUzytusuario_apellidos(dtoUzyTUsuario.getUzytusuario_apellidos());
entity.setUzytusuario_email(dtoUzyTUsuario.getUzytusuario_email());
entity.setFechaRegistro(dtoUzyTUsuario.getUzytusuario_fecharegistro());
entity.setUzytusuario_estado(dtoUzyTUsuario.getUzytusuario_estado());
entity.setUzytusuario_mail_incompletos(dtoUzyTUsuario.getUzytusuario_mail_incompletos());
entity.setUzytusuario_tipo_doc(dtoUzyTUsuario.getUzytusuario_tipo_doc());
entity.setUzytusuario_cod_senescyt(dtoUzyTUsuario.getUzytusuario_cod_senescyt());
entity.setUzytusuario_fecha_act_micuenta(dtoUzyTUsuario.getUzytusuario_fecha_act_micuenta());
entity.setUzytusuario_hexadecimalid(dtoUzyTUsuario.getUzytusuario_hexadecimalid());
entity.setUzytusuario_tratamiento(dtoUzyTUsuario.getUzytusuario_tratamiento());
entity.setUzytusuario_modificacion(dtoUzyTUsuario.getUzytusuario_modificacion());
entity.setUzytusuario_tipo_user(dtoUzyTUsuario.getUzytusuario_tipo_user());
entity.setUzytusuario_email_institucional(dtoUzyTUsuario.getUzytusuario_email_institucional());
entity.setUzytusuario_telefono_fijo(dtoUzyTUsuario.getUzytusuario_telefono_fijo());
entity.setUzytusuario_telefono_celular(dtoUzyTUsuario.getUzytusuario_telefono_celular());
entity.setSpriden_id(dtoUzyTUsuario.getSpriden_id());
entity.setSpriden_pidm(dtoUzyTUsuario.getSpriden_pidm());
entity.setUzytusuario_clave_tmp(dtoUzyTUsuario.getUzytusuario_clave_tmp());
entity.setSpbpers_name_prefix(dtoUzyTUsuario.getSpbpers_name_prefix());
entity.setSpbpers_sex(dtoUzyTUsuario.getSpbpers_sex());
ModelUzyTUsuario updatedEntity = daoUzyTUsuario.save(entity);
return mapper.entityToDto(updatedEntity);
}else {
throw new ResourceNotFoundException("No se encontró el registro con ID: " + id);
if (dtoUzyTUsuario.getUzytusuario_apellidos() == null) {
throw new IllegalArgumentException("El apellido del usuario no puede ser nulo.");
}
} catch (Exception e) {
throw new ResourceNotFoundException("Error al editar el registro: " + e.getMessage());
ModelUzyTUsuario entity = mapper.dtoToEntity(dtoUzyTUsuario);
ModelUzyTUsuario nuevoEntity = daoUzyTUsuario.save(entity);
return mapper.entityToDto(nuevoEntity);
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Argumentos ilegales-> " + ex.getMessage());
} catch (Exception ex) {
throw new Exception("Error al guardar el usuario: " + ex.getMessage());
}
}
@Override
public Set<DtoUzyTPerfil> findPerfilesByUsuarioId(Long uzytusuario_id) {
Set<ModelUzyTPerfil> perfiles = daoUzyTUsuario.findPerfilesByUsuarioId(uzytusuario_id);
return mapperPerfil.entitiesToDtosSet(perfiles);
public DtoUzyTUsuario editar(Long id, DtoUzyTUsuario dtoUzyTUsuario) {
try {
if (id == null || id <= 0) {
throw new IllegalArgumentException("El ID del usuario debe ser válido y mayor que cero.");
}
ModelUzyTUsuario entity = daoUzyTUsuario.findById(id).orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado con ID: " + id));
//Operador ternario -> variable = condicion ? valorSiTrue : valorSiFalse;
entity.setUzytusuario_cc(dtoUzyTUsuario.getUzytusuario_cc() != null ? dtoUzyTUsuario.getUzytusuario_cc() : entity.getUzytusuario_cc());
entity.setUzytusuario_clave(dtoUzyTUsuario.getUzytusuario_clave() != null ? dtoUzyTUsuario.getUzytusuario_clave() : entity.getUzytusuario_clave());
entity.setUzytusuario_nombres(dtoUzyTUsuario.getUzytusuario_nombres() != null ? dtoUzyTUsuario.getUzytusuario_nombres() : entity.getUzytusuario_nombres());
entity.setUzytusuario_apellidos(dtoUzyTUsuario.getUzytusuario_apellidos() != null ? dtoUzyTUsuario.getUzytusuario_apellidos() : entity.getUzytusuario_apellidos());
entity.setUzytusuario_email(dtoUzyTUsuario.getUzytusuario_email() != null ? dtoUzyTUsuario.getUzytusuario_email() : entity.getUzytusuario_email());
entity.setFechaRegistro(dtoUzyTUsuario.getUzytusuario_fecharegistro() != null ? dtoUzyTUsuario.getUzytusuario_fecharegistro() : entity.getFechaRegistro());
entity.setUzytusuario_estado(dtoUzyTUsuario.getUzytusuario_estado() != null ? dtoUzyTUsuario.getUzytusuario_estado() : entity.getUzytusuario_estado());
entity.setUzytusuario_mail_incompletos(dtoUzyTUsuario.getUzytusuario_mail_incompletos() != null ? dtoUzyTUsuario.getUzytusuario_mail_incompletos() : entity.getUzytusuario_mail_incompletos());
entity.setUzytusuario_tipo_doc(dtoUzyTUsuario.getUzytusuario_tipo_doc() != null ? dtoUzyTUsuario.getUzytusuario_tipo_doc() : entity.getUzytusuario_tipo_doc());
entity.setUzytusuario_cod_senescyt(dtoUzyTUsuario.getUzytusuario_cod_senescyt() != null ? dtoUzyTUsuario.getUzytusuario_cod_senescyt() : entity.getUzytusuario_cod_senescyt());
entity.setUzytusuario_fecha_act_micuenta(dtoUzyTUsuario.getUzytusuario_fecha_act_micuenta() != null ? dtoUzyTUsuario.getUzytusuario_fecha_act_micuenta() : entity.getUzytusuario_fecha_act_micuenta());
entity.setUzytusuario_hexadecimalid(dtoUzyTUsuario.getUzytusuario_hexadecimalid() != null ? dtoUzyTUsuario.getUzytusuario_hexadecimalid() : entity.getUzytusuario_hexadecimalid());
entity.setUzytusuario_tratamiento(dtoUzyTUsuario.getUzytusuario_tratamiento() != null ? dtoUzyTUsuario.getUzytusuario_tratamiento() : entity.getUzytusuario_tratamiento());
entity.setUzytusuario_modificacion(dtoUzyTUsuario.getUzytusuario_modificacion() != null ? dtoUzyTUsuario.getUzytusuario_modificacion() : entity.getUzytusuario_modificacion());
entity.setUzytusuario_tipo_user(dtoUzyTUsuario.getUzytusuario_tipo_user() != null ? dtoUzyTUsuario.getUzytusuario_tipo_user() : entity.getUzytusuario_tipo_user());
entity.setUzytusuario_email_institucional(dtoUzyTUsuario.getUzytusuario_email_institucional() != null ? dtoUzyTUsuario.getUzytusuario_email_institucional() : entity.getUzytusuario_email_institucional());
entity.setUzytusuario_telefono_fijo(dtoUzyTUsuario.getUzytusuario_telefono_fijo() != null ? dtoUzyTUsuario.getUzytusuario_telefono_fijo() : entity.getUzytusuario_telefono_fijo());
entity.setUzytusuario_telefono_celular(dtoUzyTUsuario.getUzytusuario_telefono_celular() != null ? dtoUzyTUsuario.getUzytusuario_telefono_celular() : entity.getUzytusuario_telefono_celular());
entity.setSpriden_id(dtoUzyTUsuario.getSpriden_id() != null ? dtoUzyTUsuario.getSpriden_id() : entity.getSpriden_id());
entity.setSpriden_pidm(dtoUzyTUsuario.getSpriden_pidm() != null ? dtoUzyTUsuario.getSpriden_pidm() : entity.getSpriden_pidm());
entity.setUzytusuario_clave_tmp(dtoUzyTUsuario.getUzytusuario_clave_tmp() != null ? dtoUzyTUsuario.getUzytusuario_clave_tmp() : entity.getUzytusuario_clave_tmp());
entity.setSpbpers_name_prefix(dtoUzyTUsuario.getSpbpers_name_prefix() != null ? dtoUzyTUsuario.getSpbpers_name_prefix() : entity.getSpbpers_name_prefix());
entity.setSpbpers_sex(dtoUzyTUsuario.getSpbpers_sex() != null ? dtoUzyTUsuario.getSpbpers_sex() : entity.getSpbpers_sex());
ModelUzyTUsuario updatedEntity = daoUzyTUsuario.save(entity);
return mapper.entityToDto(updatedEntity);
} catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) {
throw new RuntimeException("Error al editar el usuario -> " + ex.getMessage());
}
}
@Override
public boolean eliminar(Long id) {
ModelUzyTUsuario entity = daoUzyTUsuario.findById(id).orElse(null);
if (entity != null) {
daoUzyTUsuario.delete(entity);
return true;
try {
if (id == null || id <= 0) {
throw new IllegalArgumentException("El ID del usuario debe ser válido y mayor que cero.");
}
ModelUzyTUsuario entity = daoUzyTUsuario.findById(id).orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado con ID: " + id));
if (entity != null) {
daoUzyTUsuario.delete(entity);
return true;
}
return false;
}catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
}
catch (Exception ex) {
throw new RuntimeException("Error al eliminar el usuario: " + ex.getMessage());
}
return false;
}
@Override
public void asignarPerfilAUsuario(Long uzytusuario_id, Long uzytperfil_id) {
// Obtengo el usuario y perfil buscandolos por el ID
ModelUzyTUsuario usuario = daoUzyTUsuario.findById(uzytusuario_id).get();
ModelUzyTPerfil perfil = daoUzyTPerfil.findById(uzytperfil_id).get();
// Aquí asigno el perfil al usuario
usuario.getUzytperfils().add(perfil);
daoUzyTUsuario.save(usuario);
public DtoUzyTUsuario 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.");
}
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));
// Aquí asigno el perfil al usuario
usuario.getUzytperfils().add(perfil);
ModelUzyTUsuario usuarioAsignado = daoUzyTUsuario.save(usuario);
// Convertir el modelo a DTO y devolverlo
return mapper.entityToDto(usuarioAsignado);
} catch (ResourceNotFoundException | IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) {
throw new RuntimeException("Error al asignar perfil al usuario: " + ex.getMessage());
}
}
}
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.DtoUzyTPerfil;
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.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.*;
import static org.hibernate.validator.internal.util.Contracts.assertNotNull;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class ServiceUzyTUsuarioTests {
@Mock
private DaoUzyTUsuario daoUzyTUsuario;
@Mock
private DaoUzyTPerfil daoUzyTPerfil;
@Mock
private UzyTUsuarioMapper mapper;
@Mock
private UzyTPerfilMapper mapperPerfil;
@InjectMocks
private ServiceUzyTUsuario serviceUzyTUsuario;
@DisplayName("Test para listar a los usuarios por el ID")
@Test
void testListarPorID() {
Long id = 1L;
ModelUzyTUsuario usuario = new ModelUzyTUsuario();
DtoUzyTUsuario dtoUsuario = new DtoUzyTUsuario();
dtoUsuario.setUzytusuario_id(id);
when(daoUzyTUsuario.findById(id)).thenReturn(Optional.of(usuario));
when(mapper.entityToDto(usuario)).thenReturn(dtoUsuario);
DtoUzyTUsuario result = serviceUzyTUsuario.ListarPorID(id);
assertEquals(id, result.getUzytusuario_id());
}
@DisplayName("Test para listar a los registros del usuario")
@Test
void testListarRegistros() {
List<ModelUzyTUsuario> usuarios = Collections.singletonList(new ModelUzyTUsuario());
DtoUzyTUsuario dtoUsuario = new DtoUzyTUsuario();
when(daoUzyTUsuario.findAll()).thenReturn(usuarios);
when(mapper.entitiesToDtos(usuarios)).thenReturn(Collections.singletonList(dtoUsuario));
List<DtoUzyTUsuario> result = serviceUzyTUsuario.ListarRegistros();
assertEquals(1, result.size());
assertEquals(dtoUsuario, result.get(0));
}
@DisplayName("Test para buscar un usuario")
@Test
void testFindByUsuario() {
String usuario = "example";
ModelUzyTUsuario modelUzyTUsuario = new ModelUzyTUsuario();
DtoUzyTUsuario dtoUzyTUsuario = new DtoUzyTUsuario();
when(daoUzyTUsuario.findByUsuario(usuario)).thenReturn(Collections.singletonList(modelUzyTUsuario));
when(mapper.entitiesToDtos(Collections.singletonList(modelUzyTUsuario))).thenReturn(Collections.singletonList(dtoUzyTUsuario));
List<DtoUzyTUsuario> result = serviceUzyTUsuario.findByUsuario(usuario);
assertEquals(1, result.size());
assertEquals(dtoUzyTUsuario, result.get(0));
}
@DisplayName("Test para buscar cuando son parametos incorrectos")
@Test
void testFindByUsuario_ResultadosVacios() {
String usuario = null; // Simular que no se proporcionaron parámetros válidos
// Ejecutar el método a probar
List<DtoUzyTUsuario> result = serviceUzyTUsuario.findByUsuario(usuario);
// Verificar que el resultado es una lista vacía
assertNotNull(result);
assertTrue(result.isEmpty());
}
@DisplayName("Test para buscar guardar un usuario")
@Test
void testGuardar() throws Exception {
// Datos del usuario a simular
DtoUzyTUsuario dtoUzyTUsuario = new DtoUzyTUsuario();
dtoUzyTUsuario.setUzytusuario_nombres("NombreUsuario");
dtoUzyTUsuario.setUzytusuario_apellidos("ApellidosUsuario");
dtoUzyTUsuario.setUzytusuario_email("usuario@example.com");
// Convertir el objeto DtoUzyTUsuario a ModelUzyTUsuario
ModelUzyTUsuario modelUzyTUsuario = new ModelUzyTUsuario();
modelUzyTUsuario.setUzytusuario_nombres(dtoUzyTUsuario.getUzytusuario_nombres());
modelUzyTUsuario.setUzytusuario_apellidos(dtoUzyTUsuario.getUzytusuario_apellidos());
modelUzyTUsuario.setUzytusuario_email(dtoUzyTUsuario.getUzytusuario_email());
// Configurar el comportamiento esperado del mapper y el daoUzyTUsuario
when(mapper.dtoToEntity(dtoUzyTUsuario)).thenReturn(modelUzyTUsuario);
when(daoUzyTUsuario.save(modelUzyTUsuario)).thenReturn(modelUzyTUsuario);
when(mapper.entityToDto(modelUzyTUsuario)).thenReturn(dtoUzyTUsuario);
// Ejecutar el método a probar
DtoUzyTUsuario result = serviceUzyTUsuario.guardar(dtoUzyTUsuario);
// Verificar el resultado
assertNotNull(result);
assertEquals(dtoUzyTUsuario, result);
}
@DisplayName("Test para editar un usuario inexistente")
@Test
void testEditar_IdNoExistente() {
// Configuración de prueba
Long id = 1L;
DtoUzyTUsuario dtoUzyTUsuario = new DtoUzyTUsuario();
dtoUzyTUsuario.setUzytusuario_nombres("NuevoNombre");
// Simular el comportamiento del método findById con un Optional vacío
when(daoUzyTUsuario.findById(id)).thenReturn(Optional.empty());
// Ejecutar el método a probar y verificar que se lance la excepción
assertThrows(ResourceNotFoundException.class, () -> serviceUzyTUsuario.editar(id, dtoUzyTUsuario));
}
@DisplayName("Test para asignar un perfil a un usuario")
@Test
void testAsignarPerfilAUsuario() {
Long usuarioId = 1L;
Long perfilId = 1L;
ModelUzyTUsuario usuario = new ModelUzyTUsuario();
ModelUzyTPerfil perfil = new ModelUzyTPerfil();
when(daoUzyTUsuario.findById(usuarioId)).thenReturn(Optional.of(usuario));
when(daoUzyTPerfil.findById(perfilId)).thenReturn(Optional.of(perfil));
when(daoUzyTUsuario.save(usuario)).thenReturn(usuario);
serviceUzyTUsuario.asignarPerfilAUsuario(usuarioId, perfilId);
assertTrue(usuario.getUzytperfils().contains(perfil));
// Prueba de error cuando no se encuentra el usuario por su ID
when(daoUzyTUsuario.findById(usuarioId)).thenReturn(Optional.empty());
try {
serviceUzyTUsuario.asignarPerfilAUsuario(usuarioId, perfilId);
fail("Debería haber lanzado una ResourceNotFoundException");
} catch (ResourceNotFoundException ex) {
assertEquals("No se encontró el usuario con ID: " + usuarioId, ex.getMessage());
}
}
@DisplayName("Test buscar los perfiles de un usuario")
@Test
void testFindPerfilesByUsuarioId() {
// Prueba exitosa de encontrar perfiles por ID de usuario
Long usuarioId = 1L;
ModelUzyTPerfil modelUzyTPerfil = new ModelUzyTPerfil();
modelUzyTPerfil.setUzytperfil_id(1L);
Set<ModelUzyTPerfil> perfiles = new HashSet<>();
perfiles.add(modelUzyTPerfil);
when(daoUzyTUsuario.findPerfilesByUsuarioId(usuarioId)).thenReturn(perfiles);
when(mapperPerfil.entitiesToDtosSet(perfiles)).thenReturn(Collections.singleton(new DtoUzyTPerfil()));
Set<DtoUzyTPerfil> result = serviceUzyTUsuario.findPerfilesByUsuarioId(usuarioId);
assertNotNull(result);
assertEquals(1, result.size());
}
@DisplayName("Test buscar eliminar un usuario")
@Test
void testEliminar() {
// Prueba exitosa de eliminar un usuario
Long id = 1L;
ModelUzyTUsuario modelUzyTUsuario = new ModelUzyTUsuario();
when(daoUzyTUsuario.findById(id)).thenReturn(Optional.of(modelUzyTUsuario));
boolean result = serviceUzyTUsuario.eliminar(id);
assertTrue(result);
}
}
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