1
1
package uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions
2
2
3
3
import jakarta.servlet.FilterChain
4
+ import jakarta.servlet.ServletException
4
5
import jakarta.servlet.http.HttpServletRequest
5
6
import jakarta.servlet.http.HttpServletResponse
6
7
import org.junit.jupiter.api.BeforeEach
@@ -12,6 +13,7 @@ import org.mockito.kotlin.reset
12
13
import org.mockito.kotlin.whenever
13
14
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.config.AuthorisationConfig
14
15
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.config.GlobalsConfig
16
+ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.exception.LimitedAccessException
15
17
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.roleconfig.ConsumerConfig
16
18
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.roleconfig.ConsumerFilters
17
19
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.roleconfig.Role
@@ -91,4 +93,29 @@ class AuthorisationFilterTest {
91
93
92
94
verify(mockResponse, times(1 )).sendError(403 , " No subject-distinguished-name header provided for authorisation" )
93
95
}
96
+
97
+ @Test
98
+ fun `Forbidden if limited access caused by error for path not found in roles, but found in includes` () {
99
+ val authorisationConfig = AuthorisationConfig ()
100
+ authorisationConfig.consumers = mapOf (exampleConsumer to ConsumerConfig (include = listOf (examplePath), filters = ConsumerFilters (prisons = null ), roles = listOf ()))
101
+ val invalidRoleConfig = GlobalsConfig (roles = mapOf (roleName to Role (include = emptyList())))
102
+ val authorisationFilter = AuthorisationFilter (authorisationConfig, invalidRoleConfig)
103
+ whenever(mockChain.doFilter(mockRequest, mockResponse)).thenThrow(ServletException (LimitedAccessException ()))
104
+
105
+ authorisationFilter.doFilter(mockRequest, mockResponse, mockChain)
106
+
107
+ verify(mockResponse, times(1 )).sendError(403 , " Attempt to access a limited access case" )
108
+ }
109
+
110
+ @Test
111
+ fun `Forbidden if limited access caused by error for path found in roles (but not in includes)` () {
112
+ val authorisationConfig = AuthorisationConfig ()
113
+ authorisationConfig.consumers = mapOf (exampleConsumer to ConsumerConfig (include = emptyList(), filters = ConsumerFilters (prisons = null ), roles = exampleRoles))
114
+ val authorisationFilter = AuthorisationFilter (authorisationConfig, exampleGlobalsConfig)
115
+ whenever(mockChain.doFilter(mockRequest, mockResponse)).thenThrow(ServletException (LimitedAccessException ()))
116
+
117
+ authorisationFilter.doFilter(mockRequest, mockResponse, mockChain)
118
+
119
+ verify(mockResponse, times(1 )).sendError(403 , " Attempt to access a limited access case" )
120
+ }
94
121
}
0 commit comments