diff --git a/src/main/java/madstodolist/model/Tarea.java b/src/main/java/madstodolist/model/Tarea.java index 9839012..76b8254 100644 --- a/src/main/java/madstodolist/model/Tarea.java +++ b/src/main/java/madstodolist/model/Tarea.java @@ -35,6 +35,8 @@ public Tarea(Usuario usuario, String titulo) { setUsuario(usuario); // Esto añadirá la tarea a la lista de tareas del usuario } + // Getters y setters básicos + public Long getId() { return id; } @@ -51,10 +53,14 @@ public void setTitulo(String titulo) { this.titulo = titulo; } + // Getters y setters de la relación muchos-a-uno con Usuario + public Usuario getUsuario() { return usuario; } + // Método para establecer la relación con el usuario + public void setUsuario(Usuario usuario) { // Comprueba si el usuario ya está establecido if(this.usuario != usuario) { diff --git a/src/main/java/madstodolist/model/Usuario.java b/src/main/java/madstodolist/model/Usuario.java index adfc176..22df862 100644 --- a/src/main/java/madstodolist/model/Usuario.java +++ b/src/main/java/madstodolist/model/Usuario.java @@ -39,6 +39,8 @@ public Usuario(String email) { this.email = email; } + // Getters y setters atributos básicos + public Long getId() { return id; } @@ -79,10 +81,13 @@ public void setFechaNacimiento(Date fechaNacimiento) { this.fechaNacimiento = fechaNacimiento; } + // Getters y setters de la relación + public Set getTareas() { return tareas; } + // Método helper para añadir una tarea a la lista y establecer la relación inversa public void addTarea(Tarea tarea) { // Si la tarea ya está en la lista, no la añadimos if (tareas.contains(tarea)) return; diff --git a/src/test/java/madstodolist/controller/TareaWebTest.java b/src/test/java/madstodolist/controller/TareaWebTest.java index f81128c..cb008e7 100644 --- a/src/test/java/madstodolist/controller/TareaWebTest.java +++ b/src/test/java/madstodolist/controller/TareaWebTest.java @@ -13,6 +13,9 @@ import org.springframework.test.context.jdbc.Sql; import org.springframework.test.web.servlet.MockMvc; +import java.util.HashMap; +import java.util.Map; + import static org.hamcrest.Matchers.*; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; @@ -37,32 +40,33 @@ public class TareaWebTest { @MockBean private ManagerUserSession managerUserSession; - class DosIds { - Long usuarioId; - Long tareaId; - public DosIds(Long usuarioId, Long tareaId) { - this.usuarioId = usuarioId; - this.tareaId = tareaId; - } - } - // Método para inicializar los datos de prueba en la BD - // Devuelve una pareja de identificadores del usuario y la primera tarea añadida - DosIds addUsuarioTareasBD() { + // Devuelve un mapa con los identificadores del usuario y de la primera tarea añadida + + Map addUsuarioTareasBD() { + // Añadimos un usuario a la base de datos UsuarioData usuario = new UsuarioData(); usuario.setEmail("user@ua"); usuario.setPassword("123"); usuario = usuarioService.registrar(usuario); + + // Y añadimos dos tareas asociadas a ese usuario TareaData tarea1 = tareaService.nuevaTareaUsuario(usuario.getId(), "Lavar coche"); tareaService.nuevaTareaUsuario(usuario.getId(), "Renovar DNI"); - return new DosIds(usuario.getId(), tarea1.getId()); + + // Devolvemos los ids del usuario y de la primera tarea añadida + Map ids = new HashMap<>(); + ids.put("usuarioId", usuario.getId()); + ids.put("tareaId", tarea1.getId()); + return ids; + } @Test public void listaTareas() throws Exception { // GIVEN // Un usuario con dos tareas en la BD - Long usuarioId = addUsuarioTareasBD().usuarioId; + Long usuarioId = addUsuarioTareasBD().get("usuarioId"); // Moqueamos el método usuarioLogeado para que devuelva el usuario 1L, // el mismo que se está usando en la petición. De esta forma evitamos @@ -87,7 +91,7 @@ public void listaTareas() throws Exception { public void getNuevaTareaDevuelveForm() throws Exception { // GIVEN // Un usuario con dos tareas en la BD - Long usuarioId = addUsuarioTareasBD().usuarioId; + Long usuarioId = addUsuarioTareasBD().get("usuarioId"); // Ver el comentario en el primer test when(managerUserSession.usuarioLogeado()).thenReturn(usuarioId); @@ -111,7 +115,7 @@ public void getNuevaTareaDevuelveForm() throws Exception { public void postNuevaTareaDevuelveRedirectYAñadeTarea() throws Exception { // GIVEN // Un usuario con dos tareas en la BD - Long usuarioId = addUsuarioTareasBD().usuarioId; + Long usuarioId = addUsuarioTareasBD().get("usuarioId"); // Ver el comentario en el primer test when(managerUserSession.usuarioLogeado()).thenReturn(usuarioId); @@ -140,9 +144,9 @@ public void getNuevaTareaDevuelveForm() throws Exception { public void deleteTareaDevuelveOKyBorraTarea() throws Exception { // GIVEN // Un usuario con dos tareas en la BD - DosIds dosIds = addUsuarioTareasBD(); - Long usuarioId = dosIds.usuarioId; - Long tareaLavarCocheId = dosIds.tareaId; + Map ids = addUsuarioTareasBD(); + Long usuarioId = ids.get("usuarioId"); + Long tareaLavarCocheId = ids.get("tareaId"); // Ver el comentario en el primer test when(managerUserSession.usuarioLogeado()).thenReturn(usuarioId); @@ -170,9 +174,9 @@ public void deleteTareaDevuelveOKyBorraTarea() throws Exception { public void editarTareaActualizaLaTarea() throws Exception { // GIVEN // Un usuario con dos tareas en la BD - DosIds dosIds = addUsuarioTareasBD(); - Long usuarioId = dosIds.usuarioId; - Long tareaLavarCocheId = dosIds.tareaId; + Map ids = addUsuarioTareasBD(); + Long usuarioId = ids.get("usuarioId"); + Long tareaLavarCocheId = ids.get("tareaId"); // Ver el comentario en el primer test when(managerUserSession.usuarioLogeado()).thenReturn(usuarioId); diff --git a/src/test/java/madstodolist/service/TareaServiceTest.java b/src/test/java/madstodolist/service/TareaServiceTest.java index 5789c53..9d549ad 100644 --- a/src/test/java/madstodolist/service/TareaServiceTest.java +++ b/src/test/java/madstodolist/service/TareaServiceTest.java @@ -34,9 +34,15 @@ Map addUsuarioTareasBD() { UsuarioData usuario = new UsuarioData(); usuario.setEmail("user@ua"); usuario.setPassword("123"); + + // Añadimos un usuario a la base de datos UsuarioData usuarioNuevo = usuarioService.registrar(usuario); + + // Y añadimos dos tareas asociadas a ese usuario TareaData tarea1 = tareaService.nuevaTareaUsuario(usuarioNuevo.getId(), "Lavar coche"); tareaService.nuevaTareaUsuario(usuarioNuevo.getId(), "Renovar DNI"); + + // Devolvemos los ids del usuario y de la primera tarea añadida Map ids = new HashMap<>(); ids.put("usuarioId", usuarioNuevo.getId()); ids.put("tareaId", tarea1.getId()); @@ -93,7 +99,7 @@ public void testModificarTarea() { Long tareaId = ids.get("tareaId"); // WHEN - // modificamos la tarea correspondiente a ese identificador, + // modificamos la tarea correspondiente al identificador, tareaService.modificaTarea(tareaId, "Limpiar los cristales del coche"); diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 9e9b570..340625d 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -2,12 +2,12 @@ spring.datasource.url=jdbc:h2:mem:test spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create logging.level.org.hibernate.SQL=debug -# Es necesario definir el sql.init.mode a never para evitar -# que se carguen los datos de src/main/resources/data.sql spring.sql.init.mode=never + # obligamos a que Hibernate inicialice los esquemas de datos # https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes#sql-script-datasource-initialization spring.jpa.defer-datasource-initialization=true + # Deshabilitamos Open EntityManager in View # https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/data.html#data.sql.jpa-and-spring-data.open-entity-manager-in-view # Ver tambien https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/orm/hibernate5/support/OpenSessionInViewInterceptor.html