Commit 946b4e8b by Rubén Ramírez

feat: [RecursosController]: Implementado el test de las funciones para las…

feat: [RecursosController]: Implementado el test de las funciones para las búsquedas en el controlador
parent 840c9f07
......@@ -2,8 +2,11 @@ package com.ujaen.tfg.mangaffinity.rest;
import com.ujaen.tfg.mangaffinity.MangAffinityApplication;
import com.ujaen.tfg.mangaffinity.config.JpaTestConfig;
import com.ujaen.tfg.mangaffinity.entidades.Genero;
import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOLoginRespuesta;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
......@@ -14,6 +17,7 @@ import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
......@@ -59,4 +63,177 @@ public class TestRecursosController {
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
}
@Test
@DirtiesContext
void testBuscarPorTitulo() {
// 1️⃣ Crear usuario admin
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 2️⃣ Autenticar usuario
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
Recurso recurso = new Recurso("One Piece", "Manga de aventuras", LocalDate.of(1997, 7, 22), "Eiichiro Oda");
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers);
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
);
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
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testBuscarPorGenero() {
// 1️⃣ Crear usuario admin
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 2️⃣ Autenticar usuario
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
Recurso recurso = new Recurso("Dragon Ball", "Manga de peleas", LocalDate.of(1984, 11, 20), "Akira Toriyama");
recurso.getGeneros().add(Genero.ACCION);
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers);
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
);
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
);
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
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Autenticamos al usuario admin para obtener su token
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
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);
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).isNotNull().isNotEmpty();
}
@Test
@DirtiesContext
void testBuscarPorRangoDeFechas() {
// Crear usuario admin en la base de datos con el rol correcto
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// Autenticamos al usuario admin para obtener su token
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
LocalDate fecha1 = LocalDate.of(2023, 1, 1);
LocalDate fecha2 = LocalDate.of(2023, 6, 15);
LocalDate fecha3 = LocalDate.of(2024, 1, 10);
Recurso recurso1 = new Recurso("Titulo1", "Desc1", fecha1, "Autor1");
Recurso recurso2 = new Recurso("Titulo2", "Desc2", fecha2, "Autor2");
Recurso recurso3 = new Recurso("Titulo3", "Desc3", fecha3, "Autor3");
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(recurso1, headers), Void.class);
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);
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).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);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).contains("[]");
}
}
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