Commit 57bb271c by María Hidalgo

añadida funcion obtenerViajesPendientesConductor

parent d2b9e2cd
......@@ -4,7 +4,6 @@ import java.io.Serializable;
import java.time.LocalDate;
import java.util.ArrayList;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Past;
import jakarta.validation.constraints.Pattern;
......@@ -16,7 +15,9 @@ import jakarta.validation.constraints.NotNull;
import java.util.List;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
import es.ujaen.dae.carpoolingdae.excepciones.ViajeRealizado;
import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
import es.ujaen.dae.carpoolingdae.utils.ExprReg;
......@@ -69,8 +70,8 @@ public class Usuario implements Serializable {
String clave;
// Viajes creados por el conductor
@OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
//@JoinColumn(name = "usuario_dni")
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
// @JoinColumn(name = "usuario_dni")
List<Viaje> viajesComoConductor;
public Usuario(String dni, String nombre, String apellidos, LocalDate fecha_nac, String telef, String email,
......@@ -130,6 +131,10 @@ public class Usuario implements Serializable {
if (!viajesComoConductor.contains(viaje)) {
throw new NoAceptaConductor();
}
// Verifica si el viaje está en estado pendiente
if (viaje.getEstado() != EstadoViaje.PENDIENTE) {
throw new ViajeRealizado();
}
// Llamar a la función en Viaje para confirmar al pasajero
viaje.confirmarPasajero(pasajero, conductor);
......
......@@ -8,6 +8,8 @@ import java.util.List;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
......@@ -46,6 +48,15 @@ public class Viaje {
@NotNull
Double precioAsiento;
public enum EstadoViaje {
PENDIENTE,
REALIZADO,
CANCELADO
}
// Añado el atributo de estado usando el enum
@Enumerated(EnumType.STRING)
EstadoViaje estado;
// Lista de usuarios que son confirmados en un viaje
@ManyToMany(cascade = CascadeType.ALL)
......@@ -67,6 +78,7 @@ public class Viaje {
this.fechaHora = fechaHora;
this.plazasDisponibles = plazasDisponibles;
this.precioAsiento = precioAsiento;
this.estado = EstadoViaje.PENDIENTE;
usuariosSolicitantes = new ArrayList<>();
usuariosConfirmados = new ArrayList<>();
......@@ -93,7 +105,7 @@ public class Viaje {
}
public void enviarSolicitudParaSerPasajero(@NotNull Viaje viaje, @NotNull Usuario pasajero) {
if (!usuariosSolicitantes.contains(pasajero) && getPlazasDisponibles
if (estado == EstadoViaje.PENDIENTE && !usuariosSolicitantes.contains(pasajero) && getPlazasDisponibles
() > 0) { // Sino quedan plazas no puede solicitar
// unirse
usuariosSolicitantes.add(pasajero);
......@@ -104,7 +116,7 @@ public class Viaje {
public void confirmarPasajero(@NotNull Usuario pasajero, @NotNull Usuario conductor) {
// Verificar si el pasajero está en la lista de solicitantes
if (usuariosSolicitantes.contains(pasajero) && plazasDisponibles > 0) {
if (estado == EstadoViaje.PENDIENTE && usuariosSolicitantes.contains(pasajero) && plazasDisponibles > 0) {
// Mover al pasajero de la lista de solicitantes a la lista de confirmados
usuariosSolicitantes.remove(pasajero);
......
package es.ujaen.dae.carpoolingdae.excepciones;
public class ViajeRealizado extends RuntimeException {
public ViajeRealizado() {
}
}
......@@ -7,7 +7,7 @@ import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -16,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
import es.ujaen.dae.carpoolingdae.entidades.Usuario;
import es.ujaen.dae.carpoolingdae.entidades.Viaje;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.UsuarioNoRegistrado;
import es.ujaen.dae.carpoolingdae.excepciones.UsuarioYaRegistrado;
import es.ujaen.dae.carpoolingdae.repositorios.RepositorioUsuarios;
......@@ -98,7 +99,18 @@ public class SistemaCarpooling {
return listaViajes;
}
/**
* Obtener viajes pendientes de un conductor
*
* @param conductor el usuario conductor
* @return lista de viajes pendientes del conductor
*/
public List<Viaje> obtenerViajesPendientesConductor(@NotNull Usuario conductor) {
// Filtrar los viajes del conductor que aún no han sido realizados
return conductor.getViajesComoConductor().stream()
.filter(viaje -> viaje.getEstado() == EstadoViaje.PENDIENTE)
.collect(Collectors.toList());
}
/**
* Enviar solicitud para ser pasajero de un viaje
......
package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
......@@ -8,6 +9,7 @@ import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
......@@ -76,6 +78,10 @@ public class UsuarioTest {
2,
50.0);
usuario.agregarViajeComoConductor(viaje);
viaje.setEstado(EstadoViaje.PENDIENTE);
assertTrue(usuario.viajesComoConductor.contains(viaje));
assertEquals(EstadoViaje.PENDIENTE, viaje.getEstado());
assertTrue(usuario.viajesComoConductor.contains(viaje));
}
......
package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
......@@ -14,6 +15,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import es.ujaen.dae.carpoolingdae.servicios.SistemaCarpooling;
import jakarta.validation.ConstraintViolation;
......@@ -124,12 +126,14 @@ public class ViajeTest {
"clave");
viaje.setPlazasDisponibles(0);
viaje.usuariosSolicitantes.add(pasajero);
viaje.setEstado(EstadoViaje.PENDIENTE);
viaje.confirmarPasajero(pasajero, conductor);
// Verificación
assertFalse( viaje.getPlazasDisponibles() > 0);
assertFalse( viaje.usuariosConfirmados.contains(pasajero));
assertFalse( viaje.usuariosSolicitantes.isEmpty());
assertEquals(EstadoViaje.PENDIENTE, viaje.getEstado());
}
......
package es.ujaen.dae.carpoolingdae.servicios;
import es.ujaen.dae.carpoolingdae.entidades.Usuario;
import es.ujaen.dae.carpoolingdae.entidades.Viaje;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.UsuarioNoRegistrado;
//import jakarta.validation.ConstraintViolationException;
import static org.junit.jupiter.api.Assertions.assertEquals;
//import jakarta.validation.ConstraintViolationException;
import static org.junit.jupiter.api.Assertions.assertTrue;
......@@ -14,8 +17,6 @@ import java.util.List;
import jakarta.validation.ConstraintViolationException;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -24,195 +25,184 @@ import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.MethodMode;
import org.springframework.test.context.ActiveProfiles;
//@Disabled
@SpringBootTest(classes = es.ujaen.dae.carpoolingdae.app.CarpoolingDaeApplication.class)
@ActiveProfiles(profiles = { "test" })
public class SistemaCarpoolingTest {
@Autowired
SistemaCarpooling sistemaCarpooling;
// Accedemos al sistema
@Test
public void testAccesoSistemaCarpooling() {
Assertions.assertThat(sistemaCarpooling).isNotNull();
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaUsuarioInvalido() {
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"+34600123456",
"mred.ujaen.es",
"clave");
Assertions.assertThatThrownBy(() -> sistemaCarpooling.altaUsuario(usuario))
.isInstanceOf(ConstraintViolationException.class);
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaYLoginUsuario() {
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"+34600123456",
"mhm@red.ujaen.es",
clave);
Usuario usuario1 = sistemaCarpooling.altaUsuario(usuario);
Usuario usuarioLogin = sistemaCarpooling.loginUsuario(usuario.getDni(), "mariahm")
.orElseThrow(() -> new UsuarioNoRegistrado());
Assertions.assertThat(usuarioLogin).isNotNull();
Assertions.assertThat(usuarioLogin.getDni()).isEqualTo(usuario1.getDni());
Assertions.assertThat(usuarioLogin.getEmail()).isEqualTo(usuario1.getEmail());
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAgregarViaje() {
// Crear un objeto Viaje válido
Viaje viaje = new Viaje(
// ID del viaje
"Destino",
"Origen",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"+34600123456",
"mhm@red.ujaen.es",
clave);
// Agregar el viaje al sistema
sistemaCarpooling.agregarViaje(usuario, viaje);
// el viaje paraver si ha sido añadido
String origenBusqueda = "Origen";
String destinoBusqueda = "Destino";
LocalDateTime fechaBusqueda = LocalDateTime.of(2023, 9, 30, 8, 0);
List<Viaje> viajesEncontrados = sistemaCarpooling.buscarViajes(origenBusqueda, destinoBusqueda,
fechaBusqueda);
Viaje viajeEnc = viajesEncontrados.get(0);
Assertions.assertThat(viajeEnc.getDestino()).isEqualTo(viaje.getDestino());
Assertions.assertThat(viajeEnc.getOrigen()).isEqualTo(viaje.getOrigen());
Assertions.assertThat(viajeEnc.getfechaHora()).isEqualTo(viaje.getfechaHora());
Assertions.assertThat(viajeEnc.getPlazasDisponibles()).isEqualTo(viaje.getPlazasDisponibles());
Assertions.assertThat(viajeEnc.getPrecioAsiento()).isEqualTo(viaje.getPrecioAsiento());
// Verificar que se encuentren los viajes esperados
// Assertions.assertThat(viajesEncontrados).contains(viaje);
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testEnviarSolicitudViaje() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"+34600999999",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"+34600999889",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
sistemaCarpooling.altaUsuario(conductor);
sistemaCarpooling.altaUsuario(pasajero);
sistemaCarpooling.agregarViaje(conductor, viaje);
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
assertTrue(viaje.usuariosSolicitantes.contains(pasajero));
}
@Test
public void testAceptarPasajeroViaje() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"+34600999999",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"+34600999889",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
sistemaCarpooling.altaUsuario(conductor);
sistemaCarpooling.altaUsuario(pasajero);
sistemaCarpooling.agregarViaje(conductor, viaje);
viaje.setEstado(EstadoViaje.PENDIENTE);
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
sistemaCarpooling.aceptarPasajeroViaje(viaje, pasajero, conductor);
@Autowired
SistemaCarpooling sistemaCarpooling;
// Accedemos al sistema
@Test
public void testAccesoSistemaCarpooling() {
Assertions.assertThat(sistemaCarpooling).isNotNull();
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaUsuarioInvalido() {
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"+34600123456",
"mred.ujaen.es",
"clave");
Assertions.assertThatThrownBy(() -> sistemaCarpooling.altaUsuario(usuario))
.isInstanceOf(ConstraintViolationException.class);
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaYLoginUsuario() {
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"+34600123456",
"mhm@red.ujaen.es",
clave);
Usuario usuario1 = sistemaCarpooling.altaUsuario(usuario);
Usuario usuarioLogin = sistemaCarpooling.loginUsuario(usuario.getDni(), "mariahm")
.orElseThrow(() -> new UsuarioNoRegistrado());
Assertions.assertThat(usuarioLogin).isNotNull();
Assertions.assertThat(usuarioLogin.getDni()).isEqualTo(usuario1.getDni());
Assertions.assertThat(usuarioLogin.getEmail()).isEqualTo(usuario1.getEmail());
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAgregarViaje() {
// Crear un objeto Viaje válido
Viaje viaje = new Viaje(
// ID del viaje
"Destino",
"Origen",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"+34600123456",
"mhm@red.ujaen.es",
clave);
// Agregar el viaje al sistema
sistemaCarpooling.agregarViaje(usuario, viaje);
// el viaje paraver si ha sido añadido
String origenBusqueda = "Origen";
String destinoBusqueda = "Destino";
LocalDateTime fechaBusqueda = LocalDateTime.of(2023, 9, 30, 8, 0);
List<Viaje> viajesEncontrados = sistemaCarpooling.buscarViajes(origenBusqueda, destinoBusqueda, fechaBusqueda);
Viaje viajeEnc=viajesEncontrados.get(0);
Assertions.assertThat(viajeEnc.getDestino()).isEqualTo(viaje.getDestino());
Assertions.assertThat(viajeEnc.getOrigen()).isEqualTo(viaje.getOrigen());
Assertions.assertThat(viajeEnc.getfechaHora()).isEqualTo(viaje.getfechaHora());
Assertions.assertThat(viajeEnc.getPlazasDisponibles()).isEqualTo(viaje.getPlazasDisponibles());
Assertions.assertThat(viajeEnc.getPrecioAsiento()).isEqualTo(viaje.getPrecioAsiento());
// Verificar que se encuentren los viajes esperados
// Assertions.assertThat(viajesEncontrados).contains(viaje);
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testEnviarSolicitudViaje() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"+34600999999",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"+34600999889",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
sistemaCarpooling.altaUsuario(conductor);
sistemaCarpooling.altaUsuario(pasajero);
sistemaCarpooling.agregarViaje(conductor, viaje);
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
assertTrue(viaje.usuariosSolicitantes.contains(pasajero));
}
@Test
public void testAceptarPasajeroViaje() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"+34600999999",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"+34600999889",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
sistemaCarpooling.altaUsuario(conductor);
sistemaCarpooling.altaUsuario(pasajero);
sistemaCarpooling.agregarViaje(conductor, viaje);
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
sistemaCarpooling.aceptarPasajeroViaje(viaje, pasajero, conductor);
assertTrue(viaje.usuariosConfirmados.contains(pasajero));
}
}
assertTrue(viaje.usuariosConfirmados.contains(pasajero));
assertEquals(EstadoViaje.PENDIENTE, viaje.getEstado());
}
}
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