Commit 4cdb2b86 by Rubén Ramírez

fix: [TestBibliotecaPersonalController]: Mejorados todos los tests para hacer…

fix: [TestBibliotecaPersonalController]: Mejorados todos los tests para hacer todas las comprobaciones
parent 503f16aa
...@@ -2,62 +2,27 @@ package com.ujaen.tfg.mangaffinity.rest; ...@@ -2,62 +2,27 @@ package com.ujaen.tfg.mangaffinity.rest;
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.Categoria; import com.ujaen.tfg.mangaffinity.entidades.Categoria;
import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOLoginRespuesta; import com.ujaen.tfg.mangaffinity.rest.DTO.DTOLoginRespuesta;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso; import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecursoEnBiblioteca; import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecursoEnBiblioteca;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
import org.springframework.beans.factory.annotation.Autowired; 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.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.*; import org.springframework.http.*;
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.HashSet;
import java.util.Map; import java.util.Map;
import com.ujaen.tfg.mangaffinity.MangAffinityApplication;
import com.ujaen.tfg.mangaffinity.config.JpaTestConfig;
import com.ujaen.tfg.mangaffinity.entidades.Categoria;
import com.ujaen.tfg.mangaffinity.entidades.Recurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOLoginRespuesta;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecurso;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTORecursoEnBiblioteca;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.*;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import java.time.LocalDate;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
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")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
...@@ -99,7 +64,7 @@ public class TestBibliotecaPersonalController { ...@@ -99,7 +64,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 // Obtengo 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"
); );
...@@ -107,7 +72,7 @@ public class TestBibliotecaPersonalController { ...@@ -107,7 +72,7 @@ public class TestBibliotecaPersonalController {
Long usuarioId = respuestaUsuarioId.getBody(); Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull(); assertThat(usuarioId).isNotNull();
// Creación del recurso // Creo el recurso
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>(); 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("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]) { formData.add("foto", new ByteArrayResource(new byte[0]) {
...@@ -125,7 +90,7 @@ public class TestBibliotecaPersonalController { ...@@ -125,7 +90,7 @@ public class TestBibliotecaPersonalController {
var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class); var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Búsqueda del recurso // Busco el 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"
); );
...@@ -134,8 +99,8 @@ public class TestBibliotecaPersonalController { ...@@ -134,8 +99,8 @@ public class TestBibliotecaPersonalController {
Long recursoId = respuestaBusqueda.getBody()[0].getId(); Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull(); assertThat(recursoId).isNotNull();
// Añadir recurso a la biblioteca del usuario // Añado el 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, "imagenBase64Ejemplo");
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);
...@@ -149,22 +114,20 @@ public class TestBibliotecaPersonalController { ...@@ -149,22 +114,20 @@ public class TestBibliotecaPersonalController {
assertThat(respuestaBiblioteca.getStatusCode()).isEqualTo(HttpStatus.CREATED); assertThat(respuestaBiblioteca.getStatusCode()).isEqualTo(HttpStatus.CREATED);
} }
@Test @Test
@DirtiesContext @DirtiesContext
void testListarRecursosPorCategoria() { void testListarRecursosPorCategoria() {
// Registro de 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",
"contrasenia", "adminpassword" "contrasenia", "adminpassword"
), Void.class); ), Void.class);
// Inicio sesión del administrador // Login del administrador
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of( var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword" "clave", "adminpassword"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro de usuario // Registro de usuario
...@@ -174,73 +137,57 @@ public class TestBibliotecaPersonalController { ...@@ -174,73 +137,57 @@ public class TestBibliotecaPersonalController {
"contrasenia", "password" "contrasenia", "password"
), Void.class); ), Void.class);
// Inicio sesión del usuario // Login del usuario
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
// Creación de recurso con autenticación Long usuarioId = restTemplate.getForObject("/usuarios/email/usuario@example.com", Long.class);
// Creo recurso
DTORecurso dtoRecurso = new DTORecurso(null, "Recurso Test", "Desc", LocalDate.now(), "Autor", "", new HashSet<>());
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>(); 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("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) { formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override @Override public String getFilename() { return "dummy.jpg"; }
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.MULTIPART_FORM_DATA); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestAdmin = new HttpEntity<>(formData, headersAdmin); restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(formData, headersAdmin), Void.class);
ResponseEntity<Void> respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestAdmin, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Obtener ID del recurso
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange(
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Titulo Prueba"
);
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull();
// Obtener ID del usuario Long recursoId = restTemplate.getForObject("/recursos/titulo/Recurso Test", DTORecurso[].class)[0].getId();
ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
);
assertThat(respuestaUsuarioId.getStatusCode()).isEqualTo(HttpStatus.OK);
Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull();
// Añadir recurso a la biblioteca del usuario // Añado el recurso a la biblioteca
DTORecursoEnBiblioteca dtoRecursoBiblioteca = new DTORecursoEnBiblioteca(recursoId, "Titulo Prueba", Categoria.AL_DIA); DTORecursoEnBiblioteca dtoBib = new DTORecursoEnBiblioteca(recursoId, "Recurso Test", 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<>(dtoRecursoBiblioteca, headersUser); 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,
new HttpEntity<>(dtoBib, headersUser),
Void.class,
usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Listar los recursos de la biblioteca por categoría // Listo por categoría
ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange( var respuesta = 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()
); );
// Validaciones assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuesta.getBody()).isNotNull().isNotEmpty();
assertThat(respuestaLista.getBody()).isNotEmpty(); assertThat(respuesta.getBody()[0].getTitulo()).isEqualTo("Recurso Test");
assertThat(respuestaLista.getBody()[0].getTitulo()).isEqualTo("Titulo Prueba"); assertThat(respuesta.getBody()[0].getCategoria()).isEqualTo(Categoria.AL_DIA);
assertThat(respuestaLista.getBody()[0].getCategoria()).isEqualTo(Categoria.AL_DIA);
} }
@Test @Test
...@@ -253,37 +200,31 @@ public class TestBibliotecaPersonalController { ...@@ -253,37 +200,31 @@ public class TestBibliotecaPersonalController {
"contrasenia", "adminpassword" "contrasenia", "adminpassword"
), Void.class); ), Void.class);
// Inicio sesión con el administrador // Login admin
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of( var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword" "clave", "adminpassword"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro un usuario normal // Registro usuario
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 con el usuario // Login usuario
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange( Long usuarioId = restTemplate.getForObject("/usuarios/email/usuario@example.com", Long.class);
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
);
assertThat(respuestaUsuarioId.getStatusCode()).isEqualTo(HttpStatus.OK);
Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador // Creo el recurso
DTORecurso dtoRecurso = new DTORecurso(null, "Manga de prueba", "Descripción", LocalDate.now(), "Autor", "", new HashSet<>());
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>(); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", new DTORecurso(null, "Manga de prueba", "Descripción", LocalDate.now(), "Autor", "", new HashSet<>())); formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) { formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override @Override
public String getFilename() { public String getFilename() {
...@@ -294,51 +235,44 @@ public class TestBibliotecaPersonalController { ...@@ -294,51 +235,44 @@ public class TestBibliotecaPersonalController {
HttpHeaders headersAdmin = new HttpHeaders(); HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin); headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(formData, headersAdmin), Void.class);
HttpEntity<MultiValueMap<String, Object>> requestRecurso = new HttpEntity<>(formData, headersAdmin); Long recursoId = restTemplate.getForObject("/recursos/titulo/Manga de prueba", DTORecurso[].class)[0].getId();
var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestRecurso, Void.class);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED);
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange( // Añado el recurso a biblioteca con categoría inicial
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Manga de prueba"
);
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull();
// Añado el recurso a la biblioteca del usuario con categoría inicial
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(recursoId, "Manga de prueba", Categoria.AL_DIA); DTORecursoEnBiblioteca dtoInicial = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.AL_DIA, null);
HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser); 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,
new HttpEntity<>(dtoInicial, headersUser),
Void.class,
usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Modifico la categoría del recurso en la biblioteca
DTORecursoEnBiblioteca dtoModificado = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.COMPLETADO);
HttpEntity<DTORecursoEnBiblioteca> categoriaRequest = new HttpEntity<>(dtoModificado, headersUser);
// Modifico la categoría a COMPLETADO
DTORecursoEnBiblioteca dtoModificado = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.COMPLETADO, null);
ResponseEntity<Void> respuestaModificar = restTemplate.exchange( ResponseEntity<Void> respuestaModificar = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria", "/biblioteca/{usuarioId}/recursos/{recursoId}/categoria",
HttpMethod.PUT, categoriaRequest, Void.class, usuarioId, recursoId HttpMethod.PUT,
new HttpEntity<>(dtoModificado, headersUser),
Void.class,
usuarioId, recursoId
); );
assertThat(respuestaModificar.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaModificar.getStatusCode()).isEqualTo(HttpStatus.OK);
// Verifico que la categoría ha cambiado // Verifico la nueva 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.COMPLETADO.name() HttpMethod.GET, new HttpEntity<>(headersUser),
DTORecursoEnBiblioteca[].class, usuarioId, Categoria.COMPLETADO.name()
); );
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].getCategoria()).isEqualTo(Categoria.COMPLETADO); assertThat(respuestaLista.getBody()[0].getCategoria()).isEqualTo(Categoria.COMPLETADO);
} }
...@@ -356,7 +290,6 @@ public class TestBibliotecaPersonalController { ...@@ -356,7 +290,6 @@ public class TestBibliotecaPersonalController {
var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of( var authAdmin = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword" "clave", "adminpassword"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authAdmin.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenAdmin = "Bearer " + authAdmin.getBody().getToken(); String tokenAdmin = "Bearer " + authAdmin.getBody().getToken();
// Registro a un usuario normal // Registro a un usuario normal
...@@ -370,24 +303,13 @@ public class TestBibliotecaPersonalController { ...@@ -370,24 +303,13 @@ public class TestBibliotecaPersonalController {
var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of( var authUser = restTemplate.postForEntity("/usuarios/usuario@example.com", Map.of(
"clave", "password" "clave", "password"
), DTOLoginRespuesta.class); ), DTOLoginRespuesta.class);
assertThat(authUser.getStatusCode()).isEqualTo(HttpStatus.OK);
String tokenUser = "Bearer " + authUser.getBody().getToken(); String tokenUser = "Bearer " + authUser.getBody().getToken();
Long usuarioId = restTemplate.getForObject("/usuarios/email/usuario@example.com", Long.class);
ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange( // Creo un recurso
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com" DTORecurso dtoRecurso = new DTORecurso(null, "Manga de prueba", "Descripción", LocalDate.now(), "Autor", "", new HashSet<>());
);
assertThat(respuestaUsuarioId.getStatusCode()).isEqualTo(HttpStatus.OK);
Long usuarioId = respuestaUsuarioId.getBody();
assertThat(usuarioId).isNotNull();
// Creo un recurso con el administrador
Recurso recurso = new Recurso("Manga de prueba", "Descripción", LocalDate.now(), "Autor", "");
HttpHeaders headersAdmin = new HttpHeaders();
headersAdmin.set("Authorization", tokenAdmin);
headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>(); MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
formData.add("recurso", recurso); formData.add("recurso", dtoRecurso);
formData.add("foto", new ByteArrayResource(new byte[0]) { formData.add("foto", new ByteArrayResource(new byte[0]) {
@Override @Override
public String getFilename() { public String getFilename() {
...@@ -395,46 +317,47 @@ public class TestBibliotecaPersonalController { ...@@ -395,46 +317,47 @@ public class TestBibliotecaPersonalController {
} }
}); });
HttpEntity<MultiValueMap<String, Object>> requestRecurso = new HttpEntity<>(formData, headersAdmin); HttpHeaders headersAdmin = new HttpHeaders();
var respuestaRecurso = restTemplate.exchange("/recursos/", HttpMethod.POST, requestRecurso, Void.class); headersAdmin.set("Authorization", tokenAdmin);
assertThat(respuestaRecurso.getStatusCode()).isEqualTo(HttpStatus.CREATED); headersAdmin.setContentType(MediaType.MULTIPART_FORM_DATA);
ResponseEntity<DTORecurso[]> respuestaBusqueda = restTemplate.exchange( restTemplate.exchange("/recursos/", HttpMethod.POST, new HttpEntity<>(formData, headersAdmin), Void.class);
"/recursos/titulo/{titulo}", HttpMethod.GET, null, DTORecurso[].class, "Manga de prueba"
); Long recursoId = restTemplate.getForObject("/recursos/titulo/Manga de prueba", DTORecurso[].class)[0].getId();
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaBusqueda.getBody()).isNotEmpty();
Long recursoId = respuestaBusqueda.getBody()[0].getId();
assertThat(recursoId).isNotNull();
// Añado el recurso a la biblioteca del usuario // Añado el recurso a la biblioteca del usuario
DTORecursoEnBiblioteca dtoBib = new DTORecursoEnBiblioteca(recursoId, "Manga de prueba", Categoria.AL_DIA, null);
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(recursoId, "Manga de prueba", Categoria.AL_DIA); restTemplate.exchange(
HttpEntity<DTORecursoEnBiblioteca> bibliotecaRequest = new HttpEntity<>(dtoRecurso, headersUser);
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,
new HttpEntity<>(dtoBib, headersUser),
Void.class,
usuarioId, recursoId
); );
assertThat(respuestaAñadir.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Elimino el recurso de la biblioteca // Elimino el recurso
ResponseEntity<Void> respuestaEliminar = restTemplate.exchange( var respuestaEliminar = restTemplate.exchange(
"/biblioteca/{usuarioId}/recursos/{recursoId}", "/biblioteca/{usuarioId}/recursos/{recursoId}",
HttpMethod.DELETE, new HttpEntity<>(headersUser), Void.class, usuarioId, recursoId HttpMethod.DELETE,
new HttpEntity<>(headersUser),
Void.class,
usuarioId, recursoId
); );
assertThat(respuestaEliminar.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(respuestaEliminar.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
// Verifico que el recurso ya no está en la biblioteca // Verifico que ya no está
ResponseEntity<DTORecursoEnBiblioteca[]> respuestaLista = restTemplate.exchange( var respuestaPostEliminacion = 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()
); );
assertThat(respuestaPostEliminacion.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaLista.getBody()).isNotNull();
} }
} }
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