diff --git a/access-control-parent/access-control-providers/access-control-sjp-providers/src/main/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProvider.java b/access-control-parent/access-control-providers/access-control-sjp-providers/src/main/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProvider.java index 97f2dc0e..315a8445 100644 --- a/access-control-parent/access-control-providers/access-control-sjp-providers/src/main/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProvider.java +++ b/access-control-parent/access-control-providers/access-control-sjp-providers/src/main/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProvider.java @@ -11,6 +11,7 @@ import jakarta.inject.Inject; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonString; import jakarta.json.JsonValue; import java.util.Collections; @@ -69,9 +70,9 @@ private ProsecutingAuthorityAccess buildFromResponseJson(final JsonObject respon final List agentProsecutors = Optional .ofNullable(responsePayload.getJsonArray("agentProsecutorAuthorityAccess")) - .map(agentAccess -> agentAccess.getValuesAs(JsonObject.class) + .map(agentAccess -> agentAccess.getValuesAs(JsonString.class) .stream() - .map(agent -> agent.getString("prosecutingAuthority")) + .map(JsonString::getString) .collect(Collectors.toList())) .orElse(Collections.emptyList()); diff --git a/access-control-parent/access-control-providers/access-control-sjp-providers/src/test/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProviderTest.java b/access-control-parent/access-control-providers/access-control-sjp-providers/src/test/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProviderTest.java index ca67f319..4f76528a 100644 --- a/access-control-parent/access-control-providers/access-control-sjp-providers/src/test/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProviderTest.java +++ b/access-control-parent/access-control-providers/access-control-sjp-providers/src/test/java/uk/gov/moj/cpp/accesscontrol/sjp/providers/ProsecutingAuthorityProviderTest.java @@ -1,5 +1,6 @@ package uk.gov.moj.cpp.accesscontrol.sjp.providers; +import static java.util.Arrays.asList; import static java.util.UUID.randomUUID; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -162,6 +163,41 @@ public void shouldIgnoreAccessControlIfTheAccessControlDisabledPropertyIsTrueFor verify(logger).trace("Skipping prosecuting authority access control due to configuration"); } + @Test + public void shouldParseAgentProsecutorAuthorityAccessAsListOfStrings() { + + when(requester.requestAsAdmin(any())) + .thenReturn(userDetailsResponseWithAgentAccess(PROSECUTING_AUTHORITY, "TFL", "TVL")); + + final ProsecutingAuthorityAccess access = + prosecutingAuthorityProvider.getCurrentUsersProsecutingAuthorityAccess(callingEnvelope); + + assertThat(access.getProsecutingAuthority(), is(PROSECUTING_AUTHORITY)); + assertThat(access.getAgentProsecutorAuthorityAccess(), is(asList("TFL", "TVL"))); + + assertLogStatement(); + } + + @Test + public void shouldGrantAccessViaAgentProsecutorAuthority() { + + when(requester.requestAsAdmin(any())) + .thenReturn(userDetailsResponseWithAgentAccess(PROSECUTING_AUTHORITY, "TFL", "TVL")); + + assertThat(prosecutingAuthorityProvider.userHasProsecutingAuthorityAccess( + callingEnvelope, "TVL"), is(true)); + + assertLogStatement(); + } + + private JsonEnvelope userDetailsResponseWithAgentAccess(final String prosecutingAuthorityAccess, + final String... agentProsecutorAuthorities) { + return envelope() + .withPayloadOf(prosecutingAuthorityAccess, "prosecutingAuthorityAccess") + .withPayloadOf(agentProsecutorAuthorities, "agentProsecutorAuthorityAccess") + .build(); + } + private void givenUserHasNoProsecutingAuthorityAccess() { final JsonEnvelope build = JsonEnvelopeBuilder.envelope() .withPayloadOf("Fred Bloggs", "name") diff --git a/pom.xml b/pom.xml index 53534c5d..0c264213 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ 8.0.5 17.104.48 17.0.262 - 17.104.168 + 17.104.176 17.103.169 17.103.133 2.15.0