Commit 4da14105 by Rubén Ramírez

feat: [BibliotecaPersonalController]: Creadas funciones en el controlador con su test

parent 25ef7c1b
...@@ -50,16 +50,24 @@ public class BibliotecaPersonalController { ...@@ -50,16 +50,24 @@ public class BibliotecaPersonalController {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} }
boolean yaExiste = servicioBibliotecaPersonal.listarPorCategoria(biblioteca.getId(), dtoRecursoEnBiblioteca.getCategoria())
.stream()
.anyMatch(bpr -> bpr.getRecurso().getId().equals(recursoId));
if (yaExiste) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}
servicioBibliotecaPersonal.anadirRecursoBiblioteca(biblioteca, recurso, dtoRecursoEnBiblioteca.getCategoria()); servicioBibliotecaPersonal.anadirRecursoBiblioteca(biblioteca, recurso, dtoRecursoEnBiblioteca.getCategoria());
return ResponseEntity.status(HttpStatus.CREATED).build(); return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (RecursoNoExiste e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
} }
@GetMapping("/{usuarioId}/recursos/categoria/{categoria}") @GetMapping("/{usuarioId}/recursos/categoria/{categoria}")
public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria(@PathVariable Long usuarioId, @PathVariable Categoria categoria) { public ResponseEntity<List<DTORecursoEnBiblioteca>> listarRecursosPorCategoria(@PathVariable Long usuarioId, @PathVariable Categoria categoria) {
try { try {
...@@ -89,7 +97,7 @@ public class BibliotecaPersonalController { ...@@ -89,7 +97,7 @@ public class BibliotecaPersonalController {
} }
servicioBibliotecaPersonal.eliminarRecurso(biblioteca.getId(), recursoId); servicioBibliotecaPersonal.eliminarRecurso(biblioteca.getId(), recursoId);
return ResponseEntity.status(HttpStatus.OK).body("Recurso eliminado correctamente"); return ResponseEntity.status(HttpStatus.OK).build();
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
...@@ -107,7 +115,7 @@ public class BibliotecaPersonalController { ...@@ -107,7 +115,7 @@ public class BibliotecaPersonalController {
servicioBibliotecaPersonal.modificarCategoria(biblioteca.getId(), recursoId, dtoRecurso.getCategoria()); servicioBibliotecaPersonal.modificarCategoria(biblioteca.getId(), recursoId, dtoRecurso.getCategoria());
return ResponseEntity.status(HttpStatus.OK).build(); return ResponseEntity.status(HttpStatus.OK).build();
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error interno"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
} }
......
...@@ -28,6 +28,7 @@ public class ServicioSeguridad { ...@@ -28,6 +28,7 @@ public class ServicioSeguridad {
.httpBasic(httpBasic -> httpBasic.realmName("mangaffinity")) .httpBasic(httpBasic -> httpBasic.realmName("mangaffinity"))
.authorizeHttpRequests(request -> request .authorizeHttpRequests(request -> request
.requestMatchers(HttpMethod.POST, "/usuarios/{email}").permitAll() .requestMatchers(HttpMethod.POST, "/usuarios/{email}").permitAll()
.requestMatchers(HttpMethod.GET, "/usuarios/email/{email}").permitAll()
.requestMatchers(HttpMethod.POST, "/usuarios/").permitAll() .requestMatchers(HttpMethod.POST, "/usuarios/").permitAll()
.requestMatchers(HttpMethod.GET, "/recursos/titulo/**").permitAll() .requestMatchers(HttpMethod.GET, "/recursos/titulo/**").permitAll()
.requestMatchers(HttpMethod.GET, "/recursos/autor/**").permitAll() .requestMatchers(HttpMethod.GET, "/recursos/autor/**").permitAll()
...@@ -40,12 +41,13 @@ public class ServicioSeguridad { ...@@ -40,12 +41,13 @@ public class ServicioSeguridad {
.requestMatchers(HttpMethod.DELETE, "/recursos/{id}").hasAuthority("ROLE_ADMIN") .requestMatchers(HttpMethod.DELETE, "/recursos/{id}").hasAuthority("ROLE_ADMIN")
.requestMatchers(HttpMethod.POST, "/recursos/{id}/capitulos").hasAuthority("ROLE_ADMIN") .requestMatchers(HttpMethod.POST, "/recursos/{id}/capitulos").hasAuthority("ROLE_ADMIN")
.requestMatchers(HttpMethod.GET, "/recursos/{id}/capitulos").permitAll() .requestMatchers(HttpMethod.GET, "/recursos/{id}/capitulos").permitAll()
.requestMatchers(HttpMethod.GET, "/usuarios/{usuarioId}/biblioteca").permitAll()
// 🔹 Protección de las rutas de la biblioteca (solo usuarios autenticados)
.requestMatchers(HttpMethod.POST, "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria").authenticated() .requestMatchers(HttpMethod.POST, "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria").authenticated()
.requestMatchers(HttpMethod.GET, "/biblioteca/{usuarioId}/recursos/categoria/{categoria}").authenticated() .requestMatchers(HttpMethod.GET, "/biblioteca/{usuarioId}/recursos/categoria/{categoria}").authenticated()
.requestMatchers(HttpMethod.DELETE, "/biblioteca/{usuarioId}/recursos/{recursoId}").authenticated() // ✅ Nueva regla .requestMatchers(HttpMethod.DELETE, "/biblioteca/{usuarioId}/recursos/{recursoId}").authenticated()
.requestMatchers(HttpMethod.PUT, "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria").authenticated() // ✅ Nueva regla .requestMatchers(HttpMethod.PUT, "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria").authenticated()
.anyRequest().authenticated() .anyRequest().authenticated()
) )
......
...@@ -20,6 +20,32 @@ import org.springframework.test.context.ActiveProfiles; ...@@ -20,6 +20,32 @@ import org.springframework.test.context.ActiveProfiles;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Map; import java.util.Map;
import com.ujaen.tfg.mangaffinity.MangAffinityApplication;
import com.ujaen.tfg.mangaffinity.config.JpaTestConfig;
import com.ujaen.tfg.mangaffinity.entidades.Categoria;
import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOLoginRespuesta;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecursoEnBiblioteca;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.*;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import java.time.LocalDate;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(classes = {MangAffinityApplication.class, JpaTestConfig.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(classes = {MangAffinityApplication.class, JpaTestConfig.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
...@@ -36,21 +62,21 @@ public class TestBibliotecaPersonalController { ...@@ -36,21 +62,21 @@ public class TestBibliotecaPersonalController {
@Test @Test
@DirtiesContext @DirtiesContext
void testAnadirRecursoBiblioteca() { void testAnadirRecursoBiblioteca() {
// 🔹 Registrar administrador // Registro un administrador
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com", "email", "admin@example.com",
"nombreUsuario", "admin", "nombreUsuario", "admin",
"contrasenia", "adminpassword" "contrasenia", "adminpassword"
), Void.class); ), Void.class);
// 🔹 Iniciar sesión del administrador // Inicio sesión con el administrador
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of( var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword" "clave", "adminpassword"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// 🔹 Registrar usuario normal // Registro un usuario normal
ResponseEntity<Void> respuestaUsuario = restTemplate.postForEntity("/usuarios/", Map.of( ResponseEntity<Void> respuestaUsuario = restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com", "email", "usuario@example.com",
"nombreUsuario", "usuario", "nombreUsuario", "usuario",
...@@ -58,14 +84,13 @@ public class TestBibliotecaPersonalController { ...@@ -58,14 +84,13 @@ public class TestBibliotecaPersonalController {
), Void.class); ), Void.class);
assertThat(respuestaUsuario.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaUsuario.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 🔹 Iniciar sesión del usuario // Inicio sesión con el usuario
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// 🔹 Buscar el usuario creado para obtener su ID
ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange( ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com" "/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
); );
...@@ -73,7 +98,7 @@ public class TestBibliotecaPersonalController { ...@@ -73,7 +98,7 @@ public class TestBibliotecaPersonalController {
Long usuarioId = respuestaUsuarioId.getBody(); Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull(); assertThat(usuarioId).isNotNull();
// 🔹 Crear un recurso con el administrador // Creo un recurso con el administrador
Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba"); Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba");
HttpHeaders headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
...@@ -83,18 +108,16 @@ public class TestBibliotecaPersonalController { ...@@ -83,18 +108,16 @@ public class TestBibliotecaPersonalController {
var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class); var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 🔹 Buscar el recurso creado para obtener su ID
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Titulo Prueba" "/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Titulo Prueba"
); );
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotEmpty(); assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// 🔹 Usuario añade el recurso a su biblioteca // Añado con el usuario el recurso a su biblioteca
DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(null, "Titulo Prueba", Categoria.AL_DIA); DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(recursoId, "Titulo Prueba", Categoria.AL_DIA);
HttpHeaders headersUser = new HttpHeaders(); HttpHeaders headersUser = new HttpHeaders();
headersUser.set("Authorization", tokenUser); headersUser.set("Authorization", tokenUser);
headersUser.setContentType(MediaType.APPLICATION_JSON); headersUser.setContentType(MediaType.APPLICATION_JSON);
...@@ -106,217 +129,273 @@ public class TestBibliotecaPersonalController { ...@@ -106,217 +129,273 @@ public class TestBibliotecaPersonalController {
HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId
); );
// 🔹 Verificar que se añadió correctamente
assertThat(respuestaBiblioteca.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaBiblioteca.getStatusCode()).isEqualTo(HttpStatus.CREATED);
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testListarRecursosPorCategoria() { void testListarRecursosPorCategoria() {
// 🔹 Registrar un administrador // Registro un administrador
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com", "email", "admin@example.com",
"nombreUsuario", "admin", "nombreUsuario", "admin",
"contrasenia", "adminpassword" "contrasenia", "adminpassword"
), Void.class); ), Void.class);
// 🔹 Iniciar sesión del administrador // Inicio sesión del administrador
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of( var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword" "clave", "adminpassword"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// 🔹 Registrar un usuario normal // Registro un usuario normal
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com", "email", "usuario@example.com",
"nombreUsuario", "usuario", "nombreUsuario", "usuario",
"contrasenia", "password" "contrasenia", "password"
), Void.class); ), Void.class);
// 🔹 Iniciar sesión del usuario // Inicio sesión del usuario
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// 🔹 Crear el recurso con el administrador // Creo el recurso con el administrador
HttpHeaders headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.APPLICATION_JSON);
Recurso recurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba"); Recurso recurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba");
HttpEntity<Recurso> requestAdmin = new HttpEntity<>(recurso, headersAdmin); HttpEntity<Recurso> requestAdmin = new HttpEntity<>(recurso, headersAdmin);
restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class); ResponseEntity<Void> respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 🔹 Buscar el recurso creado para obtener su ID
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Titulo Prueba" "/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Titulo Prueba"
); );
// ✅ Verificar que el recurso fue encontrado antes de obtener su ID
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotNull().isNotEmpty(); assertThat(respuestaBusqueda.getBody()).isNotNull().isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// 🔹 Usuario añade el recurso a su biblioteca ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
);
assertThat(respuestaUsuarioId.getStatusCode()).isEqualTo(HttpStatus.OK);
Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull();
// Añado con el usuario el recurso a su biblioteca
HttpHeaders headersUser = new HttpHeaders(); HttpHeaders headersUser = new HttpHeaders();
headersUser.set("Authorization", tokenUser); headersUser.set("Authorization", tokenUser);
headersUser.setContentType(MediaType.APPLICATION_JSON);
DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(null, "Titulo Prueba", Categoria.AL_DIA); DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(null, "Titulo Prueba", Categoria.AL_DIA);
HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser); HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser);
ResponseEntity<Void> respuestaAñadir = restTemplate.exchange( ResponseEntity<Void> respuestaAñadir = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria", "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria",
HttpMethod.POST, bibliotecaRequest, Void.class, 1, recursoId HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 🔹 Listar los recursos de la biblioteca personal filtrados por categoría // Listo los recursos de la biblioteca personal filtrados por categoría
ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange( ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}", "/biblioteca/{usuarioId}/recursos/categoria/{categoria}",
HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, 1, Categoria.AL_DIA.name() HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, usuarioId, Categoria.AL_DIA.name()
); );
// 🔹 Validaciones del test // Validaciones
assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getBody()).isNotNull().isNotEmpty(); assertThat(respuestaLista.getBody()).isNotNull().isNotEmpty();
assertThat(respuestaLista.getBody()[0].getTitulo()).isEqualTo("Titulo Prueba"); assertThat(respuestaLista.getBody()[0].getTitulo()).isEqualTo("Titulo Prueba");
assertThat(respuestaLista.getBody()[0].getCategoria()).isEqualTo(Categoria.AL_DIA); assertThat(respuestaLista.getBody()[0].getCategoria()).isEqualTo(Categoria.AL_DIA);
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testEliminarRecursoDeBiblioteca() { void testEliminarRecursoDeBiblioteca() {
// Registrar usuario // Registro un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Inicio sesión con el administrador
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro a un usuario normal
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com", "email", "usuario@example.com",
"nombreUsuario", "usuario", "nombreUsuario", "usuario",
"contrasenia", "password" "contrasenia", "password"
), Void.class); ), Void.class);
// Iniciar sesión del usuario // Inicio sesión al usuario
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// Crear un recurso ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
);
assertThat(respuestaUsuarioId.getStatusCode()).isEqualTo(HttpStatus.OK);
Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador
Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor");
HttpHeaders headersUser = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersUser.set("Authorization", tokenUser); headersAdmin.set("Authorization", tokenAdmin);
HttpEntity<Recurso> requestRecurso = new HttpEntity<>(recurso, headersUser); headersAdmin.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Recurso> requestRecurso = new HttpEntity<>(recurso, headersAdmin);
var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestRecurso, Void.class); var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestRecurso, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Buscar el recurso creado para obtener su ID ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange(
ResponseEntity<Recurso[]> respuestaBusqueda = restTemplate.getForEntity( "/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Manga de prueba"
"/recursos/titulo/Manga de prueba", Recurso[].class
); );
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Añadir el recurso a la biblioteca // Añado el recurso a la biblioteca del usuario
HttpHeaders headersUser = new HttpHeaders();
headersUser.set("Authorization", tokenUser);
headersUser.setContentType(MediaType.APPLICATION_JSON);
DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.AL_DIA); DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.AL_DIA);
HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser); HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser);
ResponseEntity<Void> respuestaAñadir = restTemplate.exchange( ResponseEntity<Void> respuestaAñadir = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria", "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria",
HttpMethod.POST, bibliotecaRequest, Void.class, 1, recursoId HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Eliminar el recurso de la biblioteca // Elimino el recurso de la biblioteca
ResponseEntity<String> respuestaEliminar = restTemplate.exchange( ResponseEntity<Void> respuestaEliminar = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}", "/biblioteca/{usuarioId}/recursos/{recursoId}",
HttpMethod.DELETE, new HttpEntity<>(headersUser), String.class, 1, recursoId HttpMethod.DELETE, new HttpEntity<>(headersUser), Void.class, usuarioId, recursoId
); );
assertThat(respuestaEliminar.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaEliminar.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaEliminar.getBody()).isEqualTo("Recurso eliminado correctamente");
// Verificar que el recurso ya no está en la biblioteca // Verifico que el recurso ya no está en la biblioteca
ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange( ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}", "/biblioteca/{usuarioId}/recursos/categoria/{categoria}",
HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, 1, Categoria.AL_DIA.name() HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, usuarioId, Categoria.AL_DIA.name()
); );
assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getBody()).isNotNull();
assertThat(respuestaLista.getBody()).isEmpty(); assertThat(respuestaLista.getBody()).isEmpty();
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testModificarCategoriaDeRecurso() { void testModificarCategoriaDeRecurso() {
// Registrar usuario // Registro un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Inicio sesión con el administrador
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro un usuario normal
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com", "email", "usuario@example.com",
"nombreUsuario", "usuario", "nombreUsuario", "usuario",
"contrasenia", "password" "contrasenia", "password"
), Void.class); ), Void.class);
// Iniciar sesión del usuario // Inicio sesión con el usuario
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// Crear un recurso ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
);
assertThat(respuestaUsuarioId.getStatusCode()).isEqualTo(HttpStatus.OK);
Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador
Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor");
HttpHeaders headersUser = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersUser.set("Authorization", tokenUser); headersAdmin.set("Authorization", tokenAdmin);
HttpEntity<Recurso> requestRecurso = new HttpEntity<>(recurso, headersUser); headersAdmin.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Recurso> requestRecurso = new HttpEntity<>(recurso, headersAdmin);
var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestRecurso, Void.class); var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestRecurso, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Buscar el recurso creado para obtener su ID ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange(
ResponseEntity<Recurso[]> respuestaBusqueda = restTemplate.getForEntity( "/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Manga de prueba"
"/recursos/titulo/Manga de prueba", Recurso[].class
); );
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Añadir el recurso a la biblioteca con una categoría inicial // Añado el recurso a la biblioteca del usuario con categoría inicial
HttpHeaders headersUser = new HttpHeaders();
headersUser.set("Authorization", tokenUser);
headersUser.setContentType(MediaType.APPLICATION_JSON);
DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.AL_DIA); DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.AL_DIA);
HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser); HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser);
ResponseEntity<Void> respuestaAñadir = restTemplate.exchange( ResponseEntity<Void> respuestaAñadir = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria", "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria",
HttpMethod.POST, bibliotecaRequest, Void.class, 1, recursoId HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Modificar la categoría del recurso en la biblioteca // Modifico la categoría del recurso en la biblioteca
DTORecursoEnBiblioteca dtoModificado = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.COMPLETADO); DTORecursoEnBiblioteca dtoModificado = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.COMPLETADO);
HttpEntity<DTORecursoEnBiblioteca> categoriaRequest = new HttpEntity<>(dtoModificado, headersUser); HttpEntity<DTORecursoEnBiblioteca> categoriaRequest = new HttpEntity<>(dtoModificado, headersUser);
ResponseEntity<String> respuestaModificar = restTemplate.exchange( ResponseEntity<Void> respuestaModificar = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria", "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria",
HttpMethod.PUT, categoriaRequest, String.class, 1, recursoId HttpMethod.PUT, categoriaRequest, Void.class, usuarioId, recursoId
); );
assertThat(respuestaModificar.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaModificar.getStatusCode()).isEqualTo(HttpStatus.OK);
// Verificar que la categoría ha cambiado // Verificp que la categoría ha cambiado
ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange( ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}", "/biblioteca/{usuarioId}/recursos/categoria/{categoria}",
HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, 1, Categoria.COMPLETADO.name() HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, usuarioId, Categoria.COMPLETADO.name()
); );
assertThat(respuestaLista.getBody()).isNotEmpty(); assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getBody()).isNotNull().isNotEmpty();
assertThat(respuestaLista.getBody()[0].getCategoria()).isEqualTo(Categoria.COMPLETADO); assertThat(respuestaLista.getBody()[0].getCategoria()).isEqualTo(Categoria.COMPLETADO);
} }
} }
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