From b04e54ee3fc0008d50ad3039cde0da25eeae4a1b Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 10:52:59 +0100 Subject: [PATCH 01/16] Gateway changes and modifications across other related tests --- .../gateways/NDeliusGateway.kt | 24 +++++++++++++ .../models/hmpps/DynamicRisk.kt | 9 +++++ .../models/ndelius/NDeliusDynamicRisk.kt | 20 +++++++++++ .../models/ndelius/NDeliusSupervisions.kt | 1 + ...etCommunityOffenderManagerForPersonTest.kt | 3 +- .../ndelius/GetMappaDetailForPersonTest.kt | 3 +- .../ndelius/GetOffencesForPersonTest.kt | 4 ++- .../ndelius/GetSentencesForPersonTest.kt | 4 ++- .../fixtures/GetSupervisionsResponse.json | 9 +++++ .../models/ndelius/SupervisionsTest.kt | 34 +++++++++++++++++++ 10 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/DynamicRisk.kt create mode 100644 src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusDynamicRisk.kt diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt index a4e33d00c..125b57b89 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt @@ -12,6 +12,7 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Offence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Sentence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.ndelius.NDeliusSupervisions @Component @@ -69,6 +70,29 @@ class NDeliusGateway( } } + fun getDynamicRisksForPerson(id: String): Response> { + val result = + webClient.request( + HttpMethod.GET, + "/case/$id/supervisions", + authenticationHeader(), + UpstreamApi.NDELIUS, + ) + + return when (result) { + is WebClientWrapperResponse.Success -> { + Response(data = result.data.dynamicRisks.map { it.toDynamicRisk() }) + } + + is WebClientWrapperResponse.Error -> { + Response( + data = emptyList(), + errors = result.errors, + ) + } + } + } + fun getMappaDetailForPerson(id: String): Response { val result = webClient.request( diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/DynamicRisk.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/DynamicRisk.kt new file mode 100644 index 000000000..6f9add2ee --- /dev/null +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/DynamicRisk.kt @@ -0,0 +1,9 @@ +package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps + +data class DynamicRisk( + val code: String? = null, + val description: String? = null, + val startDate: String? = null, + val reviewDate: String? = null, + val notes: String? = null, +) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusDynamicRisk.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusDynamicRisk.kt new file mode 100644 index 000000000..e6504f4d7 --- /dev/null +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusDynamicRisk.kt @@ -0,0 +1,20 @@ +package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.ndelius + +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk + +data class NDeliusDynamicRisk( + val code: String? = null, + val description: String? = null, + val startDate: String? = null, + val reviewDate: String? = null, + val notes: String? = null, +) { + fun toDynamicRisk(): DynamicRisk = + DynamicRisk( + code = this.code, + description = this.description, + startDate = this.startDate, + reviewDate = this.reviewDate, + notes = this.notes, + ) +} diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt index daaddd4af..cac45a367 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt @@ -4,4 +4,5 @@ data class NDeliusSupervisions( val communityManager: NDeliusCommunityManager, val mappaDetail: NDeliusMappaDetail? = null, val supervisions: List, + val dynamicRisks: List, ) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetCommunityOffenderManagerForPersonTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetCommunityOffenderManagerForPersonTest.kt index 7ea68c6c4..f327a73c9 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetCommunityOffenderManagerForPersonTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetCommunityOffenderManagerForPersonTest.kt @@ -86,7 +86,8 @@ class GetCommunityOffenderManagerForPersonTest( { "communityManager": {}, "mappaDetail": {}, - "supervisions": [] + "supervisions": [], + "dynamicRisks": [] } """, ) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetMappaDetailForPersonTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetMappaDetailForPersonTest.kt index 38018e7a8..12a920f0c 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetMappaDetailForPersonTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetMappaDetailForPersonTest.kt @@ -81,7 +81,8 @@ class GetMappaDetailForPersonTest( { "communityManager": {}, "mappaDetail": {}, - "supervisions": [] + "supervisions": [], + "dynamicRisks": [] } """, ) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetOffencesForPersonTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetOffencesForPersonTest.kt index dae2d1d08..f9ee4db84 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetOffencesForPersonTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetOffencesForPersonTest.kt @@ -146,7 +146,9 @@ class GetOffencesForPersonTest( { "communityManager": {}, "mappaDetail": null, - "supervisions": [] } + "supervisions": [], + "dynamicRisks": [] + } """, ) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetSentencesForPersonTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetSentencesForPersonTest.kt index c8736792e..0d6046394 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetSentencesForPersonTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/GetSentencesForPersonTest.kt @@ -106,7 +106,9 @@ class GetSentencesForPersonTest( { "communityManager": {}, "mappaDetail": {}, - "supervisions": [] } + "supervisions": [], + "dynamicRisks": [] + } """, ) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json index 7e8f97b69..87d7fe882 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json @@ -150,5 +150,14 @@ } ] } + ], + "dynamicRisks": [ + { + "code": "ABC", + "description": "Child protection issues", + "startDate": "2018-07-27", + "reviewDate": "2026-03-20", + "notes": "These notes are about the person." + } ] } diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt index 81efc8737..1cd92245a 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt @@ -4,6 +4,7 @@ import io.kotest.core.spec.style.DescribeSpec import io.kotest.matchers.shouldBe import uk.gov.justice.digital.hmpps.hmppsintegrationapi.helpers.generateTestSentence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Offence +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Sentence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.SentenceLength import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.SystemSource @@ -40,6 +41,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2010-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), + dynamicRisks = listOf(NDeliusDynamicRisk()) ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -99,6 +101,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2009-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), + dynamicRisks = listOf(NDeliusDynamicRisk()) ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -144,6 +147,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2009-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), + dynamicRisks = listOf(NDeliusDynamicRisk()) ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -194,6 +198,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2010-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), + dynamicRisks = listOf(NDeliusDynamicRisk()) ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -253,6 +258,7 @@ class SupervisionsTest : DescribeSpec( ), ), ), + dynamicRisks = listOf(NDeliusDynamicRisk()) ) val integrationApiSentences = supervisions.supervisions.map { it.toSentence() } @@ -296,6 +302,7 @@ class SupervisionsTest : DescribeSpec( listOf( NDeliusSupervision(custodial = true), ), + dynamicRisks = listOf(NDeliusDynamicRisk()) ) supervisions.supervisions.first().toSentence().shouldBe( @@ -316,5 +323,32 @@ class SupervisionsTest : DescribeSpec( ) } } + describe("#toDynamicRisk"){ + it("returns dynamic risk when present") { + val supervisions = + NDeliusSupervisions( + communityManager = NDeliusCommunityManager(), + mappaDetail = NDeliusMappaDetail(), + listOf(NDeliusSupervision(custodial = true)), + dynamicRisks = listOf(NDeliusDynamicRisk( + code = "ABC", + description = "Child Concerns", + startDate = "2020-01-02", + reviewDate = "2025-04-04", + notes = "To review in April." + )) + ) + + supervisions.dynamicRisks.first().toDynamicRisk().shouldBe( + DynamicRisk( + code = "ABC", + description = "Child Concerns", + startDate = "2020-01-02", + reviewDate = "2025-04-04", + notes = "To review in April." + ) + ) + } + } }, ) From 418b90f0faefeb5828f51ab555293c40788b564d Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 13:04:49 +0100 Subject: [PATCH 02/16] Lint --- .../gateways/NDeliusGateway.kt | 2 +- .../models/ndelius/SupervisionsTest.kt | 37 ++++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt index 125b57b89..08612d966 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt @@ -7,12 +7,12 @@ import org.springframework.stereotype.Component import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.WebClientWrapper import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.WebClientWrapper.WebClientWrapperResponse import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.CommunityOffenderManager +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.MappaDetail import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Offence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Sentence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.ndelius.NDeliusSupervisions @Component diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt index 1cd92245a..b417b71a5 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt @@ -3,8 +3,8 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.ndelius import io.kotest.core.spec.style.DescribeSpec import io.kotest.matchers.shouldBe import uk.gov.justice.digital.hmpps.hmppsintegrationapi.helpers.generateTestSentence -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Offence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Offence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Sentence import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.SentenceLength import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.SystemSource @@ -41,7 +41,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2010-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()) + dynamicRisks = listOf(NDeliusDynamicRisk()), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -101,7 +101,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2009-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()) + dynamicRisks = listOf(NDeliusDynamicRisk()), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -147,7 +147,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2009-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()) + dynamicRisks = listOf(NDeliusDynamicRisk()), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -198,7 +198,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2010-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()) + dynamicRisks = listOf(NDeliusDynamicRisk()), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -258,7 +258,7 @@ class SupervisionsTest : DescribeSpec( ), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()) + dynamicRisks = listOf(NDeliusDynamicRisk()), ) val integrationApiSentences = supervisions.supervisions.map { it.toSentence() } @@ -302,7 +302,7 @@ class SupervisionsTest : DescribeSpec( listOf( NDeliusSupervision(custodial = true), ), - dynamicRisks = listOf(NDeliusDynamicRisk()) + dynamicRisks = listOf(NDeliusDynamicRisk()), ) supervisions.supervisions.first().toSentence().shouldBe( @@ -323,20 +323,23 @@ class SupervisionsTest : DescribeSpec( ) } } - describe("#toDynamicRisk"){ + describe("#toDynamicRisk") { it("returns dynamic risk when present") { val supervisions = NDeliusSupervisions( communityManager = NDeliusCommunityManager(), mappaDetail = NDeliusMappaDetail(), listOf(NDeliusSupervision(custodial = true)), - dynamicRisks = listOf(NDeliusDynamicRisk( - code = "ABC", - description = "Child Concerns", - startDate = "2020-01-02", - reviewDate = "2025-04-04", - notes = "To review in April." - )) + dynamicRisks = + listOf( + NDeliusDynamicRisk( + code = "ABC", + description = "Child Concerns", + startDate = "2020-01-02", + reviewDate = "2025-04-04", + notes = "To review in April.", + ), + ), ) supervisions.dynamicRisks.first().toDynamicRisk().shouldBe( @@ -345,8 +348,8 @@ class SupervisionsTest : DescribeSpec( description = "Child Concerns", startDate = "2020-01-02", reviewDate = "2025-04-04", - notes = "To review in April." - ) + notes = "To review in April.", + ), ) } } From 8b8b3db802647f3edb1d5d95752f899f1172b42c Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 13:25:38 +0100 Subject: [PATCH 03/16] Service --- .../GetDynamicRisksForPersonService.kt | 52 +++++++ .../GetDynamicRisksForPersonServiceTest.kt | 137 ++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt create mode 100644 src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt new file mode 100644 index 000000000..cd86b6c89 --- /dev/null +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt @@ -0,0 +1,52 @@ +package uk.gov.justice.digital.hmpps.hmppsintegrationapi.services + +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.gateways.NDeliusGateway +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError + +@Service +class GetDynamicRisksForPersonService ( + @Autowired val nDeliusGateway: NDeliusGateway, + @Autowired val getPersonService: GetPersonService, +) { + fun execute(hmppsId: String): Response> { + val personResponse = getPersonService.execute(hmppsId = hmppsId) + val deliusCrn = personResponse.data?.identifiers?.deliusCrn + + var nDeliusDynamicRisks: Response> = Response(data = emptyList()) + + if (deliusCrn != null) { + val allNDeliusDynamicRisks = nDeliusGateway.getDynamicRisksForPerson(deliusCrn) + val filteredNDeliusDynamicRisks = allNDeliusDynamicRisks.data?.filter { + it.code in + listOf( + "RCCO", "RCPR", "REG22", "RVLN", "ALT8", "STRG", "AVIS", "ALT1", "WEAP", + "RHRH", "RLRH", "RMRH", "RVHR", "RCHD", "REG15", "REG16", "REG17", + "ALT4", "AVS2", "ALT7", "ALSH" + ) + }.orEmpty() + if (filteredNDeliusDynamicRisks.isEmpty()) { + return Response( + data = emptyList(), + errors = + listOf( + UpstreamApiError( + causedBy = UpstreamApi.NDELIUS, + type = UpstreamApiError.Type.ENTITY_NOT_FOUND + ), + ), + ) + } + nDeliusDynamicRisks = Response(data = filteredNDeliusDynamicRisks, errors = allNDeliusDynamicRisks.errors) + } + + return Response( + data = nDeliusDynamicRisks.data, + errors = personResponse.errors + nDeliusDynamicRisks.errors + ) + } +} diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt new file mode 100644 index 000000000..8e73df540 --- /dev/null +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt @@ -0,0 +1,137 @@ +package uk.gov.justice.digital.hmpps.hmppsintegrationapi.services + +import io.kotest.core.spec.style.DescribeSpec +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import org.mockito.Mockito +import org.mockito.internal.verification.VerificationModeFactory +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer +import org.springframework.boot.test.mock.mockito.MockBean +import org.springframework.test.context.ContextConfiguration +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.gateways.NDeliusGateway +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Identifiers +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Person +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError + +@ContextConfiguration( + initializers = [ConfigDataApplicationContextInitializer::class], + classes = [GetDynamicRisksForPersonService::class], +) +internal class GetDynamicRisksForPersonServiceTest( + @MockBean val nDeliusGateway: NDeliusGateway, + @MockBean val personService: GetPersonService, + private val getDynamicRisksForPersonService: GetDynamicRisksForPersonService, +) : DescribeSpec( + { + val hmppsId = "1234/56789B" + val deliusCrn = "X112233" + val dynamicRisk = DynamicRisk(code = "RCCO", description = "Child Concerns") + val nonMatchingDynamicRisk = DynamicRisk(code = "INVALID", description = "Invalid Dynamic Risk!") + + val person = + Person(firstName = "Qui-gon", lastName = "Jin", identifiers = Identifiers(deliusCrn = deliusCrn)) + + beforeEach { + Mockito.reset(nDeliusGateway) + Mockito.reset(personService) + + whenever(personService.execute(hmppsId = deliusCrn)).thenReturn(Response(person)) + whenever(personService.execute(hmppsId = hmppsId)).thenReturn(Response(person)) + + whenever(nDeliusGateway.getDynamicRisksForPerson(deliusCrn)).thenReturn( + Response( + data = + listOf( + dynamicRisk, + nonMatchingDynamicRisk, + ), + ), + ) + } + + it("gets a person from getPersonService") { + getDynamicRisksForPersonService.execute(hmppsId) + + verify(personService, VerificationModeFactory.times(1)).execute(hmppsId = hmppsId) + } + + it("gets dynamic risks from NDelius using a Delius crn number") { + getDynamicRisksForPersonService.execute(hmppsId) + + verify(nDeliusGateway, VerificationModeFactory.times(1)).getDynamicRisksForPerson(deliusCrn) + } + + describe("when an upstream API returns an error when looking up a person by a Hmmps Id") { + beforeEach { + whenever(personService.execute(hmppsId = hmppsId)).thenReturn( + Response( + data = null, + errors = + listOf( + UpstreamApiError( + causedBy = UpstreamApi.PRISONER_OFFENDER_SEARCH, + type = UpstreamApiError.Type.ENTITY_NOT_FOUND, + ), + ), + ), + ) + } + + it("records upstream API errors") { + val response = getDynamicRisksForPersonService.execute(hmppsId) + response.errors.shouldHaveSize(1) + } + + it("does not get dynamic risks from NDelius") { + getDynamicRisksForPersonService.execute(hmppsId) + verify(nDeliusGateway, VerificationModeFactory.times(0)).getDynamicRisksForPerson(id = deliusCrn) + } + } + + it("records errors when it cannot find dynamic risks for a person") { + whenever(nDeliusGateway.getDynamicRisksForPerson(id = deliusCrn)).thenReturn( + Response( + data = emptyList(), + errors = + listOf( + UpstreamApiError( + causedBy = UpstreamApi.NDELIUS, + type = UpstreamApiError.Type.ENTITY_NOT_FOUND, + ), + ), + ), + ) + + val response = getDynamicRisksForPersonService.execute(hmppsId) + response.errors.shouldHaveSize(1) + } + + it("returns dynamic risks filtered data") { + val response = getDynamicRisksForPersonService.execute(hmppsId) + + response.data.shouldHaveSize(1) + response.data[0].code shouldBe "RCCO" + response.data[0].description shouldBe "Child Concerns" + } + + it("returns an error when the dynamic risk code is not in the allowed list") { + whenever(personService.execute(hmppsId = deliusCrn)).thenReturn(Response(person)) + whenever(personService.execute(hmppsId = hmppsId)).thenReturn(Response(person)) + whenever(nDeliusGateway.getDynamicRisksForPerson(deliusCrn)).thenReturn( + Response( + data = listOf(nonMatchingDynamicRisk), + ), + ) + + val response = getDynamicRisksForPersonService.execute(hmppsId) + + response.errors.shouldHaveSize(1) + response.data.shouldHaveSize(0) + } + }, + ) From 28452cfa43c7c95373b65c57d2fe2344bca6be94 Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 13:25:53 +0100 Subject: [PATCH 04/16] Ling --- .../GetDynamicRisksForPersonService.kt | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt index cd86b6c89..5da7a235b 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt @@ -9,7 +9,7 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError @Service -class GetDynamicRisksForPersonService ( +class GetDynamicRisksForPersonService( @Autowired val nDeliusGateway: NDeliusGateway, @Autowired val getPersonService: GetPersonService, ) { @@ -21,14 +21,15 @@ class GetDynamicRisksForPersonService ( if (deliusCrn != null) { val allNDeliusDynamicRisks = nDeliusGateway.getDynamicRisksForPerson(deliusCrn) - val filteredNDeliusDynamicRisks = allNDeliusDynamicRisks.data?.filter { - it.code in - listOf( - "RCCO", "RCPR", "REG22", "RVLN", "ALT8", "STRG", "AVIS", "ALT1", "WEAP", - "RHRH", "RLRH", "RMRH", "RVHR", "RCHD", "REG15", "REG16", "REG17", - "ALT4", "AVS2", "ALT7", "ALSH" - ) - }.orEmpty() + val filteredNDeliusDynamicRisks = + allNDeliusDynamicRisks.data?.filter { + it.code in + listOf( + "RCCO", "RCPR", "REG22", "RVLN", "ALT8", "STRG", "AVIS", "ALT1", "WEAP", + "RHRH", "RLRH", "RMRH", "RVHR", "RCHD", "REG15", "REG16", "REG17", + "ALT4", "AVS2", "ALT7", "ALSH", + ) + }.orEmpty() if (filteredNDeliusDynamicRisks.isEmpty()) { return Response( data = emptyList(), @@ -36,7 +37,7 @@ class GetDynamicRisksForPersonService ( listOf( UpstreamApiError( causedBy = UpstreamApi.NDELIUS, - type = UpstreamApiError.Type.ENTITY_NOT_FOUND + type = UpstreamApiError.Type.ENTITY_NOT_FOUND, ), ), ) @@ -46,7 +47,7 @@ class GetDynamicRisksForPersonService ( return Response( data = nDeliusDynamicRisks.data, - errors = personResponse.errors + nDeliusDynamicRisks.errors + errors = personResponse.errors + nDeliusDynamicRisks.errors, ) } } From 115bc485592b23156bef02b845bcd83c177479c9 Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 16:00:14 +0100 Subject: [PATCH 05/16] Controller implemented --- .../v1/person/DynamicRisksController.kt | 39 ++++ .../resources/application-local-docker.yml | 1 + src/main/resources/application-local.yml | 1 + src/main/resources/application-test.yml | 1 + .../v1/person/DynamicRisksControllerTest.kt | 190 ++++++++++++++++++ 5 files changed, 232 insertions(+) create mode 100644 src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt create mode 100644 src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt new file mode 100644 index 000000000..b0f4b1cae --- /dev/null +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt @@ -0,0 +1,39 @@ +package uk.gov.justice.digital.hmpps.hmppsintegrationapi.controllers.v1.person + +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.exception.EntityNotFoundException +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.decodeUrlCharacters +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.GetDynamicRisksForPersonService +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.internal.AuditService +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.util.PaginatedResponse +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.util.paginateWith + +@RestController +@RequestMapping("/v1/persons") +class DynamicRisksController ( + @Autowired val getDynamicRisksForPersonService : GetDynamicRisksForPersonService, + @Autowired val auditService: AuditService, +) { + @GetMapping("{encodedHmppsId}/risks/dynamic") + fun getDynamicRisks( + @PathVariable encodedHmppsId: String, + @RequestParam(required = false, defaultValue = "1", name = "page") page: Int, + @RequestParam(required = false, defaultValue = "10", name = "perPage") perPage: Int, + ): PaginatedResponse { + val hmppsId = encodedHmppsId.decodeUrlCharacters() + val response = getDynamicRisksForPersonService.execute(hmppsId) + + if (response.hasError(UpstreamApiError.Type.ENTITY_NOT_FOUND)) { + throw EntityNotFoundException("Could not find person with id: $hmppsId") + } + auditService.createEvent("GET_DYNAMIC_RISKS", mapOf("hmppsId" to hmppsId)) + return response.data.paginateWith(page, perPage) + } +} diff --git a/src/main/resources/application-local-docker.yml b/src/main/resources/application-local-docker.yml index 1db34cb83..9f7f4bfed 100644 --- a/src/main/resources/application-local-docker.yml +++ b/src/main/resources/application-local-docker.yml @@ -44,6 +44,7 @@ authorisation: - "/v1/persons/.*/protected-characteristics" - "/v1/persons/.*/risks/mappadetail" - "/v1/persons/.*/risks/categories" + - "/v1/persons/.*/risks/dynamic" - "/v1/persons/.*/case-notes" - "/v1/persons/.*/person-responsible-officer" - "/v1/persons/.*/risk-management-plan" diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 7f83ee63c..2c45fd8c9 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -45,6 +45,7 @@ authorisation: - "/v1/persons/.*/risks/scores" - "/v1/persons/.*/needs" - "/v1/persons/.*/risks/serious-harm" + - "/v1/persons/.*/risks/dynamic" - "/v1/persons/.*/reported-adjudications" - "/v1/persons/.*/adjudications" - "/v1/persons/.*/licences/conditions" diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 90445e961..f1d6e8f05 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -53,6 +53,7 @@ authorisation: - "/v1/persons/.*/risks/scores" - "/v1/persons/.*/needs" - "/v1/persons/.*/risks/serious-harm" + - "/v1/persons/.*/risks/dynamic" - "/v1/persons/.*/reported-adjudications" - "/v1/epf/person-details/.*/\\.*+[^/]*$" - "/v1/persons/.*/adjudications" diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt new file mode 100644 index 000000000..c5cdf8269 --- /dev/null +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt @@ -0,0 +1,190 @@ +package uk.gov.justice.digital.hmpps.hmppsintegrationapi.controllers.v1.person + +import io.kotest.assertions.json.shouldContainJsonKeyValue +import io.kotest.core.spec.style.DescribeSpec +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import org.mockito.Mockito +import org.mockito.internal.verification.VerificationModeFactory +import org.mockito.kotlin.doThrow +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest +import org.springframework.boot.test.mock.mockito.MockBean +import org.springframework.http.HttpStatus +import org.springframework.test.context.ActiveProfiles +import org.springframework.test.web.servlet.MockMvc +import org.springframework.web.reactive.function.client.WebClientResponseException +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.removeWhitespaceAndNewlines +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.helpers.IntegrationAPIMockMvc +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.GetDynamicRisksForPersonService +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.internal.AuditService +import java.net.URLEncoder +import java.nio.charset.StandardCharsets + +@WebMvcTest(controllers = [DynamicRisksController::class]) +@ActiveProfiles("test") +internal class DynamicRisksControllerTest( + @Autowired var springMockMvc: MockMvc, + @MockBean val getDynamicRisksForPersonService: GetDynamicRisksForPersonService, + @MockBean val auditService: AuditService, +) : DescribeSpec( + { + val hmppsId = "9999/11111A" + val encodedHmppsId = URLEncoder.encode(hmppsId, StandardCharsets.UTF_8) + val path = "/v1/persons/$encodedHmppsId/risks/dynamic" + val mockMvc = IntegrationAPIMockMvc(springMockMvc) + + describe("GET $path") { + beforeTest { + Mockito.reset(getDynamicRisksForPersonService) + Mockito.reset(auditService) + whenever(getDynamicRisksForPersonService.execute(hmppsId)).thenReturn( + Response( + data = + listOf( + DynamicRisk( + code = "AVIS", + description = "Subject has a ViSOR record", + startDate = "2023-09-08", + reviewDate = "2026-04-29", + notes = "Nothing to say" + ), + DynamicRisk( + code = "RHRH", + description = "High Risk of Harm", + startDate = "2022-09-01", + reviewDate = "2024-12-23", + notes = "A lot of notes" + ), + ), + ), + ) + } + + it("returns a 200 OK status code") { + val result = mockMvc.performAuthorised(path) + + result.response.status.shouldBe(HttpStatus.OK.value()) + } + + it("logs audit") { + mockMvc.performAuthorised(path) + + verify( + auditService, + VerificationModeFactory.times(1), + ).createEvent("GET_DYNAMIC_RISKS", mapOf("hmppsId" to hmppsId)) + } + + it("gets the dynamic risks for a person with the matching ID") { + mockMvc.performAuthorised(path) + + verify(getDynamicRisksForPersonService, VerificationModeFactory.times(1)).execute(hmppsId) + } + + it("returns the dynamic risks for a person with the matching ID") { + val result = mockMvc.performAuthorised(path) + + result.response.contentAsString.shouldContain( + """ + "data": [ + { + "code": "AVIS", + "description": "Subject has a ViSOR record", + "startDate": "2023-09-08", + "reviewDate": "2026-04-29", + "notes": "Nothing to say" + }, + { + "code": "RHRH", + "description": "High Risk of Harm", + "startDate": "2022-09-01", + "reviewDate": "2024-12-23", + "notes": "A lot of notes" + } + ] + """.removeWhitespaceAndNewlines(), + ) + } + + it("returns an empty list when no dynamic risks are found") { + val hmppsIdForPersonWithNoDynamicRisks = "0123/12345B" + val encodedHmppsIdForPersonWithNoDynamicRisks = + URLEncoder.encode(hmppsIdForPersonWithNoDynamicRisks, StandardCharsets.UTF_8) + val dynamicRisksPath = "/v1/persons/$encodedHmppsIdForPersonWithNoDynamicRisks/risks/dynamic" + + whenever(getDynamicRisksForPersonService.execute(hmppsIdForPersonWithNoDynamicRisks)).thenReturn( + Response( + data = emptyList(), + ), + ) + + val result = mockMvc.performAuthorised(dynamicRisksPath) + + result.response.contentAsString.shouldContain("\"data\":[]".removeWhitespaceAndNewlines()) + } + + it("returns a 404 NOT FOUND status code when person isn't found in the upstream API") { + whenever(getDynamicRisksForPersonService.execute(hmppsId)).thenReturn( + Response( + data = emptyList(), + errors = + listOf( + UpstreamApiError( + causedBy = UpstreamApi.NOMIS, + type = UpstreamApiError.Type.ENTITY_NOT_FOUND, + ), + ), + ), + ) + + val result = mockMvc.performAuthorised(path) + + result.response.status.shouldBe(HttpStatus.NOT_FOUND.value()) + } + + it("returns paginated results") { + whenever(getDynamicRisksForPersonService.execute(hmppsId)).thenReturn( + Response( + data = + List(20) { + DynamicRisk( + code = "XNR", + description = "Not For Release", + startDate = "2022-08-01", + reviewDate = "2025-08-01", + notes = "Notes all written here" + ) + }, + ), + ) + + val result = mockMvc.performAuthorised("$path?page=1&perPage=10") + + result.response.contentAsString.shouldContainJsonKeyValue("$.pagination.page", 1) + result.response.contentAsString.shouldContainJsonKeyValue("$.pagination.totalPages", 2) + } + + it("fails with the appropriate error when an upstream service is down") { + whenever(getDynamicRisksForPersonService.execute(hmppsId)).doThrow( + WebClientResponseException(500, "MockError", null, null, null, null), + ) + + val response = mockMvc.performAuthorised("$path?page=1&perPage=10") + + assert(response.response.status == 500) + assert( + response.response.contentAsString.equals( + "{\"status\":500,\"errorCode\":null,\"userMessage\":\"500 MockError\",\"developerMessage\":\"Unable to complete request as an upstream service is not responding\",\"moreInfo\":null}", + ), + ) + } + } + } + ) From 5cbbdbd6974f336bbdccdb3785238f5a3775cfa4 Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 16:01:58 +0100 Subject: [PATCH 06/16] Lint --- .../controllers/v1/person/DynamicRisksController.kt | 4 ++-- .../v1/person/DynamicRisksControllerTest.kt | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt index b0f4b1cae..60aadde13 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksController.kt @@ -17,8 +17,8 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.util.paginateWith @RestController @RequestMapping("/v1/persons") -class DynamicRisksController ( - @Autowired val getDynamicRisksForPersonService : GetDynamicRisksForPersonService, +class DynamicRisksController( + @Autowired val getDynamicRisksForPersonService: GetDynamicRisksForPersonService, @Autowired val auditService: AuditService, ) { @GetMapping("{encodedHmppsId}/risks/dynamic") diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt index c5cdf8269..d5a770654 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/DynamicRisksControllerTest.kt @@ -19,9 +19,9 @@ import org.springframework.web.reactive.function.client.WebClientResponseExcepti import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.removeWhitespaceAndNewlines import uk.gov.justice.digital.hmpps.hmppsintegrationapi.helpers.IntegrationAPIMockMvc import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.GetDynamicRisksForPersonService import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.internal.AuditService import java.net.URLEncoder @@ -53,14 +53,14 @@ internal class DynamicRisksControllerTest( description = "Subject has a ViSOR record", startDate = "2023-09-08", reviewDate = "2026-04-29", - notes = "Nothing to say" + notes = "Nothing to say", ), DynamicRisk( code = "RHRH", description = "High Risk of Harm", startDate = "2022-09-01", reviewDate = "2024-12-23", - notes = "A lot of notes" + notes = "A lot of notes", ), ), ), @@ -159,7 +159,7 @@ internal class DynamicRisksControllerTest( description = "Not For Release", startDate = "2022-08-01", reviewDate = "2025-08-01", - notes = "Notes all written here" + notes = "Notes all written here", ) }, ), @@ -186,5 +186,5 @@ internal class DynamicRisksControllerTest( ) } } - } + }, ) From f19ef0168581cabd1d94fe5c5fc64c2277780ad0 Mon Sep 17 00:00:00 2001 From: Chiara Date: Tue, 18 Jun 2024 16:19:14 +0100 Subject: [PATCH 07/16] Auth smoke --- .../hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt index 8930cb4fa..423fe8381 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt @@ -39,6 +39,7 @@ class AuthoriseConfigTest : DescribeSpec( "/v1/persons/.*/protected-characteristics", "/v1/persons/.*/risks/mappadetail", "/v1/persons/.*/risks/categories", + "/v1/persons/.*/risks/dynamic", "/v1/persons/.*/case-notes", "/v1/persons/.*/person-responsible-officer", "/v1/persons/.*/risk-management-plan", From 70ba717f436b116c659df74a3504acfe67da4679 Mon Sep 17 00:00:00 2001 From: Chiara Date: Wed, 19 Jun 2024 11:38:51 +0100 Subject: [PATCH 08/16] Smoke test --- .../fixtures/GetSupervisionsResponse.json | 2 +- .../smoke/person/RisksSmokeTest.kt | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json index 87d7fe882..673a35276 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ndelius/fixtures/GetSupervisionsResponse.json @@ -153,7 +153,7 @@ ], "dynamicRisks": [ { - "code": "ABC", + "code": "RCCO", "description": "Child protection issues", "startDate": "2018-07-27", "reviewDate": "2026-03-20", diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt index 3e806a516..6c017759b 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt @@ -89,7 +89,7 @@ class RisksSmokeTest : DescribeSpec( ) } - it("return mappa detail for a person") { + it("returns mappa detail for a person") { val response = httpClient.performAuthorised("$basePath/mappadetail") response.statusCode().shouldBe(HttpStatus.OK.value()) @@ -110,6 +110,28 @@ class RisksSmokeTest : DescribeSpec( ) } + it("returns dynamic risks for a person") { + val response = httpClient.performAuthorised("$basePath/dynamic") + + response.statusCode().shouldBe(HttpStatus.OK.value()) + response.body().shouldEqualJson( + """ + { + "data": + [ + { + "code": "RCCO", + "description": "Child protection issues", + "startDate": "2018-07-27", + "reviewDate": "2026-03-20", + "notes": "These notes are about the person." + } + ] + } + """.removeWhitespaceAndNewlines(), + ) + } + it("returns rosh risks for a person") { val response = httpClient.performAuthorised("$basePath/serious-harm") From f61191c5e5aa486a77b03ae716e0ddde4834d920 Mon Sep 17 00:00:00 2001 From: Chiara Date: Wed, 19 Jun 2024 11:55:46 +0100 Subject: [PATCH 09/16] Format and DEV --- src/main/resources/application-dev.yml | 1 + .../smoke/person/RisksSmokeTest.kt | 21 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index e859ba5ef..6cc837814 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -64,6 +64,7 @@ authorisation: - "/v1/persons/.*/sentences/latest-key-dates-and-adjustments" - "/v1/persons/.*/risks/scores" - "/v1/persons/.*/risks/serious-harm" + - "/v1/persons/.*/risks/dynamic" - "/v1/persons/.*/licences/conditions" - "/v1/persons/.*/person-responsible-officer" event-service: diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt index 6c017759b..4645cef7f 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt @@ -117,17 +117,16 @@ class RisksSmokeTest : DescribeSpec( response.body().shouldEqualJson( """ { - "data": - [ - { - "code": "RCCO", - "description": "Child protection issues", - "startDate": "2018-07-27", - "reviewDate": "2026-03-20", - "notes": "These notes are about the person." - } - ] - } + "data": [ + { + "code": "RCCO", + "description": "Child protection issues", + "startDate": "2018-07-27", + "reviewDate": "2026-03-20", + "notes": "These notes are about the person." + } + ] + } """.removeWhitespaceAndNewlines(), ) } From 1bb9485aacd16355a4a5bcf39783da79601e5911 Mon Sep 17 00:00:00 2001 From: Chiara Date: Wed, 19 Jun 2024 14:22:47 +0100 Subject: [PATCH 10/16] Made it optiona; --- .../hmppsintegrationapi/gateways/NDeliusGateway.kt | 4 ++-- .../models/ndelius/NDeliusSupervisions.kt | 2 +- .../models/ndelius/SupervisionsTest.kt | 14 +++++++------- .../GetDynamicRisksForPersonServiceTest.kt | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt index 08612d966..0f8fa31da 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt @@ -70,7 +70,7 @@ class NDeliusGateway( } } - fun getDynamicRisksForPerson(id: String): Response> { + fun getDynamicRisksForPerson(id: String): Response?> { val result = webClient.request( HttpMethod.GET, @@ -81,7 +81,7 @@ class NDeliusGateway( return when (result) { is WebClientWrapperResponse.Success -> { - Response(data = result.data.dynamicRisks.map { it.toDynamicRisk() }) + Response(data = result.data.dynamicRisks?.map { it.toDynamicRisk() }) } is WebClientWrapperResponse.Error -> { diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt index cac45a367..204d9973e 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt @@ -4,5 +4,5 @@ data class NDeliusSupervisions( val communityManager: NDeliusCommunityManager, val mappaDetail: NDeliusMappaDetail? = null, val supervisions: List, - val dynamicRisks: List, + val dynamicRisks: List? = listOf(NDeliusDynamicRisk()), ) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt index b417b71a5..3c4984d5b 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/SupervisionsTest.kt @@ -41,7 +41,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2010-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()), + dynamicRisks = listOf(NDeliusDynamicRisk(code = "RCCO", description = "Child stuff", startDate = "2010-07-07")), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -101,7 +101,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2009-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()), + dynamicRisks = listOf(NDeliusDynamicRisk(code = "RCCO", description = "Child stuff", startDate = "2010-07-07")), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -147,7 +147,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2009-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()), + dynamicRisks = listOf(NDeliusDynamicRisk(code = "RCCO", description = "Child stuff", startDate = "2010-07-07")), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -198,7 +198,7 @@ class SupervisionsTest : DescribeSpec( courtAppearances = listOf(NDeliusCourtAppearance(date = "2010-07-07T00:00:00+01:00", court = "London Magistrates Court")), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()), + dynamicRisks = listOf(NDeliusDynamicRisk(code = "RCCO", description = "Child stuff", startDate = "2010-07-07")), ) val integrationApiOffences = supervisions.supervisions.flatMap { it.toOffences() } @@ -258,7 +258,7 @@ class SupervisionsTest : DescribeSpec( ), ), ), - dynamicRisks = listOf(NDeliusDynamicRisk()), + dynamicRisks = listOf(NDeliusDynamicRisk(code = "RCCO", description = "Child stuff", startDate = "2010-07-07")), ) val integrationApiSentences = supervisions.supervisions.map { it.toSentence() } @@ -302,7 +302,7 @@ class SupervisionsTest : DescribeSpec( listOf( NDeliusSupervision(custodial = true), ), - dynamicRisks = listOf(NDeliusDynamicRisk()), + dynamicRisks = listOf(NDeliusDynamicRisk(code = "RCCO", description = "Child stuff", startDate = "2010-07-07")), ) supervisions.supervisions.first().toSentence().shouldBe( @@ -342,7 +342,7 @@ class SupervisionsTest : DescribeSpec( ), ) - supervisions.dynamicRisks.first().toDynamicRisk().shouldBe( + supervisions.dynamicRisks?.first()?.toDynamicRisk().shouldBe( DynamicRisk( code = "ABC", description = "Child Concerns", diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt index 8e73df540..2af511353 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt @@ -30,8 +30,8 @@ internal class GetDynamicRisksForPersonServiceTest( { val hmppsId = "1234/56789B" val deliusCrn = "X112233" - val dynamicRisk = DynamicRisk(code = "RCCO", description = "Child Concerns") - val nonMatchingDynamicRisk = DynamicRisk(code = "INVALID", description = "Invalid Dynamic Risk!") + val dynamicRisk = DynamicRisk(code = "RCCO", description = "Child Concerns", startDate = "2010-07-07") + val nonMatchingDynamicRisk = DynamicRisk(code = "INVALID", description = "Invalid Dynamic Risk!", startDate = "2010-07-07") val person = Person(firstName = "Qui-gon", lastName = "Jin", identifiers = Identifiers(deliusCrn = deliusCrn)) From 36777fb8dd746c0f46bd63b120d01f15b993d8ce Mon Sep 17 00:00:00 2001 From: Chiara Date: Thu, 20 Jun 2024 14:02:48 +0100 Subject: [PATCH 11/16] Upstream changed --- .../hmppsintegrationapi/smoke/person/RisksSmokeTest.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt index 4645cef7f..c03dff7da 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt @@ -120,10 +120,10 @@ class RisksSmokeTest : DescribeSpec( "data": [ { "code": "RCCO", - "description": "Child protection issues", - "startDate": "2018-07-27", - "reviewDate": "2026-03-20", - "notes": "These notes are about the person." + "description": "Child Concerns", + "startDate": "string", + "reviewDate": "string", + "notes": "string" } ] } From 6af4f0ce4fd62b8a1236236ca7d9f97f3adf506f Mon Sep 17 00:00:00 2001 From: Chiara Date: Thu, 20 Jun 2024 14:11:09 +0100 Subject: [PATCH 12/16] Smokessss --- .../smoke/person/RisksSmokeTest.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt index c03dff7da..50dbcb468 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/RisksSmokeTest.kt @@ -118,15 +118,23 @@ class RisksSmokeTest : DescribeSpec( """ { "data": [ - { - "code": "RCCO", - "description": "Child Concerns", - "startDate": "string", - "reviewDate": "string", - "notes": "string" - } - ] + { + "code": "RCCO", + "description": "Child Concerns", + "startDate": "2019-08-24", + "reviewDate": "2019-08-24", + "notes": "string" + } + ], + "pagination": { + "isLastPage": true, + "count": 1, + "page": 1, + "perPage": 10, + "totalCount": 1, + "totalPages": 1 } + } """.removeWhitespaceAndNewlines(), ) } From f65a993ca70b722c54dc943c61e0b03f6b8ec3d5 Mon Sep 17 00:00:00 2001 From: Chiara Date: Thu, 20 Jun 2024 14:36:51 +0100 Subject: [PATCH 13/16] Changed the nullable stuff --- .../hmppsintegrationapi/gateways/NDeliusGateway.kt | 4 ++-- .../services/GetDynamicRisksForPersonService.kt | 12 ------------ .../services/GetDynamicRisksForPersonServiceTest.kt | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt index 0f8fa31da..70caa276d 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt @@ -70,7 +70,7 @@ class NDeliusGateway( } } - fun getDynamicRisksForPerson(id: String): Response?> { + fun getDynamicRisksForPerson(id: String): Response> { val result = webClient.request( HttpMethod.GET, @@ -81,7 +81,7 @@ class NDeliusGateway( return when (result) { is WebClientWrapperResponse.Success -> { - Response(data = result.data.dynamicRisks?.map { it.toDynamicRisk() }) + Response(data = result.data.dynamicRisks?.map { it.toDynamicRisk() } ?: emptyList()) } is WebClientWrapperResponse.Error -> { diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt index 5da7a235b..3b923dcfd 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt @@ -30,18 +30,6 @@ class GetDynamicRisksForPersonService( "ALT4", "AVS2", "ALT7", "ALSH", ) }.orEmpty() - if (filteredNDeliusDynamicRisks.isEmpty()) { - return Response( - data = emptyList(), - errors = - listOf( - UpstreamApiError( - causedBy = UpstreamApi.NDELIUS, - type = UpstreamApiError.Type.ENTITY_NOT_FOUND, - ), - ), - ) - } nDeliusDynamicRisks = Response(data = filteredNDeliusDynamicRisks, errors = allNDeliusDynamicRisks.errors) } diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt index 2af511353..66eca0835 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonServiceTest.kt @@ -130,7 +130,7 @@ internal class GetDynamicRisksForPersonServiceTest( val response = getDynamicRisksForPersonService.execute(hmppsId) - response.errors.shouldHaveSize(1) + response.errors.shouldHaveSize(0) response.data.shouldHaveSize(0) } }, From adb1db96f2cb6dd115bb981e0a67eed79e5b363d Mon Sep 17 00:00:00 2001 From: Chiara Date: Thu, 20 Jun 2024 14:38:20 +0100 Subject: [PATCH 14/16] lint --- .../services/GetDynamicRisksForPersonService.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt index 3b923dcfd..31d7b1377 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt @@ -5,8 +5,6 @@ import org.springframework.stereotype.Service import uk.gov.justice.digital.hmpps.hmppsintegrationapi.gateways.NDeliusGateway import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.DynamicRisk import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError @Service class GetDynamicRisksForPersonService( From a1d0bde8510c6ea3f313eba376256e57a274d6b7 Mon Sep 17 00:00:00 2001 From: Chiara Date: Thu, 20 Jun 2024 15:27:10 +0100 Subject: [PATCH 15/16] Removed nullable starting point for dynamyc Risks --- .../hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt index 204d9973e..cac45a367 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/ndelius/NDeliusSupervisions.kt @@ -4,5 +4,5 @@ data class NDeliusSupervisions( val communityManager: NDeliusCommunityManager, val mappaDetail: NDeliusMappaDetail? = null, val supervisions: List, - val dynamicRisks: List? = listOf(NDeliusDynamicRisk()), + val dynamicRisks: List, ) From ea12a90b7e0bf22c0c92a531fd334707f93997b3 Mon Sep 17 00:00:00 2001 From: Chiara Date: Thu, 20 Jun 2024 15:30:01 +0100 Subject: [PATCH 16/16] Removed unnecessary nullable --- .../hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt | 2 +- .../services/GetDynamicRisksForPersonService.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt index 70caa276d..08612d966 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/NDeliusGateway.kt @@ -81,7 +81,7 @@ class NDeliusGateway( return when (result) { is WebClientWrapperResponse.Success -> { - Response(data = result.data.dynamicRisks?.map { it.toDynamicRisk() } ?: emptyList()) + Response(data = result.data.dynamicRisks.map { it.toDynamicRisk() }) } is WebClientWrapperResponse.Error -> { diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt index 31d7b1377..911c18b0b 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetDynamicRisksForPersonService.kt @@ -20,14 +20,14 @@ class GetDynamicRisksForPersonService( if (deliusCrn != null) { val allNDeliusDynamicRisks = nDeliusGateway.getDynamicRisksForPerson(deliusCrn) val filteredNDeliusDynamicRisks = - allNDeliusDynamicRisks.data?.filter { + allNDeliusDynamicRisks.data.filter { it.code in listOf( "RCCO", "RCPR", "REG22", "RVLN", "ALT8", "STRG", "AVIS", "ALT1", "WEAP", "RHRH", "RLRH", "RMRH", "RVHR", "RCHD", "REG15", "REG16", "REG17", "ALT4", "AVS2", "ALT7", "ALSH", ) - }.orEmpty() + } nDeliusDynamicRisks = Response(data = filteredNDeliusDynamicRisks, errors = allNDeliusDynamicRisks.errors) }