Funcionamiento de todos los tests

parent e918de81
package com.carpooling.carpoolingaoraha.entidades;
import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada;
import com.carpooling.carpoolingaoraha.excepciones.ViajeNoRegistrado;
import com.carpooling.carpoolingaoraha.utils.ExprReg;
import jakarta.persistence.*;
import org.antlr.v4.runtime.misc.NotNull;
import javax.validation.constraints.Max;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.*;
import static com.carpooling.carpoolingaoraha.entidades.Usuario.*;
@Entity
@Table(name = "solicitudes")
......@@ -21,25 +14,26 @@ public class Solicitud {
private static int incrementaReserva = 0;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "id_reserva")
private Reserva reserva;
@NotNull
private int idReserva;
@ManyToOne
@JoinColumn(name = "id_pasajero")
private Usuario pasajero;
@NotNull
@Size(min=9, max=9)
@Pattern(regexp= ExprReg.DNI)
private String idSolicitante;
// Otros campos y métodos necesarios
public Solicitud(){
}
// Constructores, getters y setters
public Solicitud(Reserva reserva, Usuario pasajero) {
this.id = (long) incrementaReserva++;
this.reserva = reserva;
this.pasajero = pasajero;
public Solicitud(int idReserva, String idSolicitante) {
this.id = (long) ++incrementaReserva;
this.idReserva = idReserva;
this.idSolicitante = idSolicitante;
}
public Long getId() {
......@@ -50,19 +44,20 @@ public class Solicitud {
this.id = id;
}
public Reserva getReserva() {
return reserva;
public int getIdReserva() {
return idReserva;
}
public void setReserva(Reserva reserva) {
this.reserva = reserva;
public String getIdSolicitante() {
return idSolicitante;
}
public Usuario getPasajero() {
return pasajero;
public void setIdReserva(int idReserva) {
this.idReserva = idReserva;
}
public void setPasajero(Usuario pasajero) {
this.pasajero = pasajero;
public void setIdSolicitante(String idSolicitante) {
this.idSolicitante = idSolicitante;
}
}
......@@ -68,10 +68,10 @@ public class Usuario {
@Max(5)
private double puntuacionMedia;
@OneToMany(mappedBy = "pasajero", cascade = CascadeType.ALL)
@Transient
private List<Solicitud> solicitudesPendientes;
@OneToMany(mappedBy = "pasajero", cascade = CascadeType.ALL)
@Transient
private List<Solicitud> historicoSolicitudes; // Lista de solicitudes realizadas (histórico)
......@@ -192,7 +192,7 @@ public class Usuario {
public boolean ofrecerViaje(String origen, String destino, Date fechaSalida, int nAsientos, int precioAsiento){
if(this.rol == Rol.CONDUCTOR || this.rol == Rol.AMBOS) {
//Crea una reserva
Reserva reserva = new Reserva(this, origen, destino, fechaSalida, nAsientos, precioAsiento);
Reserva reserva = new Reserva(this, origen, destino, nAsientos, precioAsiento, fechaSalida);
this.viajesOfertados.add(reserva.getIdReserva());
return true;
}
......@@ -298,8 +298,8 @@ public class Usuario {
if (!tieneSolicitudPendiente(reserva)) {
// Crear una nueva solicitud y agregarla a la lista de solicitudes del usuario
Solicitud solicitud = new Solicitud();
solicitud.setReserva(reserva);
solicitud.setPasajero(this);
solicitud.setIdReserva(reserva.getIdReserva());
solicitud.setIdSolicitante(this.getDNI());
this.solicitudesPendientes.add(solicitud);
return true;
} else {
......@@ -321,8 +321,8 @@ public class Usuario {
// Verificar si ya hay una solicitud pendiente para esta reserva
if (!tieneSolicitudPendiente(reserva)) {
// Crear una nueva solicitud y agregarla a la lista de solicitudes del usuario
s.setReserva(reserva);
s.setPasajero(this);
s.setIdReserva(reserva.getIdReserva());
s.setIdSolicitante(this.getDNI());
this.solicitudesPendientes.add(s);
return true;
} else {
......@@ -339,12 +339,14 @@ public class Usuario {
private boolean tieneSolicitudPendiente(Reserva reserva) {
// Verificar si ya hay una solicitud pendiente para esta reserva
return this.solicitudesPendientes.stream().anyMatch(solicitud -> solicitud.getReserva().equals(reserva));
return this.solicitudesPendientes.stream().anyMatch(solicitud -> solicitud.getIdReserva() == reserva.getIdReserva());
}
private void moverSolicitudAlHistorico(Reserva reserva) {
String idReserva = String.valueOf(reserva.getIdReserva());
Optional<Solicitud> solicitudOptional = this.solicitudesPendientes.stream()
.filter(solicitud -> solicitud.getReserva().equals(reserva))
.filter(solicitud -> idReserva.equals(solicitud.getIdReserva()))
.findFirst();
solicitudOptional.ifPresent(solicitud -> {
......@@ -354,6 +356,7 @@ public class Usuario {
}
public ArrayList<Integer> getViajesOfertados() {
return viajesOfertados;
}
......
......@@ -24,17 +24,17 @@ public class SolicitudRepository{
return Optional.ofNullable(em.find(Solicitud.class, id));
}
@CacheEvict(value = "solicitudes", key = "#solicitud.id")
@CacheEvict(value = "solicitudes", key = "#u.id")
public void guardar(Solicitud u){
em.persist(u);
}
@CacheEvict(value = "solicitudes", key = "#solicitud.id")
@CacheEvict(value = "solicitudes", key = "#u.id")
public void actualizar(Solicitud u){
em.merge(u);
}
@CacheEvict(value = "solicitudes", key = "#solicitud.id")
@Transactional
public void cancelarSolicitud(Long id) {
Solicitud sol = em.find(Solicitud.class, id);
if (sol != null) {
......
......@@ -4,6 +4,7 @@ import com.carpooling.carpoolingaoraha.entidades.*;
import com.carpooling.carpoolingaoraha.excepciones.SolicitudYaExistente;
import com.carpooling.carpoolingaoraha.excepciones.UsuarioNoRegistrado;
import com.carpooling.carpoolingaoraha.excepciones.UsuarioYaRegistrado;
import com.carpooling.carpoolingaoraha.rest.dto.DTOSolicitud;
import com.carpooling.carpoolingaoraha.rest.dto.DTOUsuario;
import com.carpooling.carpoolingaoraha.services.ServicioCarPooling;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -12,9 +13,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.ConstraintViolationException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
......@@ -204,9 +202,9 @@ public class ControladorREST {
}
}
@PostMapping("/solicitudes")
public ResponseEntity<Solicitud> crearSolicitud(@RequestBody Solicitud datosSolicitud){
ResponseEntity<DTOSolicitud> crearSolicitud(@RequestBody DTOSolicitud datosSolicitud){
try {
servicioCarPooling.crearSolicitud(datosSolicitud);
Solicitud se = servicioCarPooling.crearSolicitud(datosSolicitud.altaSolicitud());
return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (SolicitudYaExistente e) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
......@@ -224,8 +222,8 @@ public class ControladorREST {
public ResponseEntity<Solicitud> actualizarSolicitud(@PathVariable Long id, @RequestBody Solicitud solicitudActualizada) {
Optional<Solicitud> solicitudExistente = servicioCarPooling.verSolicitud(id);
return solicitudExistente.map(solicitud -> {
solicitud.setReserva(solicitudActualizada.getReserva());
solicitud.setPasajero(solicitudActualizada.getPasajero());
solicitud.setIdReserva(solicitudActualizada.getIdReserva());
solicitud.setIdSolicitante(solicitudActualizada.getIdSolicitante());
Solicitud solicitudModificada = servicioCarPooling.modificarDatosSolicitud(solicitud);
return ResponseEntity.ok(solicitudModificada);
......
......@@ -6,14 +6,14 @@ import com.carpooling.carpoolingaoraha.entidades.Usuario;
import java.util.Objects;
public record DTOSolicitud(Long id, Reserva res, Usuario usuario){
public record DTOSolicitud(Long id, int idReserva, String idSolicitante){
public DTOSolicitud(Solicitud sol){
this(sol.getId(), sol.getReserva(), sol.getPasajero());
this(sol.getId(), sol.getIdReserva(), sol.getIdSolicitante());
}
public Solicitud altaSolicitud(){
return new Solicitud(res, usuario);
return new Solicitud(idReserva, idSolicitante);
}
@Override
......@@ -21,21 +21,13 @@ public record DTOSolicitud(Long id, Reserva res, Usuario usuario){
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DTOSolicitud that = (DTOSolicitud) o;
return Objects.equals(id, that.id) && Objects.equals(res, that.res) && Objects.equals(usuario, that.usuario);
return Objects.equals(idReserva, that.idReserva) && Objects.equals(idSolicitante, that.idSolicitante);
}
@Override
public int hashCode() {
return Objects.hash(id, res, usuario);
return Objects.hash(idReserva, idSolicitante);
}
@Override
public String toString() {
return "DTOSolicitud{" +
"id=" + id +
", res=" + res +
", usuario=" + usuario +
'}';
}
}
......@@ -21,8 +21,6 @@ import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Optional;
import static com.carpooling.carpoolingaoraha.entidades.Usuario.Rol.CONDUCTOR;
@Service
@Validated
public class ServicioCarPooling {
......@@ -136,7 +134,7 @@ public class ServicioCarPooling {
@CacheEvict(value="usuarios", key = "#dni")
public Reserva crearReserva(@NotBlank String dni, @NotNull Reserva reserva) {
Usuario usuario = repositorioUsuario.buscar(dni).orElseThrow(UsuarioNoRegistrado::new);
usuario.setRol(Usuario.Rol.AMBOS);
usuario.ofrecerViaje(reserva);
repositorioReservas.guardar(reserva);
......@@ -144,11 +142,11 @@ public class ServicioCarPooling {
}
@Transactional
public Solicitud crearSolicitud(@NotBlank Solicitud s) {
repositorioSolicitud.guardar(s);
Optional<Solicitud> test = repositorioSolicitud.buscar(s.getId());
if (test.isPresent()) {
throw new ViajeYaRegistrado();
}
repositorioSolicitud.guardar(s);
return s;
}
......@@ -242,8 +240,8 @@ public class ServicioCarPooling {
if (solExistente.isPresent()) {
Solicitud solActual = solExistente.get();
solActual.setReserva(solModificada.getReserva());
solActual.setPasajero(solModificada.getPasajero());
solActual.setIdReserva(solModificada.getIdReserva());
solActual.setIdSolicitante(solModificada.getIdSolicitante());
repositorioSolicitud.actualizar(solActual);
return solActual;
......
......@@ -368,16 +368,12 @@ public class ControladorRESTTEST {
restTemplate.postForEntity(
"/reservas/crearReserva/" + dni, reserva, Reserva.class
);
Date fecha2 = new Date(2025, 12, 1);
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);
int entero = 123456;
long numero = (long) entero;
DTOSolicitud s = new DTOSolicitud(numero,r,u);
ResponseEntity<Solicitud> respuestaR = restTemplate.postForEntity(
"/solicitudes", s, Solicitud.class
int r = reserva.idReserva();
String u = usuario.DNI();
Long id = 1234L;
DTOSolicitud s = new DTOSolicitud(id,r,u);
ResponseEntity<DTOSolicitud> respuestaR = restTemplate.postForEntity(
"/solicitudes", s, DTOSolicitud.class
);
Assertions.assertThat(respuestaR.getStatusCode()).isEqualTo(HttpStatus.CREATED);
......@@ -387,6 +383,12 @@ public class ControladorRESTTEST {
@Test
public void verSolicitud() {
Date fecha = new Date(2000, 12, 1);
DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78162640S", 670988953, "hola@gmail.com", "1234", Usuario.Rol.CONDUCTOR);
ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity
(
"/usuarios", usuario, DTOUsuario.class
);
Usuario conductor = new Usuario("Conductor", "ApellidoConductor",fecha, "78162640S", 123456789, "conductor@example.com", "clave", Usuario.Rol.CONDUCTOR);
ArrayList<String> pasajeros = new ArrayList<>();
pasajeros.add("Ana");
......@@ -395,22 +397,63 @@ public class ControladorRESTTEST {
Viaje viaje = new Viaje("Origen", "Destino", new Date(), 3, 20, 5);
DTOReserva reserva = new DTOReserva(1,conductor,pasajeros,0,2,true, viaje);
ResponseEntity<Reserva> respuesta = restTemplate.getForEntity("/reservas/", Reserva.class, viaje.getIdViaje());
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
restTemplate.postForEntity(
"/reservas/crearReserva/" + dni, reserva, Reserva.class
);
int r = reserva.idReserva();
String u = usuario.DNI();
Long id = 1L;
DTOSolicitud s = new DTOSolicitud(id,r,u);
ResponseEntity<DTOSolicitud> respuestaR = restTemplate.postForEntity(
"/solicitudes", s, DTOSolicitud.class
);
ResponseEntity<DTOSolicitud> respuestaFinal = restTemplate.getForEntity(
"/solicitudes/" + id, DTOSolicitud.class, id
);
// lo encuentra porque existe ese DNI en la BBDD
Assertions.assertThat(respuestaFinal.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@Test
public void testEliminarSolicitud() {
// Datos de prueba
int idSolicitud = 1;
Date fecha = new Date(2000, 12, 1);
DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78162640S", 670988953, "hola@gmail.com", "1234", Usuario.Rol.CONDUCTOR);
ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity
(
"/usuarios", usuario, DTOUsuario.class
);
restTemplate.delete("/viajes/eliminarSolicitud/{id}", idSolicitud);
ResponseEntity<Solicitud> respuestaDespuesDeEliminar = restTemplate.getForEntity("/solicitud/", Solicitud.class, idSolicitud);
Usuario conductor = new Usuario("Conductor", "ApellidoConductor",fecha, "78162640S", 123456789, "conductor@example.com", "clave", Usuario.Rol.CONDUCTOR);
ArrayList<String> pasajeros = new ArrayList<>();
pasajeros.add("Ana");
pasajeros.add("Perico");
String dni = "78162640S";
Viaje viaje = new Viaje("Origen", "Destino", new Date(), 3, 20, 5);
DTOReserva reserva = new DTOReserva(1,conductor,pasajeros,0,2,true, viaje);
restTemplate.postForEntity(
"/reservas/crearReserva/" + dni, reserva, Reserva.class
);
int r = reserva.idReserva();
String u = usuario.DNI();
Long id = 1L;
DTOSolicitud s = new DTOSolicitud(id,r,u);
ResponseEntity<DTOSolicitud> respuestaR = restTemplate.postForEntity(
"/solicitudes", s, DTOSolicitud.class
);
Assertions.assertThat(respuestaR.getStatusCode()).isEqualTo(HttpStatus.CREATED);
restTemplate.delete("/viajes/eliminarSolicitud/", id);
ResponseEntity<Solicitud> respuestaDespuesDeEliminar = restTemplate.getForEntity("/solicitudes/", Solicitud.class, id);
Assertions.assertThat(respuestaDespuesDeEliminar.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
/*@Test
public void testActualizarSolicitud() {
int idSolicitud = 847132468;
// Realizar la solicitud POST para actualizar el cliente existente
......@@ -420,7 +463,7 @@ public class ControladorRESTTEST {
);
// Verificar que la respuesta sea mala, ya que no existe ese usuario en la bbdd
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
}*/
......
......@@ -45,7 +45,7 @@ public class ReservaTest {
conductor = new Usuario("Conductor", "ApellidoConductor", new Date(), "12345678A", 123456789, "conductor@example.com", "clave", CONDUCTOR);
// Crear una reserva con el conductor y otros detalles
reserva = new Reserva(conductor, "Origen", "Destino", new Date(), 3, 20);
reserva = new Reserva(conductor, "Origen", "Destino", 3, 20, new Date());
// Añadir un pasajero a la reserva
reserva.anadirPasajeros("87654321B", reserva.getIdReserva());
......
package com.carpooling.carpoolingaoraha.entidades;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class SolicitudTest {
@Test
public void testConstructorAndGetters() {
Reserva reserva = new Reserva(/* Argumentos de la reserva */);
Usuario pasajero = new Usuario(/* Argumentos del usuario */);
@Test
public void testConstructor() {
int idReserva = 123456789;
String idSolicitante = "123456789";
Solicitud solicitud = new Solicitud(idReserva, idSolicitante);
Solicitud solicitud = new Solicitud(reserva, pasajero);
assertNotNull(solicitud.getId());
assertEquals(idReserva, solicitud.getIdReserva());
assertEquals(idSolicitante, solicitud.getIdSolicitante());
}
assertEquals(reserva, solicitud.getReserva());
assertEquals(pasajero, solicitud.getPasajero());
}
@Test
public void testSettersAndGetters() {
Solicitud solicitud = new Solicitud();
@Test
public void testSetters() {
Reserva reserva1 = new Reserva(/* Argumentos de la reserva 1 */);
Reserva reserva2 = new Reserva(/* Argumentos de la reserva 2 */);
Usuario pasajero1 = new Usuario(/* Argumentos del usuario 1 */);
Usuario pasajero2 = new Usuario(/* Argumentos del usuario 2 */);
Long id = 1L;
int idReserva = 123456789;
String idSolicitante = "123456789";
Solicitud solicitud = new Solicitud(reserva1, pasajero1);
solicitud.setId(id);
solicitud.setIdReserva(idReserva);
solicitud.setIdSolicitante(idSolicitante);
solicitud.setReserva(reserva2);
solicitud.setPasajero(pasajero2);
assertEquals(id, solicitud.getId());
assertEquals(idReserva, solicitud.getIdReserva());
assertEquals(idSolicitante, solicitud.getIdSolicitante());
}
assertEquals(reserva2, solicitud.getReserva());
assertEquals(pasajero2, solicitud.getPasajero());
}
// Aquí podrías agregar más pruebas según tus necesidades
}
......@@ -213,8 +213,9 @@ public class ServicioCarPoolingTest
Usuario usuario = new Usuario();
usuario.setDNI(dni);
servicio.altaCliente(usuario);
usuario.setRol(Rol.AMBOS);
Reserva reserva = servicio.crearReserva(dni, new Reserva());
Solicitud snueva = new Solicitud(reserva, usuario);
Solicitud snueva = new Solicitud(reserva.getIdReserva(), usuario.getDNI());
Solicitud s = servicio.crearSolicitud(snueva);
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