Skip to content

Test: spring-security-test + cobertura de JwtRequestFilter y controllers confidenciales

belen.varsi requested to merge pft/feature/security-tests-p0 into master

Qué

Cierra el P0 completo del hallazgo #2 (Alto) de la auditoría: agrega
spring-security-test y las primeras clases *ControllerTest del
proyecto, además de cobertura completa de JwtRequestFilter.

Por qué

Antes de esta MR, controller (0%) y security (1%) no tenían cobertura
real. Nada verificaba automáticamente que un JWT vencido o con firma
inválida fuera rechazado, ni que @PreAuthorize realmente bloqueara el
acceso a comentarios confidenciales de estudiantes por HTTP — la
"seguridad" del sistema solo se sabía que "funciona en manual".

Decisión de diseño importante: @SpringBootTest, no @WebMvcTest

En este proyecto la autorización fina (@PreAuthorize) vive en el
service, no en el controller. Un @WebMvcTest reemplaza el service por
un @MockBean — con lo cual @PreAuthorize nunca se ejecuta y el test
"pasaría" incluso si alguien borra el @PreAuthorize por accidente. Para
que el test realmente sirva de red de seguridad, se usa @SpringBootTest
(contexto completo, service real y proxied) + MockMvc, mockeando solo
los repositorios. Mismo patrón que ya usaba CategoriaCacheSeguridadOrderTest
(único precedente en el proyecto de @SpringBootTest a nivel service).

Cambios

  • pom.xml: agrega spring-security-test.
  • JwtRequestFilterTest.java (9 casos, 100% instrucciones y ramas del
    filtro): tokens reales firmados con JJWT, no mockeados.
  • ComentarioConfidencialEstudianteControllerTest.java /
    ComentarioConfidencialInstanciaControllerTest.java (6 casos c/u):
    por endpoint de listar/crear — 401 sin token, 403 sin permiso, 200/201
    con permiso, 400 con contenido en blanco.

Testing

  • Suite completa: 537 tests, 0 failures (516 + 21 nuevos).
  • Cobertura JaCoCo: JwtRequestFilter 0% → 100% instrucciones/ramas.
    ComentarioConfidencialEstudianteController/...InstanciaController:
    0% → ~43% instrucciones (2 de 5 endpoints cada uno — listar y crear).

Merge request reports

Loading