Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Rubén Ramírez
/
MangAffinity
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
2c343cca
authored
Mar 03, 2025
by
Rubén Ramírez
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Añadidos comentarios
parent
f116e1bf
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
111 additions
and
127 deletions
pom.xml
src/main/java/com/ujaen/tfg/mangaffinity/entidades/Capitulo.java
src/main/java/com/ujaen/tfg/mangaffinity/entidades/Recurso.java
src/main/java/com/ujaen/tfg/mangaffinity/rest/DTO/DTOCapitulo.java
src/main/java/com/ujaen/tfg/mangaffinity/rest/DTO/Mapper.java
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioBibliotecaPersonal.java
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioRecursos.java
src/main/resources/application.properties
src/test/java/com/ujaen/tfg/mangaffinity/config/JpaTestConfig.java
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestBibliotecaPersonalController.java
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestRecursosController.java
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestUsuariosController.java
src/test/java/com/ujaen/tfg/mangaffinity/servicios/TestServicioBibliotecaPersonal.java
src/test/java/com/ujaen/tfg/mangaffinity/servicios/TestServicioRecursos.java
src/test/java/com/ujaen/tfg/mangaffinity/servicios/TestServicioUsuarios.java
src/test/resources/application-test.yml
pom.xml
View file @
2c343cca
...
@@ -59,12 +59,13 @@
...
@@ -59,12 +59,13 @@
<artifactId>
h2
</artifactId>
<artifactId>
h2
</artifactId>
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.h2database
</groupId>
<groupId>
org.mariadb.jdbc
</groupId>
<artifactId>
h2
</artifactId>
<artifactId>
mariadb-java-client
</artifactId>
<version>
2.2.224
</version>
<scope>
runtime
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
jakarta.servlet
</groupId>
<groupId>
jakarta.servlet
</groupId>
<artifactId>
jakarta.servlet-api
</artifactId>
<artifactId>
jakarta.servlet-api
</artifactId>
...
...
src/main/java/com/ujaen/tfg/mangaffinity/entidades/Capitulo.java
View file @
2c343cca
...
@@ -28,11 +28,11 @@ public class Capitulo {
...
@@ -28,11 +28,11 @@ public class Capitulo {
@Enumerated
(
EnumType
.
STRING
)
@Enumerated
(
EnumType
.
STRING
)
@Column
(
nullable
=
false
)
@Column
(
nullable
=
false
)
private
TipoRecurso
tipo
;
// 🔹 Anime o Manga
private
TipoRecurso
tipo
;
@ElementCollection
@ElementCollection
@CollectionTable
(
name
=
"capitulo_fuentes"
,
joinColumns
=
@JoinColumn
(
name
=
"capitulo_id"
))
@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
@ManyToOne
@JoinColumn
(
name
=
"recurso_id"
,
nullable
=
false
)
@JoinColumn
(
name
=
"recurso_id"
,
nullable
=
false
)
...
...
src/main/java/com/ujaen/tfg/mangaffinity/entidades/Recurso.java
View file @
2c343cca
...
@@ -39,7 +39,7 @@ public class Recurso {
...
@@ -39,7 +39,7 @@ public class Recurso {
@Column
(
nullable
=
false
)
@Column
(
nullable
=
false
)
private
String
autor
;
private
String
autor
;
//Clase que no es entidad, se almacenan como string
@ElementCollection
(
targetClass
=
Genero
.
class
)
@ElementCollection
(
targetClass
=
Genero
.
class
)
@Enumerated
(
EnumType
.
STRING
)
@Enumerated
(
EnumType
.
STRING
)
@CollectionTable
(
name
=
"recurso_genero"
,
joinColumns
=
@JoinColumn
(
name
=
"recurso_id"
))
@CollectionTable
(
name
=
"recurso_genero"
,
joinColumns
=
@JoinColumn
(
name
=
"recurso_id"
))
...
...
src/main/java/com/ujaen/tfg/mangaffinity/rest/DTO/DTOCapitulo.java
View file @
2c343cca
...
@@ -17,6 +17,6 @@ public class DTOCapitulo {
...
@@ -17,6 +17,6 @@ public class DTOCapitulo {
private
Long
id
;
private
Long
id
;
private
int
numero
;
private
int
numero
;
private
String
titulo
;
private
String
titulo
;
private
TipoRecurso
tipo
;
// 🔹 Indica si es Anime o Manga
private
TipoRecurso
tipo
;
private
List
<
DTOFuenteCapitulo
>
fuentes
;
// 🔥 Lista de fuentes con nombre y URL
private
List
<
DTOFuenteCapitulo
>
fuentes
;
}
}
\ No newline at end of file
src/main/java/com/ujaen/tfg/mangaffinity/rest/DTO/Mapper.java
View file @
2c343cca
...
@@ -28,7 +28,7 @@ public class Mapper {
...
@@ -28,7 +28,7 @@ public class Mapper {
recurso
.
getDescripcion
(),
recurso
.
getDescripcion
(),
recurso
.
getFechaPublicacion
(),
recurso
.
getFechaPublicacion
(),
recurso
.
getAutor
(),
recurso
.
getAutor
(),
recurso
.
getGeneros
()
// 🔹 Se agrega la conversión de generos
recurso
.
getGeneros
()
);
);
}
}
...
@@ -39,7 +39,7 @@ public class Mapper {
...
@@ -39,7 +39,7 @@ public class Mapper {
dtoRecurso
.
getFechaPublicacion
(),
dtoRecurso
.
getFechaPublicacion
(),
dtoRecurso
.
getAutor
()
dtoRecurso
.
getAutor
()
);
);
recurso
.
getGeneros
().
addAll
(
dtoRecurso
.
getGeneros
());
// 🔹 Se agrega la conversión de generos
recurso
.
getGeneros
().
addAll
(
dtoRecurso
.
getGeneros
());
return
recurso
;
return
recurso
;
}
}
...
@@ -51,7 +51,7 @@ public class Mapper {
...
@@ -51,7 +51,7 @@ public class Mapper {
capitulo
.
getTipo
(),
capitulo
.
getTipo
(),
capitulo
.
getFuentes
().
stream
()
capitulo
.
getFuentes
().
stream
()
.
map
(
this
::
dto
)
.
map
(
this
::
dto
)
.
collect
(
Collectors
.
toList
())
// 🔹 Convertir a DTOFuenteCapitulo
.
collect
(
Collectors
.
toList
())
);
);
}
}
...
@@ -62,7 +62,7 @@ public class Mapper {
...
@@ -62,7 +62,7 @@ public class Mapper {
dtoCapitulo
.
getTipo
(),
dtoCapitulo
.
getTipo
(),
dtoCapitulo
.
getFuentes
().
stream
()
dtoCapitulo
.
getFuentes
().
stream
()
.
map
(
this
::
entity
)
.
map
(
this
::
entity
)
.
collect
(
Collectors
.
toList
()),
// 🔹 Convertir a FuenteCapitulo
.
collect
(
Collectors
.
toList
()),
recurso
recurso
);
);
}
}
...
...
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioBibliotecaPersonal.java
View file @
2c343cca
...
@@ -34,7 +34,7 @@ public class ServicioBibliotecaPersonal {
...
@@ -34,7 +34,7 @@ public class ServicioBibliotecaPersonal {
repositorioBibliotecaPersonalRecurso
.
eliminarRecursoDeBiblioteca
(
bibliotecaPersonalId
,
recursoId
);
repositorioBibliotecaPersonalRecurso
.
eliminarRecursoDeBiblioteca
(
bibliotecaPersonalId
,
recursoId
);
}
}
//
🔄
Modificar la categoría de un recurso
// Modificar la categoría de un recurso
@Transactional
@Transactional
public
void
modificarCategoria
(
Long
bibliotecaPersonalId
,
Long
recursoId
,
Categoria
nuevaCategoria
)
{
public
void
modificarCategoria
(
Long
bibliotecaPersonalId
,
Long
recursoId
,
Categoria
nuevaCategoria
)
{
repositorioBibliotecaPersonalRecurso
.
actualizarCategoriaRecurso
(
bibliotecaPersonalId
,
recursoId
,
nuevaCategoria
);
repositorioBibliotecaPersonalRecurso
.
actualizarCategoriaRecurso
(
bibliotecaPersonalId
,
recursoId
,
nuevaCategoria
);
...
...
src/main/java/com/ujaen/tfg/mangaffinity/servicios/ServicioRecursos.java
View file @
2c343cca
...
@@ -122,8 +122,10 @@ public class ServicioRecursos {
...
@@ -122,8 +122,10 @@ public class ServicioRecursos {
}
}
}
}
@Transactional
(
readOnly
=
true
)
@Transactional
public
List
<
Capitulo
>
obtenerCapitulosDeRecurso
(
Long
recursoId
)
{
public
List
<
Capitulo
>
obtenerCapitulosDeRecurso
(
Long
recursoId
)
{
return
repositorioCapitulo
.
obtenerCapitulosRecurso
(
recursoId
);
List
<
Capitulo
>
capitulos
=
repositorioCapitulo
.
obtenerCapitulosRecurso
(
recursoId
);
capitulos
.
forEach
(
capitulo
->
capitulo
.
getFuentes
().
size
());
return
capitulos
;
}
}
}
}
src/main/resources/application.properties
View file @
2c343cca
# Nombre de la aplicacin
spring.application.name
=
MangAffinity
spring.application.name
=
MangAffinity
spring.autoconfigure.exclude
=
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
jwt.secret
=
V9++ZyZHKcKKzVvAWKU5EL8/QDTDVOf/LTv+r8dUbQg=
# Configuracin de Base de Datos para MariaDB
\ No newline at end of file
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=
src/test/java/com/ujaen/tfg/mangaffinity/config/JpaTestConfig.java
View file @
2c343cca
...
@@ -16,7 +16,7 @@ public class JpaTestConfig {
...
@@ -16,7 +16,7 @@ public class JpaTestConfig {
public
DataSource
dataSource
()
{
public
DataSource
dataSource
()
{
return
DataSourceBuilder
.
create
()
return
DataSourceBuilder
.
create
()
.
driverClassName
(
"org.h2.Driver"
)
.
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"
)
.
username
(
"sa"
)
.
password
(
""
)
.
password
(
""
)
.
build
();
.
build
();
...
@@ -32,7 +32,7 @@ public class JpaTestConfig {
...
@@ -32,7 +32,7 @@ public class JpaTestConfig {
em
.
setJpaVendorAdapter
(
vendorAdapter
);
em
.
setJpaVendorAdapter
(
vendorAdapter
);
Properties
properties
=
new
Properties
();
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.dialect"
,
"org.hibernate.dialect.H2Dialect"
);
properties
.
setProperty
(
"hibernate.show_sql"
,
"true"
);
properties
.
setProperty
(
"hibernate.show_sql"
,
"true"
);
em
.
setJpaProperties
(
properties
);
em
.
setJpaProperties
(
properties
);
...
...
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestBibliotecaPersonalController.java
View file @
2c343cca
This diff is collapsed.
Click to expand it.
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestRecursosController.java
View file @
2c343cca
...
@@ -31,10 +31,6 @@ import static org.assertj.core.api.Assertions.assertThat;
...
@@ -31,10 +31,6 @@ import static org.assertj.core.api.Assertions.assertThat;
@ActiveProfiles
(
"test"
)
@ActiveProfiles
(
"test"
)
@DirtiesContext
(
classMode
=
DirtiesContext
.
ClassMode
.
AFTER_EACH_TEST_METHOD
)
@DirtiesContext
(
classMode
=
DirtiesContext
.
ClassMode
.
AFTER_EACH_TEST_METHOD
)
public
class
TestRecursosController
{
public
class
TestRecursosController
{
@LocalServerPort
int
localPort
;
@Autowired
@Autowired
private
TestRestTemplate
restTemplate
;
private
TestRestTemplate
restTemplate
;
...
@@ -151,8 +147,8 @@ public class TestRecursosController {
...
@@ -151,8 +147,8 @@ public class TestRecursosController {
ResponseEntity
<
DTORecurso
[]>
respuestaNoEncontrada
=
restTemplate
.
exchange
(
ResponseEntity
<
DTORecurso
[]>
respuestaNoEncontrada
=
restTemplate
.
exchange
(
"/recursos/genero/{genero}"
,
HttpMethod
.
GET
,
null
,
DTORecurso
[].
class
,
"ROMANCE"
"/recursos/genero/{genero}"
,
HttpMethod
.
GET
,
null
,
DTORecurso
[].
class
,
"ROMANCE"
);
);
assertThat
(
respuestaNoEncontrada
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
// ✅ Ahora 200 OK
assertThat
(
respuestaNoEncontrada
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaNoEncontrada
.
getBody
()).
isEmpty
();
// ✅ Asegura que devuelve []
assertThat
(
respuestaNoEncontrada
.
getBody
()).
isEmpty
();
}
}
@Test
@Test
...
@@ -239,7 +235,7 @@ public class TestRecursosController {
...
@@ -239,7 +235,7 @@ public class TestRecursosController {
//Caso 2: Busco por fecha que no encontraremos
//Caso 2: Busco por fecha que no encontraremos
ResponseEntity
<
DTORecurso
[]>
respuestaNoEncontrada
=
restTemplate
.
exchange
(
ResponseEntity
<
DTORecurso
[]>
respuestaNoEncontrada
=
restTemplate
.
exchange
(
"/recursos/fecha?inicio={inicio}&fin={fin}"
,
HttpMethod
.
GET
,
null
,
DTORecurso
[].
class
,
"20
25-01-01"
,
"2025
-12-31"
"/recursos/fecha?inicio={inicio}&fin={fin}"
,
HttpMethod
.
GET
,
null
,
DTORecurso
[].
class
,
"20
10-01-01"
,
"2010
-12-31"
);
);
assertThat
(
respuestaNoEncontrada
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaNoEncontrada
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaNoEncontrada
.
getBody
()).
isNotNull
().
isEmpty
();
assertThat
(
respuestaNoEncontrada
.
getBody
()).
isNotNull
().
isEmpty
();
...
@@ -328,7 +324,7 @@ public class TestRecursosController {
...
@@ -328,7 +324,7 @@ public class TestRecursosController {
assertThat
(
respuestaBusqueda
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaBusqueda
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
Long
recursoId
=
respuestaBusqueda
.
getBody
()[
0
].
getId
();
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
(
ResponseEntity
<
Void
>
deleteUnauthorized
=
restTemplate
.
exchange
(
"/recursos/"
+
recursoId
,
HttpMethod
.
DELETE
,
HttpEntity
.
EMPTY
,
Void
.
class
"/recursos/"
+
recursoId
,
HttpMethod
.
DELETE
,
HttpEntity
.
EMPTY
,
Void
.
class
);
);
...
@@ -385,7 +381,7 @@ public class TestRecursosController {
...
@@ -385,7 +381,7 @@ public class TestRecursosController {
// Caso 1: Modificar todos los campos
// Caso 1: Modificar todos los campos
DTORecurso
nuevosDatos
=
new
DTORecurso
(
recursoId
,
"Titulo Modificado"
,
"Descripción Modificada"
,
DTORecurso
nuevosDatos
=
new
DTORecurso
(
recursoId
,
"Titulo Modificado"
,
"Descripción Modificada"
,
LocalDate
.
of
(
202
3
,
1
,
1
),
"Autor Modificado"
,
Set
.
of
(
Genero
.
ACCION
,
Genero
.
AVENTURA
));
LocalDate
.
of
(
202
4
,
1
,
1
),
"Autor Modificado"
,
Set
.
of
(
Genero
.
ACCION
,
Genero
.
AVENTURA
));
HttpEntity
<
DTORecurso
>
updateRequest
=
new
HttpEntity
<>(
nuevosDatos
,
headers
);
HttpEntity
<
DTORecurso
>
updateRequest
=
new
HttpEntity
<>(
nuevosDatos
,
headers
);
ResponseEntity
<
DTORecurso
>
respuestaModificacion
=
restTemplate
.
exchange
(
ResponseEntity
<
DTORecurso
>
respuestaModificacion
=
restTemplate
.
exchange
(
...
@@ -396,12 +392,12 @@ public class TestRecursosController {
...
@@ -396,12 +392,12 @@ public class TestRecursosController {
assertThat
(
respuestaModificacion
.
getBody
()).
isNotNull
();
assertThat
(
respuestaModificacion
.
getBody
()).
isNotNull
();
assertThat
(
respuestaModificacion
.
getBody
().
getTitulo
()).
isEqualTo
(
"Titulo Modificado"
);
assertThat
(
respuestaModificacion
.
getBody
().
getTitulo
()).
isEqualTo
(
"Titulo Modificado"
);
assertThat
(
respuestaModificacion
.
getBody
().
getDescripcion
()).
isEqualTo
(
"Descripción Modificada"
);
assertThat
(
respuestaModificacion
.
getBody
().
getDescripcion
()).
isEqualTo
(
"Descripción Modificada"
);
assertThat
(
respuestaModificacion
.
getBody
().
getFechaPublicacion
()).
isEqualTo
(
LocalDate
.
of
(
202
3
,
1
,
1
));
assertThat
(
respuestaModificacion
.
getBody
().
getFechaPublicacion
()).
isEqualTo
(
LocalDate
.
of
(
202
4
,
1
,
1
));
assertThat
(
respuestaModificacion
.
getBody
().
getAutor
()).
isEqualTo
(
"Autor Modificado"
);
assertThat
(
respuestaModificacion
.
getBody
().
getAutor
()).
isEqualTo
(
"Autor Modificado"
);
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
(
202
3
,
1
,
1
),
"Autor"
,
Set
.
of
(
Genero
.
DRAMA
));
DTORecurso
datosFalsos
=
new
DTORecurso
(
null
,
"Titulo Inexistente"
,
"Descripción"
,
LocalDate
.
of
(
202
4
,
1
,
1
),
"Autor"
,
Set
.
of
(
Genero
.
DRAMA
));
HttpEntity
<
DTORecurso
>
fakeUpdateRequest
=
new
HttpEntity
<>(
datosFalsos
,
headers
);
HttpEntity
<
DTORecurso
>
fakeUpdateRequest
=
new
HttpEntity
<>(
datosFalsos
,
headers
);
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
...
@@ -544,7 +540,7 @@ public class TestRecursosController {
...
@@ -544,7 +540,7 @@ public class TestRecursosController {
"contrasenia"
,
"adminpassword"
"contrasenia"
,
"adminpassword"
),
Void
.
class
);
),
Void
.
class
);
//
🔹
Inicio sesión con el administrador
// 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
);
...
@@ -585,13 +581,10 @@ public class TestRecursosController {
...
@@ -585,13 +581,10 @@ public class TestRecursosController {
assertThat
(
respuestaCapitulos
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
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
].
getNumero
()).
isEqualTo
(
1
);
assertThat
(
respuestaCapitulos
.
getBody
()[
0
].
getTitulo
()).
isEqualTo
(
"Capítulo 1"
);
assertThat
(
respuestaCapitulos
.
getBody
()[
0
].
getTitulo
()).
isEqualTo
(
"Capítulo 1"
);
assertThat
(
respuestaCapitulos
.
getBody
()[
0
].
getFuentes
().
get
(
0
).
getNombreFuente
()).
isEqualTo
(
"Crunchyroll"
);
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
// Caso de recurso sin capítulos
ResponseEntity
<
DTOCapitulo
[]>
respuestaSinCapitulos
=
restTemplate
.
exchange
(
ResponseEntity
<
DTOCapitulo
[]>
respuestaSinCapitulos
=
restTemplate
.
exchange
(
...
...
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestUsuariosController.java
View file @
2c343cca
...
@@ -153,14 +153,14 @@ public class TestUsuariosController {
...
@@ -153,14 +153,14 @@ public class TestUsuariosController {
void
testObtenerIdPorEmail
()
{
void
testObtenerIdPorEmail
()
{
// Registro un usuario
// Registro un usuario
ResponseEntity
<
Void
>
respuestaRegistro
=
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
ResponseEntity
<
Void
>
respuestaRegistro
=
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"usuario@example.com"
,
"email"
,
"
nuevo.
usuario@example.com"
,
"nombreUsuario"
,
"
u
suarioTest"
,
"nombreUsuario"
,
"
nuevoU
suarioTest"
,
"contrasenia"
,
"
p
assword"
"contrasenia"
,
"
nuevaP
assword"
),
Void
.
class
);
),
Void
.
class
);
assertThat
(
respuestaRegistro
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
assertThat
(
respuestaRegistro
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
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
,
"
nuevo.
usuario@example.com"
);
);
// Valido respuesta
// Valido respuesta
...
@@ -175,6 +175,7 @@ public class TestUsuariosController {
...
@@ -175,6 +175,7 @@ public class TestUsuariosController {
assertThat
(
respuestaNoExiste
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
NOT_FOUND
);
assertThat
(
respuestaNoExiste
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
NOT_FOUND
);
}
}
@Test
@Test
@DirtiesContext
@DirtiesContext
void
testObtenerBibliotecaDeUsuario
()
{
void
testObtenerBibliotecaDeUsuario
()
{
...
...
src/test/java/com/ujaen/tfg/mangaffinity/servicios/TestServicioBibliotecaPersonal.java
View file @
2c343cca
...
@@ -85,7 +85,7 @@ public class TestServicioBibliotecaPersonal {
...
@@ -85,7 +85,7 @@ public class TestServicioBibliotecaPersonal {
@DirtiesContext
@DirtiesContext
void
testEliminarRecursoDeBiblioteca
()
{
void
testEliminarRecursoDeBiblioteca
()
{
// Creo un usuario y su biblioteca
// Creo un usuario y su biblioteca
Usuario
usuario
=
new
Usuario
(
"
usuario@email.com"
,
"usuarioTest"
,
"p
assword123"
);
Usuario
usuario
=
new
Usuario
(
"
nuevo.usuario@email.com"
,
"nuevoUsuarioTest"
,
"nuevaP
assword123"
);
servicioUsuarios
.
crearUsuario
(
usuario
);
servicioUsuarios
.
crearUsuario
(
usuario
);
BibliotecaPersonal
bibliotecaPersonal
=
usuario
.
getBibliotecaPersonal
();
BibliotecaPersonal
bibliotecaPersonal
=
usuario
.
getBibliotecaPersonal
();
...
@@ -105,6 +105,7 @@ public class TestServicioBibliotecaPersonal {
...
@@ -105,6 +105,7 @@ public class TestServicioBibliotecaPersonal {
assertThat
(
recursosDespues
).
isEmpty
();
assertThat
(
recursosDespues
).
isEmpty
();
}
}
@Test
@Test
@DirtiesContext
@DirtiesContext
void
testModificarCategoriaDeRecurso
()
{
void
testModificarCategoriaDeRecurso
()
{
...
...
src/test/java/com/ujaen/tfg/mangaffinity/servicios/TestServicioRecursos.java
View file @
2c343cca
...
@@ -28,9 +28,6 @@ public class TestServicioRecursos {
...
@@ -28,9 +28,6 @@ public class TestServicioRecursos {
@Autowired
@Autowired
private
ServicioRecursos
servicioRecursos
;
private
ServicioRecursos
servicioRecursos
;
@Test
@Test
@DirtiesContext
@DirtiesContext
void
testCrearRecurso
()
{
void
testCrearRecurso
()
{
...
@@ -52,7 +49,6 @@ public class TestServicioRecursos {
...
@@ -52,7 +49,6 @@ public class TestServicioRecursos {
assertThat
(
recursoGuardado
.
getAutor
()).
isEqualTo
(
"Autor Prueba"
);
assertThat
(
recursoGuardado
.
getAutor
()).
isEqualTo
(
"Autor Prueba"
);
}
}
@Test
@Test
@DirtiesContext
@DirtiesContext
void
testBuscarRecursoPorTitulo
()
{
void
testBuscarRecursoPorTitulo
()
{
...
@@ -127,13 +123,12 @@ public class TestServicioRecursos {
...
@@ -127,13 +123,12 @@ public class TestServicioRecursos {
servicioRecursos
.
crearRecurso
(
recurso2
);
servicioRecursos
.
crearRecurso
(
recurso2
);
servicioRecursos
.
crearRecurso
(
recurso3
);
servicioRecursos
.
crearRecurso
(
recurso3
);
// Buscar entre 2021 y 2023
// Buscar entre 2018 y 2020
List
<
Recurso
>
resultados
=
servicioRecursos
.
buscarRecursoPorRangoFechas
(
LocalDate
.
of
(
2021
,
1
,
1
),
LocalDate
.
of
(
2023
,
1
,
1
));
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
).
isNotEmpty
();
assertThat
(
resultados
.
size
()).
isEqualTo
(
1
);
assertThat
(
resultados
.
size
()).
isEqualTo
(
1
);
assertThat
(
resultados
.
getFirst
().
getFechaPublicacion
()).
isEqualTo
(
fecha2
);
}
}
@Test
@Test
...
@@ -181,11 +176,11 @@ public class TestServicioRecursos {
...
@@ -181,11 +176,11 @@ public class TestServicioRecursos {
@DirtiesContext
@DirtiesContext
void
testModificarRecurso
()
{
void
testModificarRecurso
()
{
// Crear un recurso inicial
// 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
(
"T
itulo 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
List
<
Recurso
>
recursos
=
servicioRecursos
.
buscarRecursoPorTitulo
(
"T
ítulo Original
"
);
List
<
Recurso
>
recursos
=
servicioRecursos
.
buscarRecursoPorTitulo
(
"T
itulo 1
"
);
assertThat
(
recursos
).
isNotEmpty
();
assertThat
(
recursos
).
isNotEmpty
();
Recurso
recursoGuardado
=
recursos
.
getFirst
();
Recurso
recursoGuardado
=
recursos
.
getFirst
();
...
@@ -201,35 +196,18 @@ public class TestServicioRecursos {
...
@@ -201,35 +196,18 @@ public class TestServicioRecursos {
// Verificar que los cambios se guardaron correctamente sin sobrescribir campos con null
// Verificar que los cambios se guardaron correctamente sin sobrescribir campos con null
assertThat
(
recursoModificado
).
isNotNull
();
assertThat
(
recursoModificado
).
isNotNull
();
assertThat
(
recursoModificado
.
getId
()).
isEqualTo
(
recursoId
);
assertThat
(
recursoModificado
.
getId
()).
isEqualTo
(
recursoId
);
assertThat
(
recursoModificado
.
getTitulo
()).
isEqualTo
(
"T
ítulo Original"
);
// ✅ No se modificó
assertThat
(
recursoModificado
.
getTitulo
()).
isEqualTo
(
"T
itulo 1"
);
assertThat
(
recursoModificado
.
getDescripcion
()).
isEqualTo
(
"Descripción Modificada"
);
// ✅ Se modificó
assertThat
(
recursoModificado
.
getDescripcion
()).
isEqualTo
(
"Descripción Modificada"
);
assertThat
(
recursoModificado
.
getFechaPublicacion
()).
isEqualTo
(
LocalDate
.
of
(
2022
,
5
,
10
));
// ✅ No se modificó
assertThat
(
recursoModificado
.
getFechaPublicacion
()).
isEqualTo
(
LocalDate
.
of
(
2022
,
5
,
10
));
assertThat
(
recursoModificado
.
getAutor
()).
isEqualTo
(
"Autor
Original"
);
// ✅ No se modificó
assertThat
(
recursoModificado
.
getAutor
()).
isEqualTo
(
"Autor
1"
);
// Verificar que los datos en la BD siguen siendo los correctos
// Verificar que los datos en la BD siguen siendo los correctos
Recurso
recursoFinal
=
servicioRecursos
.
buscarRecursoPorId
(
recursoId
);
Recurso
recursoFinal
=
servicioRecursos
.
buscarRecursoPorId
(
recursoId
);
assertThat
(
recursoFinal
).
isNotNull
();
assertThat
(
recursoFinal
).
isNotNull
();
assertThat
(
recursoFinal
.
getTitulo
()).
isEqualTo
(
"T
ítulo Original
"
);
assertThat
(
recursoFinal
.
getTitulo
()).
isEqualTo
(
"T
itulo 1
"
);
assertThat
(
recursoFinal
.
getDescripcion
()).
isEqualTo
(
"Descripción Modificada"
);
assertThat
(
recursoFinal
.
getDescripcion
()).
isEqualTo
(
"Descripción Modificada"
);
assertThat
(
recursoFinal
.
getFechaPublicacion
()).
isEqualTo
(
LocalDate
.
of
(
2022
,
5
,
10
));
assertThat
(
recursoFinal
.
getFechaPublicacion
()).
isEqualTo
(
LocalDate
.
of
(
2022
,
5
,
10
));
assertThat
(
recursoFinal
.
getAutor
()).
isEqualTo
(
"Autor Original"
);
assertThat
(
recursoFinal
.
getAutor
()).
isEqualTo
(
"Autor 1"
);
}
@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
));
}
}
}
@Test
@Test
...
@@ -266,8 +244,8 @@ public class TestServicioRecursos {
...
@@ -266,8 +244,8 @@ public class TestServicioRecursos {
assertThat
(
capitulosActualizados
.
get
(
1
).
getNumero
()).
isEqualTo
(
2
);
assertThat
(
capitulosActualizados
.
get
(
1
).
getNumero
()).
isEqualTo
(
2
);
// Verifico que el nuevo capítulo ha reemplazado al tercero
// 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
(
2
).
getNumero
()).
isEqualTo
(
4
);
assertThat
(
capitulosActualizados
.
get
(
3
).
getNumero
()).
isEqualTo
(
5
);
// Nuevo capítulo
assertThat
(
capitulosActualizados
.
get
(
3
).
getNumero
()).
isEqualTo
(
5
);
// Intento añadir un capítulo a un recurso inexistente
// 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
)));
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 {
...
@@ -292,7 +270,7 @@ public class TestServicioRecursos {
List
<
Capitulo
>
capitulos
=
servicioRecursos
.
obtenerCapitulosDeRecurso
(
recursoId
);
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
).
hasSize
(
2
);
assertThat
(
capitulos
.
get
(
0
).
getNumero
()).
isEqualTo
(
1
);
assertThat
(
capitulos
.
get
(
0
).
getNumero
()).
isEqualTo
(
1
);
assertThat
(
capitulos
.
get
(
0
).
getTitulo
()).
isEqualTo
(
"Capítulo 1"
);
assertThat
(
capitulos
.
get
(
0
).
getTitulo
()).
isEqualTo
(
"Capítulo 1"
);
...
@@ -303,11 +281,8 @@ public class TestServicioRecursos {
...
@@ -303,11 +281,8 @@ public class TestServicioRecursos {
assertThat
(
capitulos
.
get
(
1
).
getFuentes
().
getFirst
().
getNombreFuente
()).
isEqualTo
(
"AnimeFLV"
);
assertThat
(
capitulos
.
get
(
1
).
getFuentes
().
getFirst
().
getNombreFuente
()).
isEqualTo
(
"AnimeFLV"
);
// Probar con lista vacía
// Probar con lista vacía
List
<
Capitulo
>
capitulosInexistente
=
servicioRecursos
.
obtenerCapitulosDeRecurso
(
9999L
);
List
<
Capitulo
>
capitulosInexistente
=
servicioRecursos
.
obtenerCapitulosDeRecurso
(
9999L
);
assertThat
(
capitulosInexistente
).
isEmpty
();
assertThat
(
capitulosInexistente
).
isEmpty
();
}
}
}
}
src/test/java/com/ujaen/tfg/mangaffinity/servicios/TestServicioUsuarios.java
View file @
2c343cca
...
@@ -27,7 +27,6 @@ public class TestServicioUsuarios {
...
@@ -27,7 +27,6 @@ public class TestServicioUsuarios {
@Autowired
@Autowired
JwtUtil
jwtUtil
;
JwtUtil
jwtUtil
;
@Test
@Test
@DirtiesContext
@DirtiesContext
void
testCrearSocio
()
{
void
testCrearSocio
()
{
...
@@ -37,12 +36,11 @@ public class TestServicioUsuarios {
...
@@ -37,12 +36,11 @@ public class TestServicioUsuarios {
assertThatThrownBy
(()
->
servicioUsuarios
.
crearUsuario
(
usuario1
)).
isInstanceOf
(
UsuarioYaRegistrado
.
class
);
assertThatThrownBy
(()
->
servicioUsuarios
.
crearUsuario
(
usuario1
)).
isInstanceOf
(
UsuarioYaRegistrado
.
class
);
}
}
@Test
@Test
@DirtiesContext
@DirtiesContext
void
testAutenticarUsuario
()
{
void
testAutenticarUsuario
()
{
//Se crea un usuario en el sistema
//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
);
servicioUsuarios
.
crearUsuario
(
usuario1
);
Usuario
usuarioGuardado
=
servicioUsuarios
.
buscaUsuario
(
"pedra@gmail.com"
);
Usuario
usuarioGuardado
=
servicioUsuarios
.
buscaUsuario
(
"pedra@gmail.com"
);
assertThat
(
usuarioGuardado
).
isNotNull
();
assertThat
(
usuarioGuardado
).
isNotNull
();
...
@@ -86,6 +84,4 @@ public class TestServicioUsuarios {
...
@@ -86,6 +84,4 @@ public class TestServicioUsuarios {
assertThat
(
biblioteca
).
isNotNull
();
assertThat
(
biblioteca
).
isNotNull
();
assertThat
(
biblioteca
.
getUsuario
().
getId
()).
isEqualTo
(
usuarioGuardado
.
getId
());
assertThat
(
biblioteca
.
getUsuario
().
getId
()).
isEqualTo
(
usuarioGuardado
.
getId
());
}
}
}
}
\ No newline at end of file
src/test/resources/application-test.yml
View file @
2c343cca
...
@@ -7,7 +7,7 @@ spring:
...
@@ -7,7 +7,7 @@ spring:
jpa
:
jpa
:
database-platform
:
org.hibernate.dialect.H2Dialect
database-platform
:
org.hibernate.dialect.H2Dialect
hibernate
:
hibernate
:
ddl-auto
:
update
ddl-auto
:
create-drop
properties
:
properties
:
hibernate
:
hibernate
:
format_sql
:
true
format_sql
:
true
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment