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.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
......
...@@ -18,6 +18,8 @@ import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor; ...@@ -18,6 +18,8 @@ import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5; import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
import es.ujaen.dae.carpoolingdae.utils.ExprReg; import es.ujaen.dae.carpoolingdae.utils.ExprReg;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType; import javax.persistence.FetchType;
...@@ -25,14 +27,14 @@ import javax.persistence.Id; ...@@ -25,14 +27,14 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
/** /**
* Usuario a la app de carpooling * Usuario a la app de carpooling
* *
* @author maria * @author maria
*/ */
@Data
@NoArgsConstructor
@Entity @Entity
public class Usuario implements Serializable { public class Usuario implements Serializable {
...@@ -87,22 +89,6 @@ public class Usuario implements Serializable { ...@@ -87,22 +89,6 @@ public class Usuario implements Serializable {
return dni; 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() { public String getEmail() {
return email; return email;
} }
......
...@@ -17,7 +17,11 @@ import javax.validation.constraints.NotBlank; ...@@ -17,7 +17,11 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past; import javax.validation.constraints.Past;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible; import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@Entity @Entity
public class Viaje { public class Viaje {
...@@ -66,10 +70,6 @@ public class Viaje { ...@@ -66,10 +70,6 @@ public class Viaje {
} }
public int getId() {
return id;
}
public String getDestino() { public String getDestino() {
return destino; return destino;
} }
...@@ -86,12 +86,9 @@ public class Viaje { ...@@ -86,12 +86,9 @@ public class Viaje {
return plazasDisponibles; return plazasDisponibles;
} }
public Double getPrecio() {
return precioAsiento;
}
public void enviarSolicitudParaSerPasajero(@NotNull @Valid Viaje viaje, @NotNull @Valid Usuario pasajero) { 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); usuariosSolicitantes.add(pasajero);
} else { } else {
throw new PlazaNoDisponible(); throw new PlazaNoDisponible();
...@@ -105,7 +102,8 @@ public class Viaje { ...@@ -105,7 +102,8 @@ public class Viaje {
usuariosSolicitantes.remove(pasajero); usuariosSolicitantes.remove(pasajero);
usuariosConfirmados.add(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) { if (plazasDisponibles > 0) {
plazasDisponibles--; plazasDisponibles--;
} }
......
...@@ -26,4 +26,8 @@ public class RepositorioUsuarios { ...@@ -26,4 +26,8 @@ public class RepositorioUsuarios {
em.persist(usuario); 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 { ...@@ -75,6 +75,7 @@ public class SistemaCarpooling {
// Agregar el viaje al repositorio de viajes // Agregar el viaje al repositorio de viajes
repositorioViajes.guardarViaje(viaje); 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; package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.Validation; import javax.validation.Validation;
import javax.validation.Validator; import javax.validation.Validator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
...@@ -15,11 +20,12 @@ public class UsuarioTest { ...@@ -15,11 +20,12 @@ public class UsuarioTest {
public UsuarioTest() { public UsuarioTest() {
} }
@Test private Usuario usuario;
void testValidacionUsuario() {
String clave = "mariahm";
Usuario usuario = new Usuario( @BeforeEach
void setUp() {
String clave = "mariahm";
usuario = new Usuario(
"22334455H", "22334455H",
"María", "María",
"Hidalgo Morcillo", "Hidalgo Morcillo",
...@@ -27,7 +33,11 @@ public class UsuarioTest { ...@@ -27,7 +33,11 @@ public class UsuarioTest {
"189273810", "189273810",
"mhm@red.ujaen.es", "mhm@red.ujaen.es",
clave); clave);
}
@Test
void testValidacionUsuario() {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Usuario>> violations = validator.validate(usuario); Set<ConstraintViolation<Usuario>> violations = validator.validate(usuario);
...@@ -36,19 +46,48 @@ public class UsuarioTest { ...@@ -36,19 +46,48 @@ public class UsuarioTest {
@Test @Test
void testComprobacionClave() { void testComprobacionClave() {
String clave = "mariahm"; Assertions.assertThat(usuario.claveValida("mariahm")).isTrue();
}
Usuario usuario = new Usuario( @Test
"22334455H", public void testAgregarViajeComoConductor() {
"María", Viaje viaje = new Viaje(12345,
"Hidalgo Morcillo", "Origen",
LocalDate.of(1990, 11, 1), "Destino",
"189273810", LocalDateTime.of(2023, 9, 30, 8, 0),
"mhm@red.ujaen.es", 2,
clave); 50.0);
usuario.agregarViajeComoConductor(viaje);
assertTrue(usuario.viajesComoConductor.contains(viaje));
}
Assertions.assertThat(usuario.claveValida(clave)).isTrue(); @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; package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertFalse; 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 static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; 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.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; 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; import es.ujaen.dae.carpoolingdae.servicios.SistemaCarpooling;
public class ViajeTest { public class ViajeTest {
@Autowired @Autowired
SistemaCarpooling sistemaCarpooling; SistemaCarpooling sistemaCarpooling;
public ViajeTest() { 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 @Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD) public void testConfirmarPasajero() {
public void testAceptarPasajero() { Usuario pasajero = new Usuario(
// Crear un usuario conductor "87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
Usuario conductor = new Usuario( Usuario conductor = new Usuario(
"12345678A", "12345678A",
"Conductor", "Conductor",
...@@ -33,8 +96,14 @@ public class ViajeTest { ...@@ -33,8 +96,14 @@ public class ViajeTest {
"123456789", "123456789",
"conductor@example.com", "conductor@example.com",
"clave"); "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( Usuario pasajero = new Usuario(
"87654321B", "87654321B",
"Pasajero", "Pasajero",
...@@ -43,37 +112,38 @@ public class ViajeTest { ...@@ -43,37 +112,38 @@ public class ViajeTest {
"987654321", "987654321",
"pasajero@example.com", "pasajero@example.com",
"clave"); "clave");
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
assertThrows(PlazaNoDisponible.class, () -> viaje.confirmarPasajero(pasajero, conductor));
}
// Crear un viaje @Test
Viaje viaje = new Viaje( public void testConfirmarPasajeroNoAvailableSeats() {
12345, Usuario pasajero = new Usuario(
"Origen", "87654321B",
"Destino", "Pasajero",
LocalDateTime.of(2023, 9, 30, 8, 0), "Apellido",
2, LocalDate.of(1995, 5, 5),
50.0); "987654321",
"pasajero@example.com",
"clave");
// 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();
}
// Verificar que el pasajero está en la lista de usuarios confirmados en el viaje Usuario conductor = new Usuario(
assertTrue(viaje.usuariosConfirmados.contains(pasajero)); "12345678A",
// Verificar que el pasajero ya no está en la lista de solicitantes del viaje "Conductor",
assertFalse(viaje.usuariosSolicitantes.contains(pasajero)); "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; package es.ujaen.dae.carpoolingdae.servicios;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
...@@ -9,23 +11,22 @@ import java.util.Optional; ...@@ -9,23 +11,22 @@ import java.util.Optional;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
import java.util.Set;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.MethodMode; import org.springframework.test.annotation.DirtiesContext.MethodMode;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import javax.validation.ConstraintViolation;
import javax.validation.Validation; import javax.validation.ConstraintViolationException;
import javax.validation.Validator;
import es.ujaen.dae.carpoolingdae.entidades.Usuario; import es.ujaen.dae.carpoolingdae.entidades.Usuario;
//import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5; //import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
import es.ujaen.dae.carpoolingdae.entidades.Viaje; import es.ujaen.dae.carpoolingdae.entidades.Viaje;
//@Disabled //@Disabled
@SpringBootTest(classes = es.ujaen.dae.carpoolingdae.app.CarpoolingDaeApplication.class) @SpringBootTest(classes = es.ujaen.dae.carpoolingdae.CarpoolingDaeApplication.class)
@ActiveProfiles(profiles = { "test" }) @ActiveProfiles(profiles = { "test" })
public class SistemaCarpoolingTest { public class SistemaCarpoolingTest {
...@@ -40,10 +41,11 @@ public class SistemaCarpoolingTest { ...@@ -40,10 +41,11 @@ public class SistemaCarpoolingTest {
} }
@Test @Test
void testValidacionUsuario() { @DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaUsuarioInvalido() {
String clave = "mariahm"; String clave = "mariahm";
Usuario usuario = new Usuario( Usuario usuario = new Usuario(
"22334455H", "22334455H",
"María", "María",
"Hidalgo Morcillo", "Hidalgo Morcillo",
...@@ -51,27 +53,10 @@ public class SistemaCarpoolingTest { ...@@ -51,27 +53,10 @@ public class SistemaCarpoolingTest {
"189273810", "189273810",
"mhm@red.ujaen.es", "mhm@red.ujaen.es",
clave); clave);
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Usuario>> violations = validator.validate(usuario);
Assertions.assertThat(violations).isEmpty();
}
@Test
void testComprobacionClave() { Assertions.assertThatThrownBy(() -> sistemaCarpooling.altaUsuario(usuario))
String clave = "mariahm"; .isInstanceOf(ConstraintViolationException.class);
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();
} }
@Test @Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD) @DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
...@@ -197,17 +182,53 @@ public class SistemaCarpoolingTest { ...@@ -197,17 +182,53 @@ public class SistemaCarpoolingTest {
LocalDateTime.of(2023, 9, 30, 8, 0), LocalDateTime.of(2023, 9, 30, 8, 0),
2, 2,
50.0); 50.0);
// Agregar el viaje al sistema sistemaCarpooling.altaUsuario(conductor);
sistemaCarpooling.agregarViaje(conductor,viaje); sistemaCarpooling.altaUsuario(pasajero);
sistemaCarpooling.agregarViaje(conductor, viaje);
// Enviar solicitud de viaje
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero); 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