Commit 042aa73e by María Hidalgo

Tests y persistencia

parent 78446e75
package es.ujaen.dae.carpoolingdae.app;
package es.ujaen.dae.carpoolingdae;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......
......@@ -18,6 +18,8 @@ import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
import es.ujaen.dae.carpoolingdae.utils.ExprReg;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.FetchType;
......@@ -25,14 +27,14 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
/**
* Usuario a la app de carpooling
*
* @author maria
*/
@Data
@NoArgsConstructor
@Entity
public class Usuario implements Serializable {
......@@ -87,22 +89,6 @@ public class Usuario implements Serializable {
return dni;
}
public String getNombre() {
return nombre;
}
public String getApellidos() {
return apellidos;
}
public LocalDate getFecha_nac() {
return fecha_nac;
}
public String getTelef() {
return telef;
}
public String getEmail() {
return email;
}
......
......@@ -17,7 +17,11 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@Entity
public class Viaje {
......@@ -66,10 +70,6 @@ public class Viaje {
}
public int getId() {
return id;
}
public String getDestino() {
return destino;
}
......@@ -86,12 +86,9 @@ public class Viaje {
return plazasDisponibles;
}
public Double getPrecio() {
return precioAsiento;
}
public void enviarSolicitudParaSerPasajero(@NotNull @Valid Viaje viaje, @NotNull @Valid Usuario pasajero) {
if (!usuariosSolicitantes.contains(pasajero) && getPlazas() > 0) { // Sino quedan plazas no puede solicitar unirse
if (!usuariosSolicitantes.contains(pasajero) && getPlazas() > 0) { // Sino quedan plazas no puede solicitar
// unirse
usuariosSolicitantes.add(pasajero);
} else {
throw new PlazaNoDisponible();
......@@ -105,7 +102,8 @@ public class Viaje {
usuariosSolicitantes.remove(pasajero);
usuariosConfirmados.add(pasajero);
// Al añadir al pasajero a la lista de confirmados reduzco el número de plazas disponibles
// Al añadir al pasajero a la lista de confirmados reduzco el número de plazas
// disponibles
if (plazasDisponibles > 0) {
plazasDisponibles--;
}
......
......@@ -26,4 +26,8 @@ public class RepositorioUsuarios {
em.persist(usuario);
}
public void actualizarUsuario(Usuario usuario){
em.merge(usuario);
}
}
## Fichero de configuración para UjaCoin durante testing
# spring.datasource.url: jdbc:mysql://localhost:33060/ujacoin_test
spring.datasource.url: jdbc:h2:mem:ujacoin_test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE;DB_CLOSE_DELAY=-1
spring.jpa.properties.javax.persistence.schema-generation.database.action: drop-and-create
## Fichero de configuración para UjaCoin
spring.datasource.url: jdbc:mysql://localhost:33060/ujacoin
spring.datasource.username: ujacoin
spring.datasource.password: secret
spring.jpa.properties.javax.persistence.schema-generation.database.action: none
spring.data.jpa.repositories.bootstrap-mode: default
......@@ -75,6 +75,7 @@ public class SistemaCarpooling {
// Agregar el viaje al repositorio de viajes
repositorioViajes.guardarViaje(viaje);
repositorioUsuarios.actualizarUsuario(conductor);
}
/**
......
## Fichero de configuración para carpooling durante testing
# spring.datasource.url: jdbc:mysql://localhost:33060/carpooling_test
spring.datasource.url: jdbc:h2:mem:carpooling_test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE;DB_CLOSE_DELAY=-1
spring.jpa.properties.javax.persistence.schema-generation.database.action: drop-and-create
## Fichero de configuraci�n para carpooling
spring.datasource.url: jdbc:mysql://localhost:33060/carpooling
spring.datasource.username: carpooling
spring.datasource.password: secret
spring.jpa.properties.javax.persistence.schema-generation.database.action: drop-and-create
spring.data.jpa.repositories.bootstrap-mode: default
package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
import java.time.LocalDateTime;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.assertj.core.api.Assertions;
......@@ -15,11 +20,12 @@ public class UsuarioTest {
public UsuarioTest() {
}
@Test
void testValidacionUsuario() {
String clave = "mariahm";
private Usuario usuario;
Usuario usuario = new Usuario(
@BeforeEach
void setUp() {
String clave = "mariahm";
usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
......@@ -28,6 +34,10 @@ public class UsuarioTest {
"mhm@red.ujaen.es",
clave);
}
@Test
void testValidacionUsuario() {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Usuario>> violations = validator.validate(usuario);
......@@ -36,19 +46,48 @@ public class UsuarioTest {
@Test
void testComprobacionClave() {
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"189273810",
"mhm@red.ujaen.es",
clave);
Assertions.assertThat(usuario.claveValida("mariahm")).isTrue();
}
Assertions.assertThat(usuario.claveValida(clave)).isTrue();
@Test
public void testAgregarViajeComoConductor() {
Viaje viaje = new Viaje(12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
usuario.agregarViajeComoConductor(viaje);
assertTrue(usuario.viajesComoConductor.contains(viaje));
}
@Test
public void testAceptarPasajero() {
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
Viaje viaje = new Viaje(12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
usuario.agregarViajeComoConductor(viaje);
viaje.confirmarPasajero(pasajero, conductor);
assertTrue(viaje.usuariosConfirmados.contains(pasajero));
}
}
package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.MethodMode;
import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import es.ujaen.dae.carpoolingdae.servicios.SistemaCarpooling;
public class ViajeTest {
@Autowired
SistemaCarpooling sistemaCarpooling;
public ViajeTest() {
}
private Viaje viaje;
@BeforeEach
void setUp() {
// Direccion direccion = new Direccion("España", "Jaen", "SanJuan", 19);
viaje = new Viaje(12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
}
@Test
void testValidacionViaje() {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Viaje>> violations = validator.validate(viaje);
Assertions.assertThat(violations).isEmpty();
}
@Test
public void testEnviarSolicitudParaSerPasajero() {
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
viaje.enviarSolicitudParaSerPasajero(viaje, pasajero);
assertTrue(viaje.usuariosSolicitantes.contains(pasajero));
}
@Test
public void testEnviarSolicitudParaSerPasajeroNoDisponible() {
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
viaje.setPlazasDisponibles(0);
assertThrows(PlazaNoDisponible.class, () -> viaje.enviarSolicitudParaSerPasajero(viaje, pasajero));
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAceptarPasajero() {
// Crear un usuario conductor
public void testConfirmarPasajero() {
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
......@@ -33,8 +96,14 @@ public class ViajeTest {
"123456789",
"conductor@example.com",
"clave");
viaje.getUsuariosSolicitantes().add(pasajero);
viaje.confirmarPasajero(pasajero, conductor);
assertTrue(viaje.usuariosConfirmados.contains(pasajero));
assertFalse(viaje.usuariosSolicitantes.contains(pasajero));
}
// Crear un usuario pasajero
@Test
public void testConfirmarPasajeroNoSolicitante() {
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
......@@ -43,37 +112,38 @@ public class ViajeTest {
"987654321",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
// Agregar el viaje al sistema
sistemaCarpooling.agregarViaje(conductor, viaje);
// Enviar solicitud de viaje
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
// Aceptar al pasajero en el viaje llamando a la función en Viaje
try {
viaje.confirmarPasajero(pasajero, conductor);
} catch (NoAceptaConductor e) {
// Manejar la excepción si el conductor no es el correcto (opcional)
e.printStackTrace();
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
assertThrows(PlazaNoDisponible.class, () -> viaje.confirmarPasajero(pasajero, conductor));
}
// Verificar que el pasajero está en la lista de usuarios confirmados en el viaje
assertTrue(viaje.usuariosConfirmados.contains(pasajero));
// Verificar que el pasajero ya no está en la lista de solicitantes del viaje
assertFalse(viaje.usuariosSolicitantes.contains(pasajero));
@Test
public void testConfirmarPasajeroNoAvailableSeats() {
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
viaje.setPlazasDisponibles(0);
viaje.getUsuariosSolicitantes().add(pasajero);
assertThrows(PlazaNoDisponible.class, () -> viaje.confirmarPasajero(pasajero, conductor));
}
}
package es.ujaen.dae.carpoolingdae.servicios;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
......@@ -9,23 +11,22 @@ import java.util.Optional;
import org.assertj.core.api.Assertions;
import java.util.Set;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.MethodMode;
import org.springframework.test.context.ActiveProfiles;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ConstraintViolationException;
import es.ujaen.dae.carpoolingdae.entidades.Usuario;
//import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
import es.ujaen.dae.carpoolingdae.entidades.Viaje;
//@Disabled
@SpringBootTest(classes = es.ujaen.dae.carpoolingdae.app.CarpoolingDaeApplication.class)
@SpringBootTest(classes = es.ujaen.dae.carpoolingdae.CarpoolingDaeApplication.class)
@ActiveProfiles(profiles = { "test" })
public class SistemaCarpoolingTest {
......@@ -40,7 +41,8 @@ public class SistemaCarpoolingTest {
}
@Test
void testValidacionUsuario() {
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaUsuarioInvalido() {
String clave = "mariahm";
Usuario usuario = new Usuario(
......@@ -52,26 +54,9 @@ public class SistemaCarpoolingTest {
"mhm@red.ujaen.es",
clave);
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Usuario>> violations = validator.validate(usuario);
Assertions.assertThat(violations).isEmpty();
}
@Test
void testComprobacionClave() {
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"189273810",
"mhm@red.ujaen.es",
clave);
Assertions.assertThat(usuario.claveValida(clave)).isTrue();
Assertions.assertThatThrownBy(() -> sistemaCarpooling.altaUsuario(usuario))
.isInstanceOf(ConstraintViolationException.class);
}
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
......@@ -199,15 +184,51 @@ public class SistemaCarpoolingTest {
50.0);
// Agregar el viaje al sistema
sistemaCarpooling.agregarViaje(conductor,viaje);
// Enviar solicitud de viaje
sistemaCarpooling.altaUsuario(conductor);
sistemaCarpooling.altaUsuario(pasajero);
sistemaCarpooling.agregarViaje(conductor, viaje);
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
assertTrue(viaje.getUsuariosSolicitantes().contains(pasajero));
}
@Test
public void testAceptarPasajeroViaje() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
12345,
"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.getUsuariosConfirmados().contains(pasajero));
}
}
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