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
4da14105
authored
Feb 24, 2025
by
Rubén Ramírez
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
feat: [BibliotecaPersonalController]: Creadas funciones en el controlador con su test
parent
25ef7c1b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
161 additions
and
72 deletions
src/main/java/com/ujaen/tfg/mangaffinity/rest/BibliotecaPersonalController.java
src/main/java/com/ujaen/tfg/mangaffinity/seguridad/ServicioSeguridad.java
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestBibliotecaPersonalController.java
src/main/java/com/ujaen/tfg/mangaffinity/rest/BibliotecaPersonalController.java
View file @
4da14105
...
...
@@ -50,16 +50,24 @@ public class BibliotecaPersonalController {
return
ResponseEntity
.
status
(
HttpStatus
.
NOT_FOUND
).
build
();
}
boolean
yaExiste
=
servicioBibliotecaPersonal
.
listarPorCategoria
(
biblioteca
.
getId
(),
dtoRecursoEnBiblioteca
.
getCategoria
())
.
stream
()
.
anyMatch
(
bpr
->
bpr
.
getRecurso
().
getId
().
equals
(
recursoId
));
if
(
yaExiste
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
CONFLICT
).
build
();
}
servicioBibliotecaPersonal
.
anadirRecursoBiblioteca
(
biblioteca
,
recurso
,
dtoRecursoEnBiblioteca
.
getCategoria
());
return
ResponseEntity
.
status
(
HttpStatus
.
CREATED
).
build
();
}
catch
(
RecursoNoExiste
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
NOT_FOUND
).
build
();
}
catch
(
Exception
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
INTERNAL_SERVER_ERROR
).
build
();
}
}
@GetMapping
(
"/{usuarioId}/recursos/categoria/{categoria}"
)
public
ResponseEntity
<
List
<
DTORecursoEnBiblioteca
>>
listarRecursosPorCategoria
(
@PathVariable
Long
usuarioId
,
@PathVariable
Categoria
categoria
)
{
try
{
...
...
@@ -89,7 +97,7 @@ public class BibliotecaPersonalController {
}
servicioBibliotecaPersonal
.
eliminarRecurso
(
biblioteca
.
getId
(),
recursoId
);
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
b
ody
(
"Recurso eliminado correctamente"
);
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
b
uild
(
);
}
catch
(
Exception
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
INTERNAL_SERVER_ERROR
).
build
();
}
...
...
@@ -107,7 +115,7 @@ public class BibliotecaPersonalController {
servicioBibliotecaPersonal
.
modificarCategoria
(
biblioteca
.
getId
(),
recursoId
,
dtoRecurso
.
getCategoria
());
return
ResponseEntity
.
status
(
HttpStatus
.
OK
).
build
();
}
catch
(
Exception
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
INTERNAL_SERVER_ERROR
).
b
ody
(
"Error interno"
);
return
ResponseEntity
.
status
(
HttpStatus
.
INTERNAL_SERVER_ERROR
).
b
uild
(
);
}
}
...
...
src/main/java/com/ujaen/tfg/mangaffinity/seguridad/ServicioSeguridad.java
View file @
4da14105
...
...
@@ -28,6 +28,7 @@ public class ServicioSeguridad {
.
httpBasic
(
httpBasic
->
httpBasic
.
realmName
(
"mangaffinity"
))
.
authorizeHttpRequests
(
request
->
request
.
requestMatchers
(
HttpMethod
.
POST
,
"/usuarios/{email}"
).
permitAll
()
.
requestMatchers
(
HttpMethod
.
GET
,
"/usuarios/email/{email}"
).
permitAll
()
.
requestMatchers
(
HttpMethod
.
POST
,
"/usuarios/"
).
permitAll
()
.
requestMatchers
(
HttpMethod
.
GET
,
"/recursos/titulo/**"
).
permitAll
()
.
requestMatchers
(
HttpMethod
.
GET
,
"/recursos/autor/**"
).
permitAll
()
...
...
@@ -40,12 +41,13 @@ public class ServicioSeguridad {
.
requestMatchers
(
HttpMethod
.
DELETE
,
"/recursos/{id}"
).
hasAuthority
(
"ROLE_ADMIN"
)
.
requestMatchers
(
HttpMethod
.
POST
,
"/recursos/{id}/capitulos"
).
hasAuthority
(
"ROLE_ADMIN"
)
.
requestMatchers
(
HttpMethod
.
GET
,
"/recursos/{id}/capitulos"
).
permitAll
()
.
requestMatchers
(
HttpMethod
.
GET
,
"/usuarios/{usuarioId}/biblioteca"
).
permitAll
()
// 🔹 Protección de las rutas de la biblioteca (solo usuarios autenticados)
.
requestMatchers
(
HttpMethod
.
POST
,
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
).
authenticated
()
.
requestMatchers
(
HttpMethod
.
GET
,
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}"
).
authenticated
()
.
requestMatchers
(
HttpMethod
.
DELETE
,
"/biblioteca/{usuarioId}/recursos/{recursoId}"
).
authenticated
()
// ✅ Nueva regla
.
requestMatchers
(
HttpMethod
.
PUT
,
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
).
authenticated
()
// ✅ Nueva regla
.
requestMatchers
(
HttpMethod
.
DELETE
,
"/biblioteca/{usuarioId}/recursos/{recursoId}"
).
authenticated
()
.
requestMatchers
(
HttpMethod
.
PUT
,
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
).
authenticated
()
.
anyRequest
().
authenticated
()
)
...
...
src/test/java/com/ujaen/tfg/mangaffinity/rest/TestBibliotecaPersonalController.java
View file @
4da14105
...
...
@@ -20,6 +20,32 @@ import org.springframework.test.context.ActiveProfiles;
import
java.time.LocalDate
;
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
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
@SpringBootTest
(
classes
=
{
MangAffinityApplication
.
class
,
JpaTestConfig
.
class
},
webEnvironment
=
SpringBootTest
.
WebEnvironment
.
RANDOM_PORT
)
...
...
@@ -36,21 +62,21 @@ public class TestBibliotecaPersonalController {
@Test
@DirtiesContext
void
testAnadirRecursoBiblioteca
()
{
//
🔹 Registrar
administrador
//
Registro un
administrador
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"admin@example.com"
,
"nombreUsuario"
,
"admin"
,
"contrasenia"
,
"adminpassword"
),
Void
.
class
);
//
🔹 Iniciar sesión d
el administrador
//
Inicio sesión con
el administrador
var
authAdmin
=
restTemplate
.
postForEntity
(
"/usuarios/admin@example.com"
,
Map
.
of
(
"clave"
,
"adminpassword"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authAdmin
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenAdmin
=
"Bearer "
+
authAdmin
.
getBody
().
getToken
();
//
🔹 Registrar
usuario normal
//
Registro un
usuario normal
ResponseEntity
<
Void
>
respuestaUsuario
=
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"usuario@example.com"
,
"nombreUsuario"
,
"usuario"
,
...
...
@@ -58,14 +84,13 @@ public class TestBibliotecaPersonalController {
),
Void
.
class
);
assertThat
(
respuestaUsuario
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
//
🔹 Iniciar sesión d
el usuario
//
Inicio sesión con
el usuario
var
authUser
=
restTemplate
.
postForEntity
(
"/usuarios/usuario@example.com"
,
Map
.
of
(
"clave"
,
"password"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authUser
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenUser
=
"Bearer "
+
authUser
.
getBody
().
getToken
();
// 🔹 Buscar el usuario creado para obtener su ID
ResponseEntity
<
Long
>
respuestaUsuarioId
=
restTemplate
.
exchange
(
"/usuarios/email/{email}"
,
HttpMethod
.
GET
,
null
,
Long
.
class
,
"usuario@example.com"
);
...
...
@@ -73,7 +98,7 @@ public class TestBibliotecaPersonalController {
Long
usuarioId
=
respuestaUsuarioId
.
getBody
();
assertThat
(
usuarioId
).
isNotNull
();
//
🔹 Crear
un recurso con el administrador
//
Creo
un recurso con el administrador
Recurso
nuevoRecurso
=
new
Recurso
(
"Titulo Prueba"
,
"Descripción de prueba"
,
LocalDate
.
now
(),
"Autor Prueba"
);
HttpHeaders
headersAdmin
=
new
HttpHeaders
();
headersAdmin
.
set
(
"Authorization"
,
tokenAdmin
);
...
...
@@ -83,18 +108,16 @@ public class TestBibliotecaPersonalController {
var
respuestaRecurso
=
restTemplate
.
exchange
(
"/recursos/"
,
HttpMethod
.
POST
,
requestAdmin
,
Void
.
class
);
assertThat
(
respuestaRecurso
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
// 🔹 Buscar el recurso creado para obtener su ID
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
();
//
🔹 Usuario añade
el recurso a su biblioteca
DTORecursoEnBiblioteca
dtoRecurso
=
new
DTORecursoEnBiblioteca
(
null
,
"Titulo Prueba"
,
Categoria
.
AL_DIA
);
//
Añado con el usuario
el recurso a su biblioteca
DTORecursoEnBiblioteca
dtoRecurso
=
new
DTORecursoEnBiblioteca
(
recursoId
,
"Titulo Prueba"
,
Categoria
.
AL_DIA
);
HttpHeaders
headersUser
=
new
HttpHeaders
();
headersUser
.
set
(
"Authorization"
,
tokenUser
);
headersUser
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
...
...
@@ -106,217 +129,273 @@ public class TestBibliotecaPersonalController {
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
usuarioId
,
recursoId
);
// 🔹 Verificar que se añadió correctamente
assertThat
(
respuestaBiblioteca
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
}
@Test
@DirtiesContext
void
testListarRecursosPorCategoria
()
{
//
🔹 Registrar
un administrador
//
Registro
un administrador
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"admin@example.com"
,
"nombreUsuario"
,
"admin"
,
"contrasenia"
,
"adminpassword"
),
Void
.
class
);
//
🔹 Iniciar
sesión del administrador
//
Inicio
sesión del administrador
var
authAdmin
=
restTemplate
.
postForEntity
(
"/usuarios/admin@example.com"
,
Map
.
of
(
"clave"
,
"adminpassword"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authAdmin
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenAdmin
=
"Bearer "
+
authAdmin
.
getBody
().
getToken
();
//
🔹 Registrar
un usuario normal
//
Registro
un usuario normal
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"usuario@example.com"
,
"nombreUsuario"
,
"usuario"
,
"contrasenia"
,
"password"
),
Void
.
class
);
//
🔹 Iniciar
sesión del usuario
//
Inicio
sesión del usuario
var
authUser
=
restTemplate
.
postForEntity
(
"/usuarios/usuario@example.com"
,
Map
.
of
(
"clave"
,
"password"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authUser
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenUser
=
"Bearer "
+
authUser
.
getBody
().
getToken
();
//
🔹 Crear
el recurso con el administrador
//
Creo
el recurso con el administrador
HttpHeaders
headersAdmin
=
new
HttpHeaders
();
headersAdmin
.
set
(
"Authorization"
,
tokenAdmin
);
headersAdmin
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
Recurso
recurso
=
new
Recurso
(
"Titulo Prueba"
,
"Descripción de prueba"
,
LocalDate
.
now
(),
"Autor Prueba"
);
HttpEntity
<
Recurso
>
requestAdmin
=
new
HttpEntity
<>(
recurso
,
headersAdmin
);
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
);
// 🔹 Buscar el recurso creado para obtener su ID
ResponseEntity
<
DTORecurso
[]>
respuestaBusqueda
=
restTemplate
.
exchange
(
"/recursos/titulo/{titulo}"
,
HttpMethod
.
GET
,
null
,
DTORecurso
[].
class
,
"Titulo Prueba"
);
// ✅ Verificar que el recurso fue encontrado antes de obtener su ID
assertThat
(
respuestaBusqueda
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaBusqueda
.
getBody
()).
isNotNull
().
isNotEmpty
();
Long
recursoId
=
respuestaBusqueda
.
getBody
()[
0
].
getId
();
assertThat
(
recursoId
).
isNotNull
();
// 🔹 Usuario añade el recurso a su biblioteca
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ñado con el usuario el recurso a su biblioteca
HttpHeaders
headersUser
=
new
HttpHeaders
();
headersUser
.
set
(
"Authorization"
,
tokenUser
);
headersUser
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
DTORecursoEnBiblioteca
dtoRecurso
=
new
DTORecursoEnBiblioteca
(
null
,
"Titulo Prueba"
,
Categoria
.
AL_DIA
);
HttpEntity
<
DTORecursoEnBiblioteca
>
bibliotecaRequest
=
new
HttpEntity
<>(
dtoRecurso
,
headersUser
);
ResponseEntity
<
Void
>
respuestaA
ñ
adir
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
,
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
1
,
recursoId
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
usuarioId
,
recursoId
);
assertThat
(
respuestaA
ñ
adir
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
//
🔹 Listar
los recursos de la biblioteca personal filtrados por categoría
//
Listo
los recursos de la biblioteca personal filtrados por categoría
ResponseEntity
<
DTORecursoEnBiblioteca
[]>
respuestaLista
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}"
,
HttpMethod
.
GET
,
new
HttpEntity
<>(
headersUser
),
DTORecursoEnBiblioteca
[].
class
,
1
,
Categoria
.
AL_DIA
.
name
()
HttpMethod
.
GET
,
new
HttpEntity
<>(
headersUser
),
DTORecursoEnBiblioteca
[].
class
,
usuarioId
,
Categoria
.
AL_DIA
.
name
()
);
//
🔹 Validaciones del test
//
Validaciones
assertThat
(
respuestaLista
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaLista
.
getBody
()).
isNotNull
().
isNotEmpty
();
assertThat
(
respuestaLista
.
getBody
()[
0
].
getTitulo
()).
isEqualTo
(
"Titulo Prueba"
);
assertThat
(
respuestaLista
.
getBody
()[
0
].
getCategoria
()).
isEqualTo
(
Categoria
.
AL_DIA
);
}
@Test
@DirtiesContext
void
testEliminarRecursoDeBiblioteca
()
{
// Registrar usuario
// Registro un administrador
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"admin@example.com"
,
"nombreUsuario"
,
"admin"
,
"contrasenia"
,
"adminpassword"
),
Void
.
class
);
// Inicio sesión con el administrador
var
authAdmin
=
restTemplate
.
postForEntity
(
"/usuarios/admin@example.com"
,
Map
.
of
(
"clave"
,
"adminpassword"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authAdmin
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenAdmin
=
"Bearer "
+
authAdmin
.
getBody
().
getToken
();
// Registro a un usuario normal
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"usuario@example.com"
,
"nombreUsuario"
,
"usuario"
,
"contrasenia"
,
"password"
),
Void
.
class
);
// Inici
ar sesión de
l usuario
// Inici
o sesión a
l usuario
var
authUser
=
restTemplate
.
postForEntity
(
"/usuarios/usuario@example.com"
,
Map
.
of
(
"clave"
,
"password"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authUser
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenUser
=
"Bearer "
+
authUser
.
getBody
().
getToken
();
// Crear un recurso
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
();
// Creo un recurso con el administrador
Recurso
recurso
=
new
Recurso
(
"Manga de prueba"
,
"Descripción"
,
LocalDate
.
now
(),
"Autor"
);
HttpHeaders
headers
User
=
new
HttpHeaders
();
headers
User
.
set
(
"Authorization"
,
tokenUser
);
HttpEntity
<
Recurso
>
requestRecurso
=
new
HttpEntity
<>(
recurso
,
headersUser
);
HttpHeaders
headers
Admin
=
new
HttpHeaders
();
headers
Admin
.
set
(
"Authorization"
,
tokenAdmin
);
headersAdmin
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
HttpEntity
<
Recurso
>
requestRecurso
=
new
HttpEntity
<>(
recurso
,
headersAdmin
);
var
respuestaRecurso
=
restTemplate
.
exchange
(
"/recursos/"
,
HttpMethod
.
POST
,
requestRecurso
,
Void
.
class
);
assertThat
(
respuestaRecurso
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
// Buscar el recurso creado para obtener su ID
ResponseEntity
<
Recurso
[]>
respuestaBusqueda
=
restTemplate
.
getForEntity
(
"/recursos/titulo/Manga de prueba"
,
Recurso
[].
class
ResponseEntity
<
DTORecurso
[]>
respuestaBusqueda
=
restTemplate
.
exchange
(
"/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ñadir el recurso a la biblioteca
// Añado el recurso a la biblioteca del usuario
HttpHeaders
headersUser
=
new
HttpHeaders
();
headersUser
.
set
(
"Authorization"
,
tokenUser
);
headersUser
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
DTORecursoEnBiblioteca
dtoRecurso
=
new
DTORecursoEnBiblioteca
(
recursoId
,
"Manga de prueba"
,
Categoria
.
AL_DIA
);
HttpEntity
<
DTORecursoEnBiblioteca
>
bibliotecaRequest
=
new
HttpEntity
<>(
dtoRecurso
,
headersUser
);
ResponseEntity
<
Void
>
respuestaA
ñ
adir
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
,
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
1
,
recursoId
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
usuarioId
,
recursoId
);
assertThat
(
respuestaA
ñ
adir
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
// Elimin
ar
el recurso de la biblioteca
ResponseEntity
<
String
>
respuestaEliminar
=
restTemplate
.
exchange
(
// Elimin
o
el recurso de la biblioteca
ResponseEntity
<
Void
>
respuestaEliminar
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/{recursoId}"
,
HttpMethod
.
DELETE
,
new
HttpEntity
<>(
headersUser
),
String
.
class
,
1
,
recursoId
HttpMethod
.
DELETE
,
new
HttpEntity
<>(
headersUser
),
Void
.
class
,
usuarioId
,
recursoId
);
assertThat
(
respuestaEliminar
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaEliminar
.
getBody
()).
isEqualTo
(
"Recurso eliminado correctamente"
);
// Verific
ar
que el recurso ya no está en la biblioteca
// Verific
o
que el recurso ya no está en la biblioteca
ResponseEntity
<
DTORecursoEnBiblioteca
[]>
respuestaLista
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}"
,
HttpMethod
.
GET
,
new
HttpEntity
<>(
headersUser
),
DTORecursoEnBiblioteca
[].
class
,
1
,
Categoria
.
AL_DIA
.
name
()
HttpMethod
.
GET
,
new
HttpEntity
<>(
headersUser
),
DTORecursoEnBiblioteca
[].
class
,
usuarioId
,
Categoria
.
AL_DIA
.
name
()
);
assertThat
(
respuestaLista
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaLista
.
getBody
()).
isNotNull
();
assertThat
(
respuestaLista
.
getBody
()).
isEmpty
();
}
@Test
@DirtiesContext
void
testModificarCategoriaDeRecurso
()
{
// Registrar usuario
// Registro un administrador
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"admin@example.com"
,
"nombreUsuario"
,
"admin"
,
"contrasenia"
,
"adminpassword"
),
Void
.
class
);
// Inicio sesión con el administrador
var
authAdmin
=
restTemplate
.
postForEntity
(
"/usuarios/admin@example.com"
,
Map
.
of
(
"clave"
,
"adminpassword"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authAdmin
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenAdmin
=
"Bearer "
+
authAdmin
.
getBody
().
getToken
();
// Registro un usuario normal
restTemplate
.
postForEntity
(
"/usuarios/"
,
Map
.
of
(
"email"
,
"usuario@example.com"
,
"nombreUsuario"
,
"usuario"
,
"contrasenia"
,
"password"
),
Void
.
class
);
// Inici
ar sesión d
el usuario
// Inici
o sesión con
el usuario
var
authUser
=
restTemplate
.
postForEntity
(
"/usuarios/usuario@example.com"
,
Map
.
of
(
"clave"
,
"password"
),
DTOLoginRespuesta
.
class
);
assertThat
(
authUser
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
String
tokenUser
=
"Bearer "
+
authUser
.
getBody
().
getToken
();
// Crear un recurso
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
();
// Creo un recurso con el administrador
Recurso
recurso
=
new
Recurso
(
"Manga de prueba"
,
"Descripción"
,
LocalDate
.
now
(),
"Autor"
);
HttpHeaders
headers
User
=
new
HttpHeaders
();
headers
User
.
set
(
"Authorization"
,
tokenUser
);
HttpEntity
<
Recurso
>
requestRecurso
=
new
HttpEntity
<>(
recurso
,
headersUser
);
HttpHeaders
headers
Admin
=
new
HttpHeaders
();
headers
Admin
.
set
(
"Authorization"
,
tokenAdmin
);
headersAdmin
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
HttpEntity
<
Recurso
>
requestRecurso
=
new
HttpEntity
<>(
recurso
,
headersAdmin
);
var
respuestaRecurso
=
restTemplate
.
exchange
(
"/recursos/"
,
HttpMethod
.
POST
,
requestRecurso
,
Void
.
class
);
assertThat
(
respuestaRecurso
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
// Buscar el recurso creado para obtener su ID
ResponseEntity
<
Recurso
[]>
respuestaBusqueda
=
restTemplate
.
getForEntity
(
"/recursos/titulo/Manga de prueba"
,
Recurso
[].
class
ResponseEntity
<
DTORecurso
[]>
respuestaBusqueda
=
restTemplate
.
exchange
(
"/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ñadir el recurso a la biblioteca con una categoría inicial
// Añado el recurso a la biblioteca del usuario con categoría inicial
HttpHeaders
headersUser
=
new
HttpHeaders
();
headersUser
.
set
(
"Authorization"
,
tokenUser
);
headersUser
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
DTORecursoEnBiblioteca
dtoRecurso
=
new
DTORecursoEnBiblioteca
(
recursoId
,
"Manga de prueba"
,
Categoria
.
AL_DIA
);
HttpEntity
<
DTORecursoEnBiblioteca
>
bibliotecaRequest
=
new
HttpEntity
<>(
dtoRecurso
,
headersUser
);
ResponseEntity
<
Void
>
respuestaA
ñ
adir
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
,
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
1
,
recursoId
HttpMethod
.
POST
,
bibliotecaRequest
,
Void
.
class
,
usuarioId
,
recursoId
);
assertThat
(
respuestaA
ñ
adir
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
// Modific
ar
la categoría del recurso en la biblioteca
// Modific
o
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
);
ResponseEntity
<
String
>
respuestaModificar
=
restTemplate
.
exchange
(
ResponseEntity
<
Void
>
respuestaModificar
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/{recursoId}/categoria"
,
HttpMethod
.
PUT
,
categoriaRequest
,
String
.
class
,
1
,
recursoId
HttpMethod
.
PUT
,
categoriaRequest
,
Void
.
class
,
usuarioId
,
recursoId
);
assertThat
(
respuestaModificar
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
// Verific
ar
que la categoría ha cambiado
// Verific
p
que la categoría ha cambiado
ResponseEntity
<
DTORecursoEnBiblioteca
[]>
respuestaLista
=
restTemplate
.
exchange
(
"/biblioteca/{usuarioId}/recursos/categoria/{categoria}"
,
HttpMethod
.
GET
,
new
HttpEntity
<>(
headersUser
),
DTORecursoEnBiblioteca
[].
class
,
1
,
Categoria
.
COMPLETADO
.
name
()
HttpMethod
.
GET
,
new
HttpEntity
<>(
headersUser
),
DTORecursoEnBiblioteca
[].
class
,
usuarioId
,
Categoria
.
COMPLETADO
.
name
()
);
assertThat
(
respuestaLista
.
getBody
()).
isNotEmpty
();
assertThat
(
respuestaLista
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaLista
.
getBody
()).
isNotNull
().
isNotEmpty
();
assertThat
(
respuestaLista
.
getBody
()[
0
].
getCategoria
()).
isEqualTo
(
Categoria
.
COMPLETADO
);
}
}
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