Commit d219c69e by Rubén Ramírez

feat: [Metodos Recurso]: Corregidos los test por el nuevo atrinuto

parent e8628c2d
...@@ -18,6 +18,21 @@ import java.time.LocalDate; ...@@ -18,6 +18,21 @@ import java.time.LocalDate;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.io.File;import org.springframework.web.multipart.MultipartFile;import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.Mapper;
import com.ujaen.tfg.mangaffinity.servicios.ServicioRecursos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.time.LocalDate;
import java.util.UUID;
@RestController @RestController
@RequestMapping("/recursos") @RequestMapping("/recursos")
...@@ -28,17 +43,60 @@ public class RecursosController { ...@@ -28,17 +43,60 @@ public class RecursosController {
@Autowired @Autowired
private Mapper mapper; private Mapper mapper;
@PostMapping("/") @PostMapping(value = "/", consumes = {"multipart/form-data"})
public ResponseEntity<String> crearRecurso(@RequestBody DTORecurso recurso) { public ResponseEntity<String> crearRecurso(
@RequestPart("recurso") DTORecurso recursoDTO,
@RequestPart(value = "foto", required = false) MultipartFile foto) {
try { try {
Recurso nuevoRecurso = mapper.entity(recurso); String fotoUrl = null;
// Verificar tipo de archivo (solo imágenes)
if (foto != null && !foto.isEmpty()) {
String mimeType = foto.getContentType();
if (mimeType == null || (!mimeType.equals("image/jpeg") && !mimeType.equals("image/png"))) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Solo se permiten imágenes JPEG o PNG.");
}
// Renombrar el archivo con un nombre único
String fileName = UUID.randomUUID().toString() + "_" + foto.getOriginalFilename();
Path uploadsPath = Paths.get("uploads/");
// Crear directorio si no existe
if (!Files.exists(uploadsPath)) {
Files.createDirectories(uploadsPath);
}
// Guardar la imagen en la carpeta uploads/
Path filePath = uploadsPath.resolve(fileName);
Files.copy(foto.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING);
// Crear la URL completa de la imagen
String urlBase = "http://localhost:8080";
fotoUrl = urlBase + "/uploads/" + fileName.replace(" ", "_");
}
// Crear el recurso con la imagen (si hay)
Recurso nuevoRecurso = new Recurso(
recursoDTO.getTitulo(),
recursoDTO.getDescripcion(),
recursoDTO.getFechaPublicacion(),
recursoDTO.getAutor(),
fotoUrl
);
servicioRecursos.crearRecurso(nuevoRecurso); servicioRecursos.crearRecurso(nuevoRecurso);
return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (SecurityException e) { return ResponseEntity.status(HttpStatus.CREATED).body("Recurso creado correctamente");
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error al subir la imagen");
} }
} }
@GetMapping("/titulo/{titulo}") @GetMapping("/titulo/{titulo}")
public ResponseEntity<List<DTORecurso>> buscarPorTitulo(@PathVariable String titulo) { public ResponseEntity<List<DTORecurso>> buscarPorTitulo(@PathVariable String titulo) {
try { try {
...@@ -110,16 +168,36 @@ public class RecursosController { ...@@ -110,16 +168,36 @@ public class RecursosController {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ResponseEntity<Void> borrarRecurso(@PathVariable Long id) { public ResponseEntity<Void> borrarRecurso(@PathVariable Long id) {
try { try {
// Buscar el recurso por ID
Recurso recurso = servicioRecursos.buscarRecursoPorId(id); Recurso recurso = servicioRecursos.buscarRecursoPorId(id);
if (recurso == null) { if (recurso == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} }
// Verificar si el recurso tiene una imagen asociada
if (recurso.getFotoUrl() != null && !recurso.getFotoUrl().isEmpty()) {
Path imagePath = Paths.get("uploads/", recurso.getFotoUrl().replace("/uploads/", ""));
// Eliminar la imagen asociada si existe
if (Files.exists(imagePath)) {
try {
Files.delete(imagePath); // Eliminar la imagen
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
// Eliminar el recurso de la base de datos
servicioRecursos.borrarRecurso(id); servicioRecursos.borrarRecurso(id);
// Responder con éxito
return ResponseEntity.noContent().build(); return ResponseEntity.noContent().build();
} catch (SecurityException e) { } catch (SecurityException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); // En caso de que el usuario no tenga permiso
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); // Error inesperado
} }
} }
...@@ -128,7 +206,6 @@ public class RecursosController { ...@@ -128,7 +206,6 @@ public class RecursosController {
try { try {
Recurso nuevosDatos = mapper.entity(dtoRecurso); Recurso nuevosDatos = mapper.entity(dtoRecurso);
Recurso recursoModificado = servicioRecursos.modificarRecurso(id, nuevosDatos); Recurso recursoModificado = servicioRecursos.modificarRecurso(id, nuevosDatos);
return ResponseEntity.ok(mapper.dto(recursoModificado)); return ResponseEntity.ok(mapper.dto(recursoModificado));
} catch (RecursoNoExiste e) { } catch (RecursoNoExiste e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
...@@ -139,6 +216,7 @@ public class RecursosController { ...@@ -139,6 +216,7 @@ public class RecursosController {
} }
} }
@GetMapping @GetMapping
public ResponseEntity<List<DTORecurso>> obtenerRecursos() { public ResponseEntity<List<DTORecurso>> obtenerRecursos() {
try { try {
......
...@@ -17,12 +17,14 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -17,12 +17,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
...@@ -50,6 +52,8 @@ import static org.assertj.core.api.Assertions.assertThat; ...@@ -50,6 +52,8 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
...@@ -66,7 +70,7 @@ public class TestBibliotecaPersonalController { ...@@ -66,7 +70,7 @@ public class TestBibliotecaPersonalController {
@Test @Test
@DirtiesContext @DirtiesContext
void testAnadirRecursoBiblioteca() { void testAnadirRecursoBiblioteca() {
// Registro un administrador // Registro de un administrador
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com", "email", "admin@example.com",
"nombreUsuario", "admin", "nombreUsuario", "admin",
...@@ -80,7 +84,7 @@ public class TestBibliotecaPersonalController { ...@@ -80,7 +84,7 @@ public class TestBibliotecaPersonalController {
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro un usuario normal // Registro de un usuario normal
ResponseEntity<Void> respuestaUsuario = restTemplate.postForEntity("/usuarios/", Map.of( ResponseEntity<Void> respuestaUsuario = restTemplate.postForEntity("/usuarios/", Map.of(
"email", "nuevo.usuario@example.com", "email", "nuevo.usuario@example.com",
"nombreUsuario", "nuevoUsuario", "nombreUsuario", "nuevoUsuario",
...@@ -95,6 +99,7 @@ public class TestBibliotecaPersonalController { ...@@ -95,6 +99,7 @@ public class TestBibliotecaPersonalController {
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// Obtención del ID del usuario
ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange( ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "nuevo.usuario@example.com" "/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "nuevo.usuario@example.com"
); );
...@@ -102,16 +107,25 @@ public class TestBibliotecaPersonalController { ...@@ -102,16 +107,25 @@ public class TestBibliotecaPersonalController {
Long usuarioId = respuestaUsuarioId.getBody(); Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull(); assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador // Creación del recurso
Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba"); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", new DTORecurso(null, "Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba", null, new HashSet<>())) ;
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpHeaders headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.APPLICATION_JSON); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<Recurso> requestAdmin = new HttpEntity<>(nuevoRecurso, headersAdmin); HttpEntity<MultiValueMap<String, Object>> requestAdmin = new HttpEntity<>(formData, headersAdmin);
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);
// Búsqueda del recurso
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"
); );
...@@ -120,14 +134,13 @@ public class TestBibliotecaPersonalController { ...@@ -120,14 +134,13 @@ public class TestBibliotecaPersonalController {
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Añado con el usuario el recurso a su biblioteca // Añadir recurso a la biblioteca del usuario
DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(recursoId, "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);
HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser); HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser);
ResponseEntity<Void> respuestaBiblioteca = restTemplate.exchange( ResponseEntity<Void> respuestaBiblioteca = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria", "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria",
HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId
...@@ -136,10 +149,11 @@ public class TestBibliotecaPersonalController { ...@@ -136,10 +149,11 @@ public class TestBibliotecaPersonalController {
assertThat(respuestaBiblioteca.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaBiblioteca.getStatusCode()).isEqualTo(HttpStatus.CREATED);
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testListarRecursosPorCategoria() { void testListarRecursosPorCategoria() {
// Registro un administrador // Registro de administrador
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com", "email", "admin@example.com",
"nombreUsuario", "admin", "nombreUsuario", "admin",
...@@ -153,7 +167,7 @@ public class TestBibliotecaPersonalController { ...@@ -153,7 +167,7 @@ public class TestBibliotecaPersonalController {
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro un usuario normal // Registro de usuario
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com", "email", "usuario@example.com",
"nombreUsuario", "usuario", "nombreUsuario", "usuario",
...@@ -167,26 +181,35 @@ public class TestBibliotecaPersonalController { ...@@ -167,26 +181,35 @@ public class TestBibliotecaPersonalController {
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// Creo el recurso con el administrador // Creación de recurso con autenticación
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
DTORecurso dtoRecurso = new DTORecurso(null, "Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba", "", new HashSet<>());
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpHeaders headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.APPLICATION_JSON); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
Recurso recurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba"); HttpEntity<MultiValueMap<String, Object>> requestAdmin = new HttpEntity<>(formData, headersAdmin);
HttpEntity<Recurso> requestAdmin = new HttpEntity<>(recurso, headersAdmin);
ResponseEntity<Void> respuestaRecurso = 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); assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Obtener ID del recurso
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()).isNotNull().isNotEmpty(); assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Obtener ID del usuario
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"
); );
...@@ -194,21 +217,20 @@ public class TestBibliotecaPersonalController { ...@@ -194,21 +217,20 @@ public class TestBibliotecaPersonalController {
Long usuarioId = respuestaUsuarioId.getBody(); Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull(); assertThat(usuarioId).isNotNull();
// Añado con el usuario el recurso a su biblioteca // Añadir recurso a la biblioteca del usuario
DTORecursoEnBiblioteca dtoRecursoBiblioteca = 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);
DTORecursoEnBiblioteca dtoRecurso = new DTORecursoEnBiblioteca(null, "Titulo Prueba", Categoria.AL_DIA); HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecursoBiblioteca, 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, usuarioId, recursoId HttpMethod.POST, bibliotecaRequest, Void.class, usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Listo los recursos de la biblioteca personal filtrados por categoría // Listar los recursos de la biblioteca 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, usuarioId, Categoria.AL_DIA.name() HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, usuarioId, Categoria.AL_DIA.name()
...@@ -216,10 +238,9 @@ public class TestBibliotecaPersonalController { ...@@ -216,10 +238,9 @@ public class TestBibliotecaPersonalController {
// Validaciones // Validaciones
assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getBody()).isNotNull().isNotEmpty(); assertThat(respuestaLista.getBody()).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
...@@ -239,7 +260,7 @@ public class TestBibliotecaPersonalController { ...@@ -239,7 +260,7 @@ public class TestBibliotecaPersonalController {
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro 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",
...@@ -261,12 +282,20 @@ public class TestBibliotecaPersonalController { ...@@ -261,12 +282,20 @@ public class TestBibliotecaPersonalController {
assertThat(usuarioId).isNotNull(); assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador // Creo un recurso con el administrador
Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor"); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", new DTORecurso(null, "Manga de prueba", "Descripción", LocalDate.now(), "Autor", "", new HashSet<>()));
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpHeaders headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.APPLICATION_JSON); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<Recurso> requestRecurso = new HttpEntity<>(recurso, headersAdmin); HttpEntity<MultiValueMap<String, Object>> requestRecurso = new HttpEntity<>(formData, 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);
...@@ -302,7 +331,7 @@ public class TestBibliotecaPersonalController { ...@@ -302,7 +331,7 @@ public class TestBibliotecaPersonalController {
); );
assertThat(respuestaModificar.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaModificar.getStatusCode()).isEqualTo(HttpStatus.OK);
// Verificp que la categoría ha cambiado // Verifico 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, usuarioId, Categoria.COMPLETADO.name() HttpMethod.GET, new HttpEntity<>(headersUser), DTORecursoEnBiblioteca[].class, usuarioId, Categoria.COMPLETADO.name()
...@@ -331,14 +360,13 @@ public class TestBibliotecaPersonalController { ...@@ -331,14 +360,13 @@ public class TestBibliotecaPersonalController {
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro a un usuario normal // 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);
// Inicio sesión al 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);
...@@ -353,12 +381,21 @@ public class TestBibliotecaPersonalController { ...@@ -353,12 +381,21 @@ public class TestBibliotecaPersonalController {
assertThat(usuarioId).isNotNull(); assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador // 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 headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.APPLICATION_JSON); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<Recurso> requestRecurso = new HttpEntity<>(recurso, headersAdmin); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", recurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> requestRecurso = new HttpEntity<>(formData, 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);
...@@ -400,5 +437,4 @@ public class TestBibliotecaPersonalController { ...@@ -400,5 +437,4 @@ public class TestBibliotecaPersonalController {
assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getBody()).isNotNull(); assertThat(respuestaLista.getBody()).isNotNull();
} }
} }
package com.ujaen.tfg.mangaffinity.rest; package com.ujaen.tfg.mangaffinity.rest;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ujaen.tfg.mangaffinity.MangAffinityApplication; import com.ujaen.tfg.mangaffinity.MangAffinityApplication;
import com.ujaen.tfg.mangaffinity.config.JpaTestConfig; import com.ujaen.tfg.mangaffinity.config.JpaTestConfig;
import com.ujaen.tfg.mangaffinity.entidades.Genero; import com.ujaen.tfg.mangaffinity.entidades.Genero;
...@@ -15,17 +17,36 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -15,17 +17,36 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.boot.test.web.server.LocalServerPort;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.ActiveProfiles; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.core.io.ByteArrayResource;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.*;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.time.LocalDate;
import java.util.*;
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)
@ActiveProfiles("test") @ActiveProfiles("test")
...@@ -33,6 +54,7 @@ import static org.assertj.core.api.Assertions.assertThat; ...@@ -33,6 +54,7 @@ import static org.assertj.core.api.Assertions.assertThat;
public class TestRecursosController { public class TestRecursosController {
@Autowired @Autowired
private TestRestTemplate restTemplate; private TestRestTemplate restTemplate;
private static final Logger logger = LoggerFactory.getLogger(TestRecursosController.class);
@Test @Test
@DirtiesContext @DirtiesContext
...@@ -52,14 +74,24 @@ public class TestRecursosController { ...@@ -52,14 +74,24 @@ public class TestRecursosController {
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Caso 1: Intento crear un recurso sin autenticación // Caso 1: Intento crear un recurso sin autenticación
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", "");
var respuestaNoAutenticado = restTemplate.postForEntity("/recursos/", nuevoRecurso, Void.class); var respuestaNoAutenticado = restTemplate.postForEntity("/recursos/", nuevoRecurso, Void.class);
assertThat(respuestaNoAutenticado.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN); assertThat(respuestaNoAutenticado.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
// Caso 2: Intento crear un recurso correctamente con autenticación de admin // Caso 2: Intento crear un recurso correctamente con autenticación de admin
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", new DTORecurso(null, "Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba", null, new HashSet<>()));
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(nuevoRecurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
} }
...@@ -81,12 +113,22 @@ public class TestRecursosController { ...@@ -81,12 +113,22 @@ public class TestRecursosController {
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", new DTORecurso(null, "One Piece", "Manga de aventuras", LocalDate.of(1997, 7, 22), "Eiichiro Oda", null, new HashSet<>()));
formData.add("foto", new ByteArrayResource(new byte[0]) { // Imagen vacía
@Override
public String getFilename() {
return "dummy.jpg";
}
});
// Creo un 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"); Recurso recurso = new Recurso("One Piece", "Manga de aventuras", LocalDate.of(1997, 7, 22), "Eiichiro Oda", "");
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
...@@ -107,9 +149,12 @@ public class TestRecursosController { ...@@ -107,9 +149,12 @@ public class TestRecursosController {
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
} }
private static final Logger LOGGER = LoggerFactory.getLogger(TestRecursosController.class);
@Test @Test
@DirtiesContext @DirtiesContext
void testBuscarPorGenero() { void testBuscarPorGenero() throws InterruptedException {
// Registro un administrador // Registro un administrador
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com", "email", "admin@example.com",
...@@ -125,57 +170,95 @@ public class TestRecursosController { ...@@ -125,57 +170,95 @@ public class TestRecursosController {
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Creo un recurso con autenticación // Creo un recurso con autenticación
Recurso recurso = new Recurso("Dragon Ball", "Manga de peleas", LocalDate.of(1984, 11, 20), "Akira Toriyama"); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
recurso.getGeneros().add(Genero.ACCION); DTORecurso recursoDTO = new DTORecurso(null, "Dragon Ball", "Manga de peleas",
LocalDate.of(1984, 11, 20), "Akira Toriyama", null,
new HashSet<>(Collections.singleton(Genero.ACCION)));
formData.add("recurso", recursoDTO);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
//Caso 1: Busco por género que si encontraremos LOGGER.info("✅ Recurso creado: Título: {}, Géneros: {}", recursoDTO.getTitulo(), recursoDTO.getGeneros());
// 🔹 Esperar 1 segundo para que la transacción se complete
Thread.sleep(4000);
// 🔍 Buscar el recurso por título para verificar que tiene géneros asignados
ResponseEntity<DTORecurso[]> respuestaTitulo = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Dragon Ball"
);
assertThat(respuestaTitulo.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaTitulo.getBody()).isNotEmpty();
LOGGER.info("📌 Recurso encontrado por título: {}", respuestaTitulo.getBody()[0]);
// 🔍 Buscar el recurso por género
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
"/recursos/genero/{genero}", HttpMethod.GET, null, DTORecurso[].class, "ACCION" "/recursos/genero/{genero}", HttpMethod.GET, null, DTORecurso[].class, "ACCION"
); );
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK); LOGGER.info("🔍 Consulta por género ACCION retornó: {}", Arrays.toString(respuesta.getBody()));
assertThat(respuesta.getBody()).isNotEmpty();
assertThat(respuesta.getBody()[0].getGeneros()).contains(Genero.ACCION);
//Caso 2: Busco por género que no encontraremos assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/genero/{genero}", HttpMethod.GET, null, DTORecurso[].class, "ROMANCE"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).isEmpty();
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testBuscarPorAutor() { void testBuscarPorAutor() {
// Creo 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);
// Inicio sesión con el administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of( var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword" "clave", "adminpassword"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Creo un recurso con autenticación MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
Recurso nuevoRecurso = new Recurso("Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba"); DTORecurso dtoRecurso = new DTORecurso(
null, "Titulo Prueba", "Descripción de prueba", LocalDate.now(), "Autor Prueba",
null, new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(nuevoRecurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
//Caso 1: Busco por autor que si encontraremos
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
"/recursos/autor/{autor}", HttpMethod.GET, null, DTORecurso[].class, "Autor Prueba" "/recursos/autor/{autor}", HttpMethod.GET, null, DTORecurso[].class, "Autor Prueba"
); );
...@@ -183,14 +266,15 @@ public class TestRecursosController { ...@@ -183,14 +266,15 @@ public class TestRecursosController {
assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuesta.getBody()).isNotNull().isNotEmpty(); assertThat(respuesta.getBody()).isNotNull().isNotEmpty();
//Caso 1: Busco por autor que no encontraremos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/autor/{autor}", HttpMethod.GET, null, DTORecurso[].class, "Autor Desconocido" "/recursos/autor/{autor}", HttpMethod.GET, null, DTORecurso[].class, "Autor Desconocido"
); );
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).isEmpty(); assertThat(respuestaNoEncontrada.getBody()).isEmpty();
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testBuscarPorRangoDeFechas() { void testBuscarPorRangoDeFechas() {
...@@ -213,16 +297,27 @@ public class TestRecursosController { ...@@ -213,16 +297,27 @@ public class TestRecursosController {
LocalDate fecha2 = LocalDate.of(2023, 6, 15); LocalDate fecha2 = LocalDate.of(2023, 6, 15);
LocalDate fecha3 = LocalDate.of(2024, 1, 10); 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(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(recurso1, headers), Void.class); for (LocalDate fecha : List.of(fecha1, fecha2, fecha3)) {
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(recurso2, headers), Void.class); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(recurso3, headers), Void.class); DTORecurso dtoRecurso = new DTORecurso(
null, "Titulo" + fecha.getYear(), "Desc" + fecha.getYear(), fecha, "Autor" + fecha.getYear(),
null,new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
}
//Caso 1: Busco por fecha que si encontraremos //Caso 1: Busco por fecha que si encontraremos
ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuesta = restTemplate.exchange(
...@@ -258,16 +353,28 @@ public class TestRecursosController { ...@@ -258,16 +353,28 @@ public class TestRecursosController {
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Creo un recurso con autenticación
Recurso recurso = new Recurso("Titulo Buscado", "Descripción", LocalDate.now(), "Autor");
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
DTORecurso dtoRecurso = new DTORecurso(
null, "Titulo Buscado", "Descripción", LocalDate.now(), "Autor",
null,new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Busco el recurso por título para obtener su ID
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.getForEntity( ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.getForEntity(
"/recursos/titulo/Titulo Buscado", DTORecurso[].class "/recursos/titulo/Titulo Buscado", DTORecurso[].class
); );
...@@ -310,13 +417,29 @@ public class TestRecursosController { ...@@ -310,13 +417,29 @@ public class TestRecursosController {
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Recurso para borrar", "Descripción", LocalDate.now(), "Autor");
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA); // Cambio aquí
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
DTORecurso dtoRecurso = new DTORecurso(
null, "Recurso para borrar", "Descripción", LocalDate.now(), "Autor",
null, new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaAdmin = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Obtengo el recurso recién creado // Obtengo el recurso recién creado
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.getForEntity( ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.getForEntity(
"/recursos/titulo/Recurso para borrar", DTORecurso[].class "/recursos/titulo/Recurso para borrar", DTORecurso[].class
...@@ -330,14 +453,14 @@ public class TestRecursosController { ...@@ -330,14 +453,14 @@ public class TestRecursosController {
); );
assertThat(deleteUnauthorized.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN); assertThat(deleteUnauthorized.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
//Caso 2: Intento borrar el recurso con autenticación // Caso 2: Intento borrar el recurso con autenticación
HttpHeaders authHeaders = new HttpHeaders(); HttpHeaders authHeaders = new HttpHeaders();
authHeaders.set("Authorization", token); authHeaders.set("Authorization", token);
HttpEntity<Void> deleteRequest = new HttpEntity<>(authHeaders); HttpEntity<Void> deleteRequest = new HttpEntity<>(authHeaders);
var deleteResponse = restTemplate.exchange("/recursos/" + recursoId, HttpMethod.DELETE, deleteRequest, Void.class); var deleteResponse = restTemplate.exchange("/recursos/" + recursoId, HttpMethod.DELETE, deleteRequest, Void.class);
assertThat(deleteResponse.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT); assertThat(deleteResponse.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
//Caso 3: Intento borrarlo otra vez // Caso 3: Intento borrarlo otra vez
ResponseEntity<Void> deleteAgainResponse = restTemplate.exchange( ResponseEntity<Void> deleteAgainResponse = restTemplate.exchange(
"/recursos/" + recursoId, HttpMethod.DELETE, deleteRequest, Void.class "/recursos/" + recursoId, HttpMethod.DELETE, deleteRequest, Void.class
); );
...@@ -362,11 +485,24 @@ public class TestRecursosController { ...@@ -362,11 +485,24 @@ public class TestRecursosController {
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Crear un recurso con autenticación // Crear un recurso con autenticación
Recurso recurso = new Recurso("Titulo Original", "Descripción Original", LocalDate.of(2022, 5, 10), "Autor Original");
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
DTORecurso dtoRecurso = new DTORecurso(
null, "Titulo Original", "Descripción Original", LocalDate.of(2022, 5, 10), "Autor Original",
null, new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED);
...@@ -379,11 +515,15 @@ public class TestRecursosController { ...@@ -379,11 +515,15 @@ public class TestRecursosController {
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
// Caso 1: Modificar todos los campos // Caso 1: Modificar todos los campos (SIN MODIFICAR FOTO)
DTORecurso nuevosDatos = new DTORecurso(recursoId, "Titulo Modificado", "Descripción Modificada", DTORecurso nuevosDatos = new DTORecurso(recursoId, "Titulo Modificado", "Descripción Modificada",
LocalDate.of(2024, 1, 1), "Autor Modificado", Set.of(Genero.ACCION, Genero.AVENTURA)); LocalDate.of(2024, 1, 1), "Autor Modificado", null, new HashSet<>(Set.of(Genero.ACCION, Genero.AVENTURA)));
HttpHeaders jsonHeaders = new HttpHeaders();
jsonHeaders.set("Authorization", token);
jsonHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<DTORecurso> updateRequest = new HttpEntity<>(nuevosDatos, headers); HttpEntity<DTORecurso> updateRequest = new HttpEntity<>(nuevosDatos, jsonHeaders);
ResponseEntity<DTORecurso> respuestaModificacion = restTemplate.exchange( ResponseEntity<DTORecurso> respuestaModificacion = restTemplate.exchange(
"/recursos/{id}", HttpMethod.PUT, updateRequest, DTORecurso.class, recursoId "/recursos/{id}", HttpMethod.PUT, updateRequest, DTORecurso.class, recursoId
); );
...@@ -397,8 +537,10 @@ public class TestRecursosController { ...@@ -397,8 +537,10 @@ public class TestRecursosController {
assertThat(respuestaModificacion.getBody().getGeneros()).containsExactlyInAnyOrder(Genero.ACCION, Genero.AVENTURA); assertThat(respuestaModificacion.getBody().getGeneros()).containsExactlyInAnyOrder(Genero.ACCION, Genero.AVENTURA);
// Caso 2: Intentar modificar un recurso que NO existe // Caso 2: Intentar modificar un recurso que NO existe
DTORecurso datosFalsos = new DTORecurso(null, "Titulo Inexistente", "Descripción", LocalDate.of(2024, 1, 1), "Autor", Set.of(Genero.DRAMA)); DTORecurso datosFalsos = new DTORecurso(null, "Titulo Inexistente", "Descripción",
HttpEntity<DTORecurso> fakeUpdateRequest = new HttpEntity<>(datosFalsos, headers); LocalDate.of(2024, 1, 1), "Autor", null, new HashSet<>(Set.of(Genero.DRAMA)));
HttpEntity<DTORecurso> fakeUpdateRequest = new HttpEntity<>(datosFalsos, jsonHeaders);
ResponseEntity<Void> respuestaNoEncontrado = restTemplate.exchange( ResponseEntity<Void> respuestaNoEncontrado = restTemplate.exchange(
"/recursos/{id}", HttpMethod.PUT, fakeUpdateRequest, Void.class, 9999 "/recursos/{id}", HttpMethod.PUT, fakeUpdateRequest, Void.class, 9999
); );
...@@ -414,10 +556,12 @@ public class TestRecursosController { ...@@ -414,10 +556,12 @@ public class TestRecursosController {
assertThat(respuestaNoAutenticado.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN); assertThat(respuestaNoAutenticado.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testListarRecursos() { void testListarRecursos() {
// Registro al administrador // Registro del administrador
restTemplate.postForEntity("/usuarios/", Map.of( restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com", "email", "admin@example.com",
"nombreUsuario", "admin", "nombreUsuario", "admin",
...@@ -431,25 +575,51 @@ public class TestRecursosController { ...@@ -431,25 +575,51 @@ public class TestRecursosController {
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Creo 10 recursos de prueba // Headers con autenticación
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
// Crear recursos de prueba con imágenes simuladas
for (int i = 1; i <= 10; i++) { for (int i = 1; i <= 10; i++) {
Recurso recurso = new Recurso("Titulo " + i, "Descripción " + i, LocalDate.of(2020, 1, i), "Autor " + i); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); DTORecurso dtoRecurso = new DTORecurso(
restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); null, "Titulo " + i, "Descripción " + i, LocalDate.of(2020, 1, i), "Autor " + i,
null, new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
ResponseEntity<Void> response = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
}
// Esperar un momento para que los datos se confirmen en la BD
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} }
// Caso 1: Obtener recursos con autenticación de administrador // Caso 1: Obtener recursos con autenticación de administrador
HttpEntity<Void> authRequest = new HttpEntity<>(headers); HttpHeaders jsonHeaders = new HttpHeaders();
jsonHeaders.set("Authorization", token);
jsonHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Void> authRequest = new HttpEntity<>(jsonHeaders);
ResponseEntity<DTORecurso[]> respuestaAdmin = restTemplate.exchange( ResponseEntity<DTORecurso[]> respuestaAdmin = restTemplate.exchange(
"/recursos", HttpMethod.GET, authRequest, DTORecurso[].class "/recursos", HttpMethod.GET, authRequest, DTORecurso[].class
); );
assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaAdmin.getBody()).isNotNull(); assertThat(respuestaAdmin.getBody()).isNotNull();
assertThat(respuestaAdmin.getBody().length).isLessThanOrEqualTo(15); assertThat(respuestaAdmin.getBody().length).isGreaterThanOrEqualTo(10); // Debería haber 10 o más
// Caso 2: Obtener recursos sin autenticación // Caso 2: Obtener recursos sin autenticación
ResponseEntity<Void> respuestaNoAuth = restTemplate.exchange( ResponseEntity<Void> respuestaNoAuth = restTemplate.exchange(
...@@ -458,77 +628,12 @@ public class TestRecursosController { ...@@ -458,77 +628,12 @@ public class TestRecursosController {
assertThat(respuestaNoAuth.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN); assertThat(respuestaNoAuth.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
} }
@Test
@DirtiesContext
void testAnadirCapitulo() {
// Registro de un administrador
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "admin@example.com",
"nombreUsuario", "admin",
"contrasenia", "adminpassword"
), Void.class);
// 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();
// Creo recurso con autenticación de administrador
Recurso recurso = new Recurso("Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X");
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);
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Manga Ejemplo"
);
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull();
// Intento añadir un capítulo con autenticación de administrador
DTOCapitulo nuevoCapitulo = new DTOCapitulo(
null, 1, "Capítulo 1", TipoRecurso.MANGA,
List.of(new DTOFuenteCapitulo("Crunchyroll", "https://crunchyroll.com/cap1"))
);
HttpEntity<DTOCapitulo> capituloRequest = new HttpEntity<>(nuevoCapitulo, headers);
ResponseEntity<Void> respuestaCapitulo = restTemplate.exchange(
"/recursos/{id}/capitulos", HttpMethod.POST, capituloRequest, Void.class, recursoId
);
assertThat(respuestaCapitulo.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Registro un usuario normal
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com",
"nombreUsuario", "usuario",
"contrasenia", "userpassword"
), Void.class);
// Inicio sesión con ese usuario
var authUserResponse = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "userpassword"
), DTOLoginRespuesta.class);
assertThat(authUserResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUserResponse.getBody().getToken();
HttpHeaders headersUser = new HttpHeaders();
headersUser.set("Authorization", tokenUser);
// Intento añadir un capítulo con el usuario normal
HttpEntity<DTOCapitulo> capituloRequestUser = new HttpEntity<>(nuevoCapitulo, headersUser);
ResponseEntity<Void> respuestaCapituloUser = restTemplate.exchange(
"/recursos/{id}/capitulos", HttpMethod.POST, capituloRequestUser, Void.class, recursoId
);
assertThat(respuestaCapituloUser.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
}
@Test @Test
@DirtiesContext @DirtiesContext
...@@ -548,11 +653,24 @@ public class TestRecursosController { ...@@ -548,11 +653,24 @@ public class TestRecursosController {
String token = "Bearer " + authResponse.getBody().getToken(); String token = "Bearer " + authResponse.getBody().getToken();
// Creo un recurso con autenticación // Creo un recurso con autenticación
Recurso recurso = new Recurso("Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X");
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token); headers.set("Authorization", token);
HttpEntity<Recurso> request = new HttpEntity<>(recurso, headers); headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
DTORecurso dtoRecurso = new DTORecurso(
null, "Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X",
null, new HashSet<>()
);
formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override
public String getFilename() {
return "dummy.jpg";
}
});
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(formData, headers);
var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class); var respuestaCreacion = restTemplate.exchange("/recursos/", HttpMethod.POST, request, Void.class);
assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaCreacion.getStatusCode()).isEqualTo(HttpStatus.CREATED);
...@@ -565,21 +683,24 @@ public class TestRecursosController { ...@@ -565,21 +683,24 @@ public class TestRecursosController {
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
// Agrego capítulos al recurso // Agrego capítulos al recurso
HttpHeaders jsonHeaders = new HttpHeaders();
jsonHeaders.set("Authorization", token);
jsonHeaders.setContentType(MediaType.APPLICATION_JSON);
restTemplate.exchange("/recursos/{id}/capitulos", HttpMethod.POST, restTemplate.exchange("/recursos/{id}/capitulos", HttpMethod.POST,
new HttpEntity<>(new DTOCapitulo(null, 1, "Capítulo 1", TipoRecurso.MANGA, new HttpEntity<>(new DTOCapitulo(null, 1, "Capítulo 1", TipoRecurso.MANGA,
List.of(new DTOFuenteCapitulo("Crunchyroll", "https://crunchyroll.com/cap1"))), headers), List.of(new DTOFuenteCapitulo("Crunchyroll", "https://crunchyroll.com/cap1"))), jsonHeaders),
Void.class, recursoId); Void.class, recursoId);
restTemplate.exchange("/recursos/{id}/capitulos", HttpMethod.POST, restTemplate.exchange("/recursos/{id}/capitulos", HttpMethod.POST,
new HttpEntity<>(new DTOCapitulo(null, 2, "Capítulo 2", TipoRecurso.MANGA, new HttpEntity<>(new DTOCapitulo(null, 2, "Capítulo 2", TipoRecurso.MANGA,
List.of(new DTOFuenteCapitulo("AnimeFLV", "https://animeflv.com/cap2"))), headers), List.of(new DTOFuenteCapitulo("AnimeFLV", "https://animeflv.com/cap2"))), jsonHeaders),
Void.class, recursoId); Void.class, recursoId);
// Obtengo capítulos del recurso // Obtengo capítulos del recurso
ResponseEntity<DTOCapitulo[]> respuestaCapitulos = restTemplate.exchange( ResponseEntity<DTOCapitulo[]> respuestaCapitulos = restTemplate.exchange(
"/recursos/{id}/capitulos", HttpMethod.GET, null, DTOCapitulo[].class, recursoId); "/recursos/{id}/capitulos", HttpMethod.GET, null, DTOCapitulo[].class, recursoId);
assertThat(respuestaCapitulos.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaCapitulos.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaCapitulos.getBody()).isNotNull(); assertThat(respuestaCapitulos.getBody()).isNotNull();
assertThat(respuestaCapitulos.getBody()[0].getNumero()).isEqualTo(1); assertThat(respuestaCapitulos.getBody()[0].getNumero()).isEqualTo(1);
...@@ -591,7 +712,6 @@ public class TestRecursosController { ...@@ -591,7 +712,6 @@ public class TestRecursosController {
"/recursos/{id}/capitulos", HttpMethod.GET, null, DTOCapitulo[].class, 9999); "/recursos/{id}/capitulos", HttpMethod.GET, null, DTOCapitulo[].class, 9999);
assertThat(respuestaSinCapitulos.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); assertThat(respuestaSinCapitulos.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
assertThat(respuestaSinCapitulos.getBody()).isNull(); assertThat(respuestaSinCapitulos.getBody()).isNull();
} }
......
...@@ -40,7 +40,7 @@ public class TestServicioBibliotecaPersonal { ...@@ -40,7 +40,7 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga de prueba").getFirst(); Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga de prueba").getFirst();
...@@ -61,8 +61,8 @@ public class TestServicioBibliotecaPersonal { ...@@ -61,8 +61,8 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo unos cuantos recursos de prueba // Creo unos cuantos recursos de prueba
Recurso recurso1 = new Recurso("Manga Acción", "Sinopsis 1", LocalDate.now(), "Autor A"); Recurso recurso1 = new Recurso("Manga Acción", "Sinopsis 1", LocalDate.now(), "Autor A", "");
Recurso recurso2 = new Recurso("Manga Romance", "Sinopsis 2", LocalDate.now(), "Autor B"); Recurso recurso2 = new Recurso("Manga Romance", "Sinopsis 2", LocalDate.now(), "Autor B", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -90,7 +90,7 @@ public class TestServicioBibliotecaPersonal { ...@@ -90,7 +90,7 @@ public class TestServicioBibliotecaPersonal {
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Manga Prueba", "Descripción", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Manga Prueba", "Descripción", LocalDate.now(), "Autor", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba").getFirst(); Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba").getFirst();
...@@ -114,7 +114,7 @@ public class TestServicioBibliotecaPersonal { ...@@ -114,7 +114,7 @@ public class TestServicioBibliotecaPersonal {
servicioUsuarios.crearUsuario(usuario); servicioUsuarios.crearUsuario(usuario);
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal(); BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
Recurso recurso = new Recurso("Manga Cambio", "Otra Descripción", LocalDate.now(), "AutorX"); Recurso recurso = new Recurso("Manga Cambio", "Otra Descripción", LocalDate.now(), "AutorX", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Cambio").getFirst(); Recurso recursoGuardado = servicioRecursos.buscarRecursoPorTitulo("Manga Cambio").getFirst();
servicioBibliotecaPersonal.anadirRecursoBiblioteca(bibliotecaPersonal, recursoGuardado, Categoria.PENDIENTE); servicioBibliotecaPersonal.anadirRecursoBiblioteca(bibliotecaPersonal, recursoGuardado, Categoria.PENDIENTE);
......
...@@ -32,7 +32,7 @@ public class TestServicioRecursos { ...@@ -32,7 +32,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testCrearRecurso() { void testCrearRecurso() {
// Crear recurso de prueba // Crear recurso de prueba
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", "");
servicioRecursos.crearRecurso(nuevoRecurso); servicioRecursos.crearRecurso(nuevoRecurso);
// Buscar el recurso en la base de datos después de crearlo // Buscar el recurso en la base de datos después de crearlo
...@@ -53,8 +53,8 @@ public class TestServicioRecursos { ...@@ -53,8 +53,8 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorTitulo() { void testBuscarRecursoPorTitulo() {
// Crear recursos de prueba // Crear recursos de prueba
Recurso recurso1 = new Recurso("Titulo Uno", "Descripción de prueba 1", LocalDate.now(), "Autor 1"); Recurso recurso1 = new Recurso("Titulo Uno", "Descripción de prueba 1", LocalDate.now(), "Autor 1", "");
Recurso recurso2 = new Recurso("Titulo Dos", "Descripción de prueba 2", LocalDate.now(), "Autor 2"); Recurso recurso2 = new Recurso("Titulo Dos", "Descripción de prueba 2", LocalDate.now(), "Autor 2", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -71,8 +71,8 @@ public class TestServicioRecursos { ...@@ -71,8 +71,8 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorAutor() { void testBuscarRecursoPorAutor() {
// Crear recursos con diferentes autores // Crear recursos con diferentes autores
Recurso recurso1 = new Recurso("Titulo Uno", "Desc 1", LocalDate.now(), "Autor A"); Recurso recurso1 = new Recurso("Titulo Uno", "Desc 1", LocalDate.now(), "Autor A", "");
Recurso recurso2 = new Recurso("Titulo Dos", "Desc 2", LocalDate.now(), "Autor B"); Recurso recurso2 = new Recurso("Titulo Dos", "Desc 2", LocalDate.now(), "Autor B", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -89,10 +89,10 @@ public class TestServicioRecursos { ...@@ -89,10 +89,10 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorGenero() { void testBuscarRecursoPorGenero() {
// Crear recursos con diferentes géneros // Crear recursos con diferentes géneros
Recurso recurso1 = new Recurso("Manga A", "Desc", LocalDate.now(), "Autor X"); Recurso recurso1 = new Recurso("Manga A", "Desc", LocalDate.now(), "Autor X", "");
recurso1.getGeneros().add(Genero.ACCION); recurso1.getGeneros().add(Genero.ACCION);
Recurso recurso2 = new Recurso("Manga B", "Desc", LocalDate.now(), "Autor Y"); Recurso recurso2 = new Recurso("Manga B", "Desc", LocalDate.now(), "Autor Y", "");
recurso2.getGeneros().add(Genero.ROMANCE); recurso2.getGeneros().add(Genero.ROMANCE);
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
...@@ -115,9 +115,9 @@ public class TestServicioRecursos { ...@@ -115,9 +115,9 @@ public class TestServicioRecursos {
LocalDate fecha2 = LocalDate.of(2022, 6, 15); LocalDate fecha2 = LocalDate.of(2022, 6, 15);
LocalDate fecha3 = LocalDate.of(2023, 12, 25); LocalDate fecha3 = LocalDate.of(2023, 12, 25);
Recurso recurso1 = new Recurso("Titulo A", "Desc", fecha1, "Autor X"); Recurso recurso1 = new Recurso("Titulo A", "Desc", fecha1, "Autor X", "");
Recurso recurso2 = new Recurso("Titulo B", "Desc", fecha2, "Autor Y"); Recurso recurso2 = new Recurso("Titulo B", "Desc", fecha2, "Autor Y", "");
Recurso recurso3 = new Recurso("Titulo C", "Desc", fecha3, "Autor Z"); Recurso recurso3 = new Recurso("Titulo C", "Desc", fecha3, "Autor Z", "");
servicioRecursos.crearRecurso(recurso1); servicioRecursos.crearRecurso(recurso1);
servicioRecursos.crearRecurso(recurso2); servicioRecursos.crearRecurso(recurso2);
...@@ -135,7 +135,7 @@ public class TestServicioRecursos { ...@@ -135,7 +135,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBuscarRecursoPorId() { void testBuscarRecursoPorId() {
// Crear un recurso de prueba // Crear un recurso de prueba
Recurso recurso = new Recurso("Manga Prueba", "Descripción de prueba", LocalDate.now(), "Autor X"); Recurso recurso = new Recurso("Manga Prueba", "Descripción de prueba", LocalDate.now(), "Autor X", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
// Buscar el recurso en la base de datos // Buscar el recurso en la base de datos
...@@ -153,7 +153,7 @@ public class TestServicioRecursos { ...@@ -153,7 +153,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testBorrarRecurso() { void testBorrarRecurso() {
// Crear recurso en la base de datos // Crear recurso en la base de datos
Recurso recurso = new Recurso("Titulo", "Descripcion", LocalDate.now(), "Autor"); Recurso recurso = new Recurso("Titulo", "Descripcion", LocalDate.now(), "Autor", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
// Buscar el recurso creado y asegurar que tiene un ID // Buscar el recurso creado y asegurar que tiene un ID
...@@ -176,7 +176,7 @@ public class TestServicioRecursos { ...@@ -176,7 +176,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testModificarRecurso() { void testModificarRecurso() {
// Crear un recurso inicial // Crear un recurso inicial
Recurso recursoOriginal = new Recurso("Titulo 1", "Descripción 1", LocalDate.of(2022, 5, 10), "Autor 1"); Recurso recursoOriginal = new Recurso("Titulo 1", "Descripción 1", LocalDate.of(2022, 5, 10), "Autor 1", "");
servicioRecursos.crearRecurso(recursoOriginal); servicioRecursos.crearRecurso(recursoOriginal);
// Buscar el recurso creado para obtener su ID // Buscar el recurso creado para obtener su ID
...@@ -188,7 +188,7 @@ public class TestServicioRecursos { ...@@ -188,7 +188,7 @@ public class TestServicioRecursos {
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Crear un objeto con algunos campos en null (solo modificamos la descripción) // Crear un objeto con algunos campos en null (solo modificamos la descripción)
Recurso nuevosDatos = new Recurso(null, "Descripción Modificada", null, null); Recurso nuevosDatos = new Recurso(null, "Descripción Modificada", null, null, "");
// Modificar el recurso // Modificar el recurso
Recurso recursoModificado = servicioRecursos.modificarRecurso(recursoId, nuevosDatos); Recurso recursoModificado = servicioRecursos.modificarRecurso(recursoId, nuevosDatos);
...@@ -214,7 +214,7 @@ public class TestServicioRecursos { ...@@ -214,7 +214,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testAnadirCapitulo() { void testAnadirCapitulo() {
// Creo recurso inicial // Creo recurso inicial
Recurso recurso = new Recurso("Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X"); Recurso recurso = new Recurso("Manga Ejemplo", "Sinopsis", LocalDate.now(), "Autor X", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Ejemplo"); List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Ejemplo");
assertThat(recursos).isNotEmpty(); assertThat(recursos).isNotEmpty();
...@@ -255,7 +255,7 @@ public class TestServicioRecursos { ...@@ -255,7 +255,7 @@ public class TestServicioRecursos {
@DirtiesContext @DirtiesContext
void testObtenerCapitulosDeRecurso() { void testObtenerCapitulosDeRecurso() {
// Creo un recurso // Creo un recurso
Recurso recurso = new Recurso("Manga Prueba", "Sinopsis", LocalDate.now(), "Autor X"); Recurso recurso = new Recurso("Manga Prueba", "Sinopsis", LocalDate.now(), "Autor X", "");
servicioRecursos.crearRecurso(recurso); servicioRecursos.crearRecurso(recurso);
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba"); List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Manga Prueba");
assertThat(recursos).isNotEmpty(); assertThat(recursos).isNotEmpty();
......
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