Modificaciones para funcionamiento de tests

parent c9bfc1e0
...@@ -44,11 +44,18 @@ public class Reserva { ...@@ -44,11 +44,18 @@ public class Reserva {
@Transient @Transient
ServicioCarPooling sistema; ServicioCarPooling sistema;
@Transient
private String origen;
@Transient
private String destino;
public Reserva(){ public Reserva(){
this.pasajeros = new ArrayList<String>(); this.pasajeros = new ArrayList<String>();
} }
public Reserva(Usuario conductor, String origen, String destino, Date fechaSalida, int nAsientos, int precioAsiento) { public Reserva(Usuario conductor, String origen, String destino, Date fechaSalida, int nAsientos, int precioAsiento) {
this.conductor = conductor; this.conductor = conductor;
this.origen = origen;
this.destino = destino;
this.idReserva = ++incrementaReserva; this.idReserva = ++incrementaReserva;
this.numPasajeros = nAsientos; this.numPasajeros = nAsientos;
this.viaje = new Viaje(origen, destino, fechaSalida, nAsientos, precioAsiento, this.idReserva); this.viaje = new Viaje(origen, destino, fechaSalida, nAsientos, precioAsiento, this.idReserva);
...@@ -59,6 +66,17 @@ public class Reserva { ...@@ -59,6 +66,17 @@ public class Reserva {
this.reservaConcluida = false; this.reservaConcluida = false;
anadirReserva(this); anadirReserva(this);
} }
public Reserva(Usuario conductor, String origen, String destino, int numAsientos, int precioAsiento, Date fechaSalida) {
this.conductor = conductor;
this.idReserva = ++incrementaReserva;
this.origen = origen;
this.destino = destino;
this.numPasajeros = numAsientos;
this.viaje = new Viaje(origen, destino, fechaSalida, numAsientos, precioAsiento, this.idReserva);
this.puntuacion = 0;
this.pasajeros = new ArrayList<String>();
this.reservaConcluida = false;
}
public void anadirReserva(Reserva res){ public void anadirReserva(Reserva res){
this.sistema.listarReservas().add(res); this.sistema.listarReservas().add(res);
...@@ -153,4 +171,5 @@ public class Reserva { ...@@ -153,4 +171,5 @@ public class Reserva {
} }
...@@ -25,8 +25,8 @@ public class SolicitudRepository{ ...@@ -25,8 +25,8 @@ public class SolicitudRepository{
} }
@CacheEvict(value = "solicitudes", key = "#solicitud.id") @CacheEvict(value = "solicitudes", key = "#solicitud.id")
public void guardar(Solicitud S){ public void guardar(Solicitud u){
em.persist(S); em.persist(u);
} }
@CacheEvict(value = "solicitudes", key = "#solicitud.id") @CacheEvict(value = "solicitudes", key = "#solicitud.id")
......
...@@ -16,6 +16,7 @@ import java.text.ParseException; ...@@ -16,6 +16,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
@RestController @RestController
...@@ -68,12 +69,24 @@ public class ControladorREST { ...@@ -68,12 +69,24 @@ public class ControladorREST {
@PutMapping("/usuarios/modificar/{dni}") @PutMapping("/usuarios/modificar/{dni}")
ResponseEntity<DTOUsuario> actualizarCliente( ResponseEntity<DTOUsuario> actualizarCliente(
@PathVariable String dni, @PathVariable String dni,
@RequestBody Usuario usuarioModificado @RequestBody Map<String, Object> datosUsuario
) { ) {
Optional<Usuario> usuarioExistente = servicioCarPooling.verUsuario(dni); Optional<Usuario> usuarioExistente = servicioCarPooling.verUsuario(dni);
return usuarioExistente.map(usuario -> { return usuarioExistente.map(usuario -> {
usuario.setNombre(usuarioModificado.getNombre()); // Verificar si el nombre y el apellido están presentes en la solicitud
usuario.setApellidos(usuarioModificado.getApellidos()); if (datosUsuario.containsKey("nombre")) {
usuario.setNombre((String) datosUsuario.get("nombre"));
}
if (datosUsuario.containsKey("apellido")) {
usuario.setApellidos((String) datosUsuario.get("apellido"));
}
if (datosUsuario.containsKey("nuevoEmail")) {
usuario.setNombre((String) datosUsuario.get("nuevoEmail"));
}
if (datosUsuario.containsKey("nuevoDNI")) {
usuario.setApellidos((String) datosUsuario.get("nuevoDNI"));
}
servicioCarPooling.modificarDatosUsuario(usuario); servicioCarPooling.modificarDatosUsuario(usuario);
return ResponseEntity.ok(new DTOUsuario(usuario)); return ResponseEntity.ok(new DTOUsuario(usuario));
}).orElse(ResponseEntity.notFound().build()); }).orElse(ResponseEntity.notFound().build());
...@@ -135,10 +148,15 @@ public class ControladorREST { ...@@ -135,10 +148,15 @@ public class ControladorREST {
* Modificar datos de un viaje * Modificar datos de un viaje
*/ */
@PutMapping("/viajes/actualizarViaje/{id}") @PutMapping("/viajes/actualizarViaje/{id}")
public ResponseEntity<Viaje> actualizarViaje(@PathVariable int id, @RequestBody String origen) { public ResponseEntity<Viaje> actualizarViaje(@PathVariable int id, @RequestBody Map<String, Object> datosViaje) {
Optional<Viaje> viajeExistente = servicioCarPooling.verViaje(id); Optional<Viaje> viajeExistente = servicioCarPooling.verViaje(id);
return viajeExistente.map(viaje -> { return viajeExistente.map(viaje -> {
viaje.setOrigen(origen); if (datosViaje.containsKey("nuevoOrigen")) {
viaje.setOrigen((String) datosViaje.get("nuevoOrigen"));
}
if (datosViaje.containsKey("nuevoDestino")) {
viaje.setDestino((String) datosViaje.get("nuevoDestino"));
}
Viaje viajeModificado = servicioCarPooling.modificarDatosViaje(viaje); Viaje viajeModificado = servicioCarPooling.modificarDatosViaje(viaje);
return ResponseEntity.ok(viajeModificado); return ResponseEntity.ok(viajeModificado);
...@@ -185,16 +203,37 @@ public class ControladorREST { ...@@ -185,16 +203,37 @@ public class ControladorREST {
return ResponseEntity.notFound().build(); return ResponseEntity.notFound().build();
} }
} }
@PostMapping("/solicitudes/crearSolicitud") @PostMapping("/solicitudes")
public ResponseEntity<Solicitud> crearSolicitud(@PathVariable String dni, @PathVariable int idReserva) { public ResponseEntity<Solicitud> crearSolicitud(@RequestBody Map<String, Object> datosSolicitud) throws ParseException {
String nombre = (String) datosSolicitud.get("nombre");
String apellidos = (String) datosSolicitud.get("apellidos");
String fechaString = (String) datosSolicitud.get("fecha");
SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date fecha = formato.parse(fechaString);
String fechaString2 = (String) datosSolicitud.get("fecha2");
Date fecha2 = formato.parse(fechaString2);
String dni = (String) datosSolicitud.get("dni");
int telefono = (int) datosSolicitud.get("telefono");
String email = (String) datosSolicitud.get("email");
String claveAceso = (String) datosSolicitud.get("claveAcceso");
String rol1 = (String) datosSolicitud.get("rol");
Usuario.Rol rol = Usuario.Rol.valueOf(rol1);
Usuario usuario = new Usuario(nombre, apellidos, fecha, dni, telefono, email, claveAceso, rol);
Reserva reserva = new Reserva(usuario, (String) datosSolicitud.get("origen"), (String) datosSolicitud.get("destino"), (int) datosSolicitud.get("numAsientos"), (int) datosSolicitud.get("precio"), fecha2);
Solicitud s = new Solicitud(reserva, usuario);
s.setId(19827439L);
try { try {
servicioCarPooling.crearSolicitud(dni, idReserva); servicioCarPooling.crearSolicitud(s);
return ResponseEntity.status(HttpStatus.CREATED).build(); return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (SolicitudYaExistente e) { } catch (SolicitudYaExistente e) {
return ResponseEntity.status(HttpStatus.CONFLICT).build(); return ResponseEntity.status(HttpStatus.CONFLICT).build();
} }
} }
@GetMapping("/solicitudes/{id}") @GetMapping("/solicitudes/{id}")
public ResponseEntity<Solicitud> verSolicitudPorId(@PathVariable Long id) { public ResponseEntity<Solicitud> verSolicitudPorId(@PathVariable Long id) {
Optional<Solicitud> solicitud = servicioCarPooling.verSolicitud(id); Optional<Solicitud> solicitud = servicioCarPooling.verSolicitud(id);
......
...@@ -142,12 +142,8 @@ public class ServicioCarPooling { ...@@ -142,12 +142,8 @@ public class ServicioCarPooling {
return reserva; return reserva;
} }
@CacheEvict(value="solicitudes", key = "#id") @Transactional
public Solicitud crearSolicitud(@NotBlank String dni, @NotBlank int idReserva) { public Solicitud crearSolicitud(@NotBlank Solicitud s) {
Usuario usuario = repositorioUsuario.buscar(dni).orElseThrow(UsuarioNoRegistrado::new);
Reserva reserva = repositorioReservas.buscar(idReserva).orElseThrow(UsuarioNoRegistrado::new);
Solicitud s = new Solicitud();
usuario.solicitarViaje(reserva.getIdReserva(),s);
repositorioSolicitud.guardar(s); repositorioSolicitud.guardar(s);
return s; return s;
......
...@@ -20,6 +20,8 @@ import org.springframework.http.HttpStatus; ...@@ -20,6 +20,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
...@@ -89,13 +91,20 @@ public class ControladorRESTTEST { ...@@ -89,13 +91,20 @@ public class ControladorRESTTEST {
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED); Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Crear un objeto ActualizarUsuarioRequest con los parámetros a enviar // Crear un objeto ActualizarUsuarioRequest con los parámetros a enviar
Usuario usuarioModificado = new Usuario(); String nuevoNombre = "Hamilton";
usuarioModificado.setNombre("Lewis"); String nuevoApellido = "Ricciardo"; // Agregamos un nuevo apellido
usuarioModificado.setApellidos("Hamilton"); String nuevoDNI = "78162640S";
String nuevoEmail = "aor00039@red.ujaen.es";
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("nombre", nuevoNombre);
requestBody.put("apellido", nuevoApellido);
requestBody.put("nuevoDNI", nuevoDNI);
requestBody.put("nuevoEmail", nuevoEmail);
// Enviar la solicitud con datos en el cuerpo como JSON // Enviar la solicitud con datos en el cuerpo como JSON
ResponseEntity<DTOUsuario> respuestaA = restTemplate.exchange( ResponseEntity<DTOUsuario> respuestaA = restTemplate.exchange(
"/usuarios/modificar/{dni}", HttpMethod.PUT, new HttpEntity<>(usuarioModificado), DTOUsuario.class, dni "/usuarios/modificar/{dni}", HttpMethod.PUT, new HttpEntity<>(requestBody), DTOUsuario.class, dni
); );
// Verificar que la respuesta sea OK, ya que se supone que el usuario existe en la base de datos // Verificar que la respuesta sea OK, ya que se supone que el usuario existe en la base de datos
...@@ -161,7 +170,7 @@ public class ControladorRESTTEST { ...@@ -161,7 +170,7 @@ public class ControladorRESTTEST {
@Test @Test
public void testActualizarViajeExistente() { public void testActualizarViajeExistente() {
// Datos de prueba // Datos de prueba
int idViaje = 1; // Debes adaptar esto según tus datos de prueba int idViaje = 7; // Debes adaptar esto según tus datos de prueba
Date fecha = new Date(2024, 12, 1); Date fecha = new Date(2024, 12, 1);
DTOViaje viaje = new DTOViaje("Origen", "destino", fecha, 4, 10, idViaje); DTOViaje viaje = new DTOViaje("Origen", "destino", fecha, 4, 10, idViaje);
ResponseEntity<DTOViaje> respuesta = restTemplate.postForEntity("/viajes", viaje, DTOViaje.class); ResponseEntity<DTOViaje> respuesta = restTemplate.postForEntity("/viajes", viaje, DTOViaje.class);
...@@ -169,10 +178,16 @@ public class ControladorRESTTEST { ...@@ -169,10 +178,16 @@ public class ControladorRESTTEST {
// Verificar que la creación del usuario fue exitosa // Verificar que la creación del usuario fue exitosa
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED); Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED);
String origen = "nuevoOrigen"; String nuevoOrigen = "nuevoOrigen";
String nuevoDestino = "nuevoDestino";
ResponseEntity<DTOUsuario> respuestaA = restTemplate.exchange( Map<String, Object> requestBody = new HashMap<>();
"/viajes/actualizarViaje/{id}", HttpMethod.PUT, new HttpEntity<>(origen), DTOUsuario.class, idViaje requestBody.put("nuevoOrigen", nuevoOrigen);
requestBody.put("nuevoDestino", nuevoDestino);
// Enviar la solicitud con datos en el cuerpo como JSON
ResponseEntity<DTOViaje> respuestaA = restTemplate.exchange(
"/viajes/actualizarViaje/{id}", HttpMethod.PUT, new HttpEntity<>(requestBody), DTOViaje.class, idViaje
); );
// Verificar que la respuesta sea OK, ya que se supone que el usuario existe en la base de datos // Verificar que la respuesta sea OK, ya que se supone que el usuario existe en la base de datos
...@@ -290,16 +305,48 @@ public class ControladorRESTTEST { ...@@ -290,16 +305,48 @@ public class ControladorRESTTEST {
@Test @Test
public void crearSolicitud() { public void crearSolicitud() {
Date fecha = new Date(2000, 12, 1); Date fecha = new Date(2000, 12, 1);
Usuario conductor = new Usuario("Conductor", "ApellidoConductor",fecha, "78162640S", 123456789, "conductor@example.com", "clave", Usuario.Rol.CONDUCTOR);
Reserva reserva = new Reserva(conductor, "Origen", "Destino", new Date(), 3, 20); // Especifica el formato deseado para la fecha
SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Convierte la fecha a String
String fechaComoString = formato.format(fecha);
Date fecha2 = new Date(2025, 12, 1);
// Convierte la fecha a String
String fe2 = formato.format(fecha);
Usuario u = new Usuario("Conductor", "ApellidoConductor", fecha, "78162640S", 123456789, "conductor@example.com", "clave", Usuario.Rol.CONDUCTOR);
Reserva r = new Reserva(u, "Origen", "Destino", 3, 20, fecha2);
Long id = 1L; Long id = 1L;
DTOSolicitud solicitud = new DTOSolicitud(id, reserva, conductor);
ResponseEntity<Solicitud> respuestaR = restTemplate.postForEntity( Usuario.Rol rol = u.getRol();
"/solicitudes/crearSolicitud/", solicitud, Solicitud.class String convertirRol = rol.name();
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("nombre", u.getNombre());
requestBody.put("apellidos", u.getApellidos());
requestBody.put("fecha", fechaComoString);
requestBody.put("dni", u.getDNI());
requestBody.put("telefono", u.getTelefono());
requestBody.put("email", u.getEmail());
requestBody.put("claveAcceso", u.getClaveAcceso());
requestBody.put("rol", convertirRol);
requestBody.put("origen", r.getViaje().getOrigen());
requestBody.put("destino", r.getViaje().getDestino());
requestBody.put("numAsientos", r.getNumPasajeros());
requestBody.put("precio", r.getViaje().getPrecioAsiento());
requestBody.put("fecha2", fe2);
ResponseEntity<Solicitud> respuestaR = restTemplate.exchange(
"/solicitudes", HttpMethod.POST, new HttpEntity<>(requestBody), Solicitud.class
); );
Assertions.assertThat(respuestaR.getStatusCode()).isEqualTo(HttpStatus.CREATED); Assertions.assertThat(respuestaR.getStatusCode()).isEqualTo(HttpStatus.CREATED);
} }
@Test @Test
public void verSolicitud() { public void verSolicitud() {
Date fecha = new Date(2000, 12, 1); Date fecha = new Date(2000, 12, 1);
......
...@@ -214,7 +214,8 @@ public class ServicioCarPoolingTest ...@@ -214,7 +214,8 @@ public class ServicioCarPoolingTest
usuario.setDNI(dni); usuario.setDNI(dni);
servicio.altaCliente(usuario); servicio.altaCliente(usuario);
Reserva reserva = servicio.crearReserva(dni, new Reserva()); Reserva reserva = servicio.crearReserva(dni, new Reserva());
Solicitud s = servicio.crearSolicitud(dni, reserva.getIdReserva()); Solicitud snueva = new Solicitud(reserva, usuario);
Solicitud s = servicio.crearSolicitud(snueva);
assertNotNull(s); assertNotNull(s);
} }
......
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 sign in to comment