Commit 1ca09ad6 by Rubén Ramírez

feat: [RecursosController]:Corregidos trampeos en los test y añadidos casos no…

feat: [RecursosController]:Corregidos trampeos en los test y añadidos casos no contemplados anteriormente
parent 4113fb8d
......@@ -36,26 +36,26 @@ public class TestRecursosController {
@Test
@DirtiesContext
void testCrearRecurso() {
// Crear usuario admin en la base de datos con el rol correcto
// Regisitro de un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Autenticamos al usuario admin para obtener su token
// Inicio de sesión del admin
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// Intentamos crear un recurso sin autenticación (debe fallar)
// Caso 1: Intento crear un recurso sin autenticación
Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba");
var respuestaNoAutenticado = restTemplate.postForEntity("/recursos/", nuevoRecurso, Void.class);
assertThat(respuestaNoAutenticado.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED);
// Creamos el recurso correctamente con autenticación de admin
// Caso 2: Intento crear un recurso correctamente con autenticación de admin
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(nuevoRecurso, headers);
......@@ -66,21 +66,21 @@ public class TestRecursosController {
@Test
@DirtiesContext
void testBuscarPorTitulo() {
// 1️⃣ Crear usuario admin
// Registro de un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 2️⃣ Autenticar usuario
// Inicio sesión con el administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// 3️⃣ Crear recurso en la BD con autenticación
// Creo un recurso en la BD con autenticación
Recurso recurso = new Recurso("One Piece", "Manga de aventuras", LocalDate.of(1997, 7, 22), "Eiichiro Oda");
HttpHeaders headers = new HttpHeaders();
......@@ -89,18 +89,18 @@ public class TestRecursosController {
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 4️⃣ Prueba positiva: Buscar por título que SÍ existe
ResponseEntity<DTORecurso[]> respuesta = restTemplate.getForEntity(
"/recursos/titulo/One Piece", DTORecurso[].class
// Caso 1: Busco por título que si encontraremos
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "One Piece"
);
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).isNotEmpty();
assertThat(respuesta.getBody()[0].getTitulo()).isEqualTo("One Piece");
// 5️⃣ Prueba negativa: Buscar por título que NO existe
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.getForEntity(
"/recursos/titulo/Naruto", DTORecurso[].class
// Caso 2: Busco por título que no encontraremos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Naruto"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
......@@ -109,21 +109,21 @@ public class TestRecursosController {
@Test
@DirtiesContext
void testBuscarPorGenero() {
// 1️⃣ Crear usuario admin
// Registro un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 2️⃣ Autenticar usuario
// Inicio sesión con el administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// 3️⃣ Crear recurso con género ACCIÓN
// Creo un recurso con autenticación
Recurso recurso = new Recurso("Dragon Ball", "Manga de peleas", LocalDate.of(1984, 11, 20), "Akira Toriyama");
recurso.getGeneros().add(Genero.ACCION);
......@@ -133,78 +133,81 @@ public class TestRecursosController {
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 4️⃣ Prueba positiva: Buscar por género que SÍ existe
ResponseEntity<DTORecurso[]> respuesta = restTemplate.getForEntity(
"/recursos/genero/ACCION", DTORecurso[].class
//Caso 1: Busco por género que si encontraremos
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
"/recursos/genero/{genero}", HttpMethod.GET, null, DTORecurso[].class, "ACCION"
);
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).isNotEmpty();
assertThat(respuesta.getBody()[0].getGeneros()).contains(Genero.ACCION);
// 5️⃣ Prueba negativa: Buscar por género que NO tiene recursos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.getForEntity(
"/recursos/genero/ROMANCE", DTORecurso[].class
//Caso 2: Busco por género que no encontraremos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/genero/{genero}", HttpMethod.GET, null, DTORecurso[].class, "ROMANCE"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK); // ✅ Ahora 200 OK
assertThat(respuestaNoEncontrada.getBody()).isEmpty(); // ✅ Asegura que devuelve []
}
@Test
@DirtiesContext
void testBuscarPorAutor() {
// Crear usuario admin en la base de datos con el rol correcto
// Creo un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Autenticamos al usuario admin para obtener su token
// Inicio sesión con el administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// Crear un recurso con el autor de prueba
// Creo un recurso con autenticación
Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba");
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(nuevoRecurso, headers);
restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
// Intentamos buscar por autor con autenticación
HttpHeaders authHeaders = new HttpHeaders();
authHeaders.set("Authorization", token);
HttpEntity<Void> authRequest = new HttpEntity<>(authHeaders);
var respuesta = restTemplate.exchange("/recursos/autor/Autor Prueba", HttpMethod.GET, authRequest, DTORecurso[].class);
//Caso 1: Busco por autor que si encontraremos
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
"/recursos/autor/{autor}", HttpMethod.GET, null, DTORecurso[].class, "Autor Prueba"
);
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).isNotNull().isNotEmpty();
}
//Caso 1: Busco por autor que no encontraremos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/autor/{autor}", HttpMethod.GET, null, DTORecurso[].class, "Autor Desconocido"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).isEmpty();
}
@Test
@DirtiesContext
void testBuscarPorRangoDeFechas() {
// Crear usuario admin en la base de datos con el rol correcto
// Creo un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Autenticamos al usuario admin para obtener su token
// Inicio sesión al administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// Crear recursos con distintas fechas de publicación
// Creo varios recursos con distintas fechas
LocalDate fecha1 = LocalDate.of(2023, 1, 1);
LocalDate fecha2 = LocalDate.of(2023, 6, 15);
LocalDate fecha3 = LocalDate.of(2024, 1, 10);
......@@ -220,38 +223,41 @@ public class TestRecursosController {
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(recurso2, headers), Void.class);
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(recurso3, headers), Void.class);
// Prueba positiva: Buscar recursos en un rango de fechas donde hay coincidencias
ResponseEntity<DTORecurso[]> respuesta = restTemplate.getForEntity(
"/recursos/fecha?inicio=2023-01-01&fin=2023-12-31", DTORecurso[].class);
//Caso 1: Busco por fecha que si encontraremos
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
"/recursos/fecha?inicio={inicio}&fin={fin}", HttpMethod.GET, null, DTORecurso[].class, "2023-01-01", "2023-12-31"
);
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).hasSize(2);
assertThat(Arrays.stream(respuesta.getBody()).map(DTORecurso::getFechaPublicacion)).containsExactlyInAnyOrder(fecha1, fecha2);
assertThat(respuesta.getBody()).isNotNull().hasSize(2);
assertThat(Arrays.stream(respuesta.getBody()).map(DTORecurso::getFechaPublicacion))
.containsExactlyInAnyOrder(fecha1, fecha2);
// Prueba negativa: Buscar recursos en un rango de fechas sin coincidencias
ResponseEntity<String> respuestaNoEncontrada = restTemplate.getForEntity(
"/recursos/fecha?inicio=2025-01-01&fin=2025-12-31", String.class);
//Caso 2: Busco por fecha que no encontraremos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/fecha?inicio={inicio}&fin={fin}", HttpMethod.GET, null, DTORecurso[].class, "2025-01-01", "2025-12-31"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).contains("[]");
assertThat(respuestaNoEncontrada.getBody()).isNotNull().isEmpty();
}
@Test
@DirtiesContext
void testBuscarRecursoPorId() {
// 1️⃣ Crear usuario admin
// Crear un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 2️⃣ Autenticar usuario
// Inicio sesión al administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// 3️⃣ Crear recurso en la BD con autenticación
// Creo un recurso con autenticación
Recurso recurso = new Recurso("Titulo Buscado", "Descripción", LocalDate.now(), "Autor");
HttpHeaders headers = new HttpHeaders();
......@@ -260,7 +266,7 @@ public class TestRecursosController {
var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 4️⃣ Buscar el recurso por título para obtener su ID
// Busco el recurso por título para obtener su ID
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.getForEntity(
"/recursos/titulo/Titulo Buscado", DTORecurso[].class
);
......@@ -269,39 +275,40 @@ public class TestRecursosController {
Long recursoId = respuestaBusqueda.getBody()[0].getId();
// 5️⃣ Prueba positiva: Buscar por ID existente
ResponseEntity<DTORecurso> respuestaPorId = restTemplate.getForEntity(
"/recursos/" + recursoId, DTORecurso.class
//Caso 1: Busco por id que si encontraremos
ResponseEntity<DTORecurso> respuestaPorId = restTemplate.exchange(
"/recursos/{id}", HttpMethod.GET, null, DTORecurso.class, recursoId
);
assertThat(respuestaPorId.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaPorId.getBody()).isNotNull();
assertThat(respuestaPorId.getBody().getId()).isEqualTo(recursoId);
// 6️⃣ Prueba negativa: Buscar un ID inexistente
ResponseEntity<DTORecurso> respuestaNoEncontrada = restTemplate.getForEntity(
"/recursos/9999", DTORecurso.class
//Caso 1: Busco por id que no encontraremos
ResponseEntity<Void> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/{id}", HttpMethod.GET, null, Void.class, 9999
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testBorrarRecurso() {
// 1️⃣ Crear usuario admin en la base de datos con el rol correcto
// Crear un adminsitrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 2️⃣ Autenticar usuario admin para obtener su token
// Inicio sesión con administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken();
// 3️⃣ Crear un recurso
// Creo un recurso
Recurso recurso = new Recurso("Recurso para borrar", "Descripción", LocalDate.now(), "Autor");
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
......@@ -309,21 +316,27 @@ public class TestRecursosController {
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// 4️⃣ Obtener el recurso recién creado
// Obtengo el recurso recién creado
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.getForEntity(
"/recursos/titulo/Recurso para borrar", DTORecurso[].class
);
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
Long recursoId = respuestaBusqueda.getBody()[0].getId();
// 5️⃣ Intentar borrar el recurso con autenticación
// 🔹 Caso 1: Intento borrar el recurso sin autenticación
ResponseEntity<Void> deleteUnauthorized = restTemplate.exchange(
"/recursos/" + recursoId, HttpMethod.DELETE, HttpEntity.EMPTY, Void.class
);
assertThat(deleteUnauthorized.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED);
//Caso 2: Intento borrar el recurso con autenticación
HttpHeaders authHeaders = new HttpHeaders();
authHeaders.set("Authorization", token);
HttpEntity<Void> deleteRequest = new HttpEntity<>(authHeaders);
var deleteResponse = restTemplate.exchange("/recursos/" + recursoId, HttpMethod.DELETE, deleteRequest, Void.class);
assertThat(deleteResponse.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
// 6️⃣ Intentar borrar el mismo recurso otra vez, debe dar 404
//Caso 3: Intento borrarlo otra vez
ResponseEntity<Void> deleteAgainResponse = restTemplate.exchange(
"/recursos/" + recursoId, HttpMethod.DELETE, deleteRequest, Void.class
);
......
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