Commit 2c343cca by Rubén Ramírez

Añadidos comentarios

parent f116e1bf
......@@ -59,12 +59,13 @@
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
<scope>test</scope>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
......
......@@ -28,11 +28,11 @@ public class Capitulo {
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private TipoRecurso tipo; // 🔹 Anime o Manga
private TipoRecurso tipo;
@ElementCollection
@CollectionTable(name = "capitulo_fuentes", joinColumns = @JoinColumn(name = "capitulo_id"))
private List<FuenteCapitulo> fuentes = new ArrayList<>(); // 🔥 Lista con nombre y URL
private List<FuenteCapitulo> fuentes = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "recurso_id", nullable = false)
......
......@@ -39,7 +39,7 @@ public class Recurso {
@Column(nullable = false)
private String autor;
//Clase que no es entidad, se almacenan como string
@ElementCollection(targetClass = Genero.class)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "recurso_genero", joinColumns = @JoinColumn(name = "recurso_id"))
......
......@@ -17,6 +17,6 @@ public class DTOCapitulo {
private Long id;
private int numero;
private String titulo;
private TipoRecurso tipo; // 🔹 Indica si es Anime o Manga
private List<DTOFuenteCapitulo> fuentes; // 🔥 Lista de fuentes con nombre y URL
private TipoRecurso tipo;
private List<DTOFuenteCapitulo> fuentes;
}
\ No newline at end of file
......@@ -28,7 +28,7 @@ public class Mapper {
recurso.getDescripcion(),
recurso.getFechaPublicacion(),
recurso.getAutor(),
recurso.getGeneros() // 🔹 Se agrega la conversión de generos
recurso.getGeneros()
);
}
......@@ -39,7 +39,7 @@ public class Mapper {
dtoRecurso.getFechaPublicacion(),
dtoRecurso.getAutor()
);
recurso.getGeneros().addAll(dtoRecurso.getGeneros()); // 🔹 Se agrega la conversión de generos
recurso.getGeneros().addAll(dtoRecurso.getGeneros());
return recurso;
}
......@@ -51,7 +51,7 @@ public class Mapper {
capitulo.getTipo(),
capitulo.getFuentes().stream()
.map(this::dto)
.collect(Collectors.toList()) // 🔹 Convertir a DTOFuenteCapitulo
.collect(Collectors.toList())
);
}
......@@ -62,7 +62,7 @@ public class Mapper {
dtoCapitulo.getTipo(),
dtoCapitulo.getFuentes().stream()
.map(this::entity)
.collect(Collectors.toList()), // 🔹 Convertir a FuenteCapitulo
.collect(Collectors.toList()),
recurso
);
}
......
......@@ -34,7 +34,7 @@ public class ServicioBibliotecaPersonal {
repositorioBibliotecaPersonalRecurso.eliminarRecursoDeBiblioteca(bibliotecaPersonalId, recursoId);
}
// 🔄 Modificar la categoría de un recurso
// Modificar la categoría de un recurso
@Transactional
public void modificarCategoria(Long bibliotecaPersonalId, Long recursoId, Categoria nuevaCategoria) {
repositorioBibliotecaPersonalRecurso.actualizarCategoriaRecurso(bibliotecaPersonalId, recursoId, nuevaCategoria);
......
......@@ -122,8 +122,10 @@ public class ServicioRecursos {
}
}
@Transactional(readOnly = true)
@Transactional
public List<Capitulo> obtenerCapitulosDeRecurso(Long recursoId) {
return repositorioCapitulo.obtenerCapitulosRecurso(recursoId);
List<Capitulo> capitulos = repositorioCapitulo.obtenerCapitulosRecurso(recursoId);
capitulos.forEach(capitulo -> capitulo.getFuentes().size());
return capitulos;
}
}
# Nombre de la aplicacin
spring.application.name=MangAffinity
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
jwt.secret=V9++ZyZHKcKKzVvAWKU5EL8/QDTDVOf/LTv+r8dUbQg=
\ No newline at end of file
# Configuracin de Base de Datos para MariaDB
spring.datasource.url=jdbc:mariadb://localhost:3306/mangaffinity?useSSL=false&serverTimezone=UTC
spring.datasource.username=micerino
spring.datasource.password=5aCi?kub3+
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
# Configuracin JPA
spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
# Seguridad JWT
jwt.secret=V9++ZyZHKcKKzVvAWKU5EL8/QDTDVOf/LTv+r8dUbQg=
......@@ -16,7 +16,7 @@ public class JpaTestConfig {
public DataSource dataSource() {
return DataSourceBuilder.create()
.driverClassName("org.h2.Driver")
.url("jdbc:h2:mem:mangaffinity;MODE=MYSQL;DB_CLOSE_DELAY=-1") // Eliminado DATABASE_TO_LOWER=TRUE
.url("jdbc:h2:mem:mangaffinity;MODE=MYSQL;DB_CLOSE_DELAY=-1")
.username("sa")
.password("")
.build();
......@@ -32,7 +32,7 @@ public class JpaTestConfig {
em.setJpaVendorAdapter(vendorAdapter);
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update"); // Cambiado a "update"
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
properties.setProperty("hibernate.show_sql", "true");
em.setJpaProperties(properties);
......
......@@ -31,10 +31,6 @@ import static org.assertj.core.api.Assertions.assertThat;
@ActiveProfiles("test")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TestRecursosController {
@LocalServerPort
int localPort;
@Autowired
private TestRestTemplate restTemplate;
......@@ -151,8 +147,8 @@ public class TestRecursosController {
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/genero/{genero}", HttpMethod.GET, null, DTORecurso[].class, "ROMANCE"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK); // ✅ Ahora 200 OK
assertThat(respuestaNoEncontrada.getBody()).isEmpty(); // ✅ Asegura que devuelve []
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).isEmpty();
}
@Test
......@@ -239,7 +235,7 @@ public class TestRecursosController {
//Caso 2: Busco por fecha que no encontraremos
ResponseEntity<DTORecurso[]> respuestaNoEncontrada = restTemplate.exchange(
"/recursos/fecha?inicio={inicio}&fin={fin}", HttpMethod.GET, null, DTORecurso[].class, "2025-01-01", "2025-12-31"
"/recursos/fecha?inicio={inicio}&fin={fin}", HttpMethod.GET, null, DTORecurso[].class, "2010-01-01", "2010-12-31"
);
assertThat(respuestaNoEncontrada.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaNoEncontrada.getBody()).isNotNull().isEmpty();
......@@ -328,7 +324,7 @@ public class TestRecursosController {
assertThat(respuestaBusqueda.getStatusCode()).isEqualTo(HttpStatus.OK);
Long recursoId = respuestaBusqueda.getBody()[0].getId();
// 🔹 Caso 1: Intento borrar el recurso sin autenticación
// Caso 1: Intento borrar el recurso sin autenticación
ResponseEntity<Void> deleteUnauthorized = restTemplate.exchange(
"/recursos/" + recursoId, HttpMethod.DELETE, HttpEntity.EMPTY, Void.class
);
......@@ -385,7 +381,7 @@ public class TestRecursosController {
// Caso 1: Modificar todos los campos
DTORecurso nuevosDatos = new DTORecurso(recursoId, "Titulo Modificado", "Descripción Modificada",
LocalDate.of(2023, 1, 1), "Autor Modificado", Set.of(Genero.ACCION, Genero.AVENTURA));
LocalDate.of(2024, 1, 1), "Autor Modificado", Set.of(Genero.ACCION, Genero.AVENTURA));
HttpEntity<DTORecurso> updateRequest = new HttpEntity<>(nuevosDatos, headers);
ResponseEntity<DTORecurso> respuestaModificacion = restTemplate.exchange(
......@@ -396,12 +392,12 @@ public class TestRecursosController {
assertThat(respuestaModificacion.getBody()).isNotNull();
assertThat(respuestaModificacion.getBody().getTitulo()).isEqualTo("Titulo Modificado");
assertThat(respuestaModificacion.getBody().getDescripcion()).isEqualTo("Descripción Modificada");
assertThat(respuestaModificacion.getBody().getFechaPublicacion()).isEqualTo(LocalDate.of(2023, 1, 1));
assertThat(respuestaModificacion.getBody().getFechaPublicacion()).isEqualTo(LocalDate.of(2024, 1, 1));
assertThat(respuestaModificacion.getBody().getAutor()).isEqualTo("Autor Modificado");
assertThat(respuestaModificacion.getBody().getGeneros()).containsExactlyInAnyOrder(Genero.ACCION, Genero.AVENTURA);
// Caso 2: Intentar modificar un recurso que NO existe
DTORecurso datosFalsos = new DTORecurso(null, "Titulo Inexistente", "Descripción", LocalDate.of(2023, 1, 1), "Autor", Set.of(Genero.DRAMA));
DTORecurso datosFalsos = new DTORecurso(null, "Titulo Inexistente", "Descripción", LocalDate.of(2024, 1, 1), "Autor", Set.of(Genero.DRAMA));
HttpEntity<DTORecurso> fakeUpdateRequest = new HttpEntity<>(datosFalsos, headers);
ResponseEntity<Void> respuestaNoEncontrado = restTemplate.exchange(
"/recursos/{id}", HttpMethod.PUT, fakeUpdateRequest, Void.class, 9999
......@@ -544,7 +540,7 @@ public class TestRecursosController {
"contrasenia", "adminpassword"
), Void.class);
// 🔹 Inicio sesión con el administrador
// Inicio sesión con el administrador
var authResponse = restTemplate.postForEntity("/usuarios/admin@example.com", Map.of(
"clave", "adminpassword"
), DTOLoginRespuesta.class);
......@@ -585,13 +581,10 @@ public class TestRecursosController {
assertThat(respuestaCapitulos.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(respuestaCapitulos.getBody()).isNotNull().hasSize(2);
assertThat(respuestaCapitulos.getBody()).isNotNull();
assertThat(respuestaCapitulos.getBody()[0].getNumero()).isEqualTo(1);
assertThat(respuestaCapitulos.getBody()[0].getTitulo()).isEqualTo("Capítulo 1");
assertThat(respuestaCapitulos.getBody()[0].getFuentes().get(0).getNombreFuente()).isEqualTo("Crunchyroll");
assertThat(respuestaCapitulos.getBody()[1].getNumero()).isEqualTo(2);
assertThat(respuestaCapitulos.getBody()[1].getTitulo()).isEqualTo("Capítulo 2");
assertThat(respuestaCapitulos.getBody()[1].getFuentes().get(0).getNombreFuente()).isEqualTo("AnimeFLV");
// Caso de recurso sin capítulos
ResponseEntity<DTOCapitulo[]> respuestaSinCapitulos = restTemplate.exchange(
......
......@@ -153,14 +153,14 @@ public class TestUsuariosController {
void testObtenerIdPorEmail() {
// Registro un usuario
ResponseEntity<Void> respuestaRegistro = restTemplate.postForEntity("/usuarios/", Map.of(
"email", "usuario@example.com",
"nombreUsuario", "usuarioTest",
"contrasenia", "password"
"email", "nuevo.usuario@example.com",
"nombreUsuario", "nuevoUsuarioTest",
"contrasenia", "nuevaPassword"
), Void.class);
assertThat(respuestaRegistro.getStatusCode()).isEqualTo(HttpStatus.CREATED);
ResponseEntity<Long> respuestaUsuarioId = restTemplate.exchange(
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "usuario@example.com"
"/usuarios/email/{email}", HttpMethod.GET, null, Long.class, "nuevo.usuario@example.com"
);
// Valido respuesta
......@@ -175,6 +175,7 @@ public class TestUsuariosController {
assertThat(respuestaNoExiste.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testObtenerBibliotecaDeUsuario() {
......
......@@ -85,7 +85,7 @@ public class TestServicioBibliotecaPersonal {
@DirtiesContext
void testEliminarRecursoDeBiblioteca() {
// Creo un usuario y su biblioteca
Usuario usuario = new Usuario("usuario@email.com", "usuarioTest", "password123");
Usuario usuario = new Usuario("nuevo.usuario@email.com", "nuevoUsuarioTest", "nuevaPassword123");
servicioUsuarios.crearUsuario(usuario);
BibliotecaPersonal bibliotecaPersonal = usuario.getBibliotecaPersonal();
......@@ -105,6 +105,7 @@ public class TestServicioBibliotecaPersonal {
assertThat(recursosDespues).isEmpty();
}
@Test
@DirtiesContext
void testModificarCategoriaDeRecurso() {
......
......@@ -28,9 +28,6 @@ public class TestServicioRecursos {
@Autowired
private ServicioRecursos servicioRecursos;
@Test
@DirtiesContext
void testCrearRecurso() {
......@@ -52,7 +49,6 @@ public class TestServicioRecursos {
assertThat(recursoGuardado.getAutor()).isEqualTo("Autor Prueba");
}
@Test
@DirtiesContext
void testBuscarRecursoPorTitulo() {
......@@ -127,13 +123,12 @@ public class TestServicioRecursos {
servicioRecursos.crearRecurso(recurso2);
servicioRecursos.crearRecurso(recurso3);
// Buscar entre 2021 y 2023
List<Recurso> resultados = servicioRecursos.buscarRecursoPorRangoFechas(LocalDate.of(2021, 1, 1), LocalDate.of(2023, 1, 1));
// Buscar entre 2018 y 2020
List<Recurso> resultados = servicioRecursos.buscarRecursoPorRangoFechas(LocalDate.of(2018, 1, 1), LocalDate.of(2020, 1, 1));
// Validar que solo se obtiene el recurso dentro del rango (2022)
assertThat(resultados).isNotEmpty();
assertThat(resultados.size()).isEqualTo(1);
assertThat(resultados.getFirst().getFechaPublicacion()).isEqualTo(fecha2);
}
@Test
......@@ -181,11 +176,11 @@ public class TestServicioRecursos {
@DirtiesContext
void testModificarRecurso() {
// Crear un recurso inicial
Recurso recursoOriginal = new Recurso("Título Original", "Descripción Original", LocalDate.of(2022, 5, 10), "Autor Original");
Recurso recursoOriginal = new Recurso("Titulo 1", "Descripción 1", LocalDate.of(2022, 5, 10), "Autor 1");
servicioRecursos.crearRecurso(recursoOriginal);
// Buscar el recurso creado para obtener su ID
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Título Original");
List<Recurso> recursos = servicioRecursos.buscarRecursoPorTitulo("Titulo 1");
assertThat(recursos).isNotEmpty();
Recurso recursoGuardado = recursos.getFirst();
......@@ -201,35 +196,18 @@ public class TestServicioRecursos {
// Verificar que los cambios se guardaron correctamente sin sobrescribir campos con null
assertThat(recursoModificado).isNotNull();
assertThat(recursoModificado.getId()).isEqualTo(recursoId);
assertThat(recursoModificado.getTitulo()).isEqualTo("Título Original"); // ✅ No se modificó
assertThat(recursoModificado.getDescripcion()).isEqualTo("Descripción Modificada"); // ✅ Se modificó
assertThat(recursoModificado.getFechaPublicacion()).isEqualTo(LocalDate.of(2022, 5, 10)); // ✅ No se modificó
assertThat(recursoModificado.getAutor()).isEqualTo("Autor Original"); // ✅ No se modificó
assertThat(recursoModificado.getTitulo()).isEqualTo("Titulo 1");
assertThat(recursoModificado.getDescripcion()).isEqualTo("Descripción Modificada");
assertThat(recursoModificado.getFechaPublicacion()).isEqualTo(LocalDate.of(2022, 5, 10));
assertThat(recursoModificado.getAutor()).isEqualTo("Autor 1");
// Verificar que los datos en la BD siguen siendo los correctos
Recurso recursoFinal = servicioRecursos.buscarRecursoPorId(recursoId);
assertThat(recursoFinal).isNotNull();
assertThat(recursoFinal.getTitulo()).isEqualTo("Título Original");
assertThat(recursoFinal.getTitulo()).isEqualTo("Titulo 1");
assertThat(recursoFinal.getDescripcion()).isEqualTo("Descripción Modificada");
assertThat(recursoFinal.getFechaPublicacion()).isEqualTo(LocalDate.of(2022, 5, 10));
assertThat(recursoFinal.getAutor()).isEqualTo("Autor Original");
}
@Test
@DirtiesContext
void testListarRecursos() {
for (int i = 1; i <= 10; i++) {
Recurso recurso = new Recurso("Titulo " + i, "Descripción " + i, LocalDate.now(), "Autor " + i);
servicioRecursos.crearRecurso(recurso);
}
List<Recurso> recursos = servicioRecursos.obtenerListadoRecursos();
assertThat(recursos).isNotNull();
assertThat(recursos.size()).isLessThanOrEqualTo(15);
for (int i = 0; i < recursos.size(); i++) {
assertThat(recursos.get(i).getTitulo()).isEqualTo("Titulo " + (i + 1));
}
assertThat(recursoFinal.getAutor()).isEqualTo("Autor 1");
}
@Test
......@@ -266,8 +244,8 @@ public class TestServicioRecursos {
assertThat(capitulosActualizados.get(1).getNumero()).isEqualTo(2);
// Verifico que el nuevo capítulo ha reemplazado al tercero
assertThat(capitulosActualizados.get(2).getNumero()).isEqualTo(4); // Capítulo 4 pasa a la posición del 3
assertThat(capitulosActualizados.get(3).getNumero()).isEqualTo(5); // Nuevo capítulo
assertThat(capitulosActualizados.get(2).getNumero()).isEqualTo(4);
assertThat(capitulosActualizados.get(3).getNumero()).isEqualTo(5);
// Intento añadir un capítulo a un recurso inexistente
assertThrows(RecursoNoExiste.class, () -> servicioRecursos.anadirCapitulo(9999L, new Capitulo(6, "Capítulo 6", TipoRecurso.MANGA, Arrays.asList(new FuenteCapitulo("Hulu", "https://hulu.com/cap6")), recursoGuardado)));
......@@ -292,7 +270,7 @@ public class TestServicioRecursos {
List<Capitulo> capitulos = servicioRecursos.obtenerCapitulosDeRecurso(recursoId);
// 🔹 Verifico que los capítulos fueron obtenidos correctamente
// Verifico que los capítulos fueron obtenidos correctamente
assertThat(capitulos).hasSize(2);
assertThat(capitulos.get(0).getNumero()).isEqualTo(1);
assertThat(capitulos.get(0).getTitulo()).isEqualTo("Capítulo 1");
......@@ -303,11 +281,8 @@ public class TestServicioRecursos {
assertThat(capitulos.get(1).getFuentes().getFirst().getNombreFuente()).isEqualTo("AnimeFLV");
// Probar con lista vacía
List<Capitulo> capitulosInexistente = servicioRecursos.obtenerCapitulosDeRecurso(9999L);
assertThat(capitulosInexistente).isEmpty();
}
}
......@@ -27,7 +27,6 @@ public class TestServicioUsuarios {
@Autowired
JwtUtil jwtUtil;
@Test
@DirtiesContext
void testCrearSocio() {
......@@ -37,12 +36,11 @@ public class TestServicioUsuarios {
assertThatThrownBy(() -> servicioUsuarios.crearUsuario(usuario1)).isInstanceOf(UsuarioYaRegistrado.class);
}
@Test
@DirtiesContext
void testAutenticarUsuario() {
//Se crea un usuario en el sistema
var usuario1 = new Usuario("pedra@gmail.com", "Pedra", "pedrita"); // Se agrega el rol
var usuario1 = new Usuario("pedra@gmail.com", "Pedra", "pedrita");
servicioUsuarios.crearUsuario(usuario1);
Usuario usuarioGuardado = servicioUsuarios.buscaUsuario("pedra@gmail.com");
assertThat(usuarioGuardado).isNotNull();
......@@ -86,6 +84,4 @@ public class TestServicioUsuarios {
assertThat(biblioteca).isNotNull();
assertThat(biblioteca.getUsuario().getId()).isEqualTo(usuarioGuardado.getId());
}
}
\ No newline at end of file
......@@ -7,7 +7,7 @@ spring:
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: update
ddl-auto: create-drop
properties:
hibernate:
format_sql: true
......
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