Skip to content

Commit efbe444

Browse files
committed
PI-2488 Add "underActiveSupervision" flag to probation person response
1 parent 66e920c commit efbe444

File tree

6 files changed

+50
-26
lines changed

6 files changed

+50
-26
lines changed

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.WebClientWrap
88
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.WebClientWrapper.WebClientWrapperResponse
99
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Address
1010
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Person
11+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PersonOnProbation
1112
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response
1213
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi
1314
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError
@@ -72,7 +73,7 @@ class ProbationOffenderSearchGateway(
7273
}
7374
}
7475

75-
fun getPerson(id: String? = null): Response<Person?> {
76+
fun getPerson(id: String? = null): Response<PersonOnProbation?> {
7677
val offender = getOffender(id)
7778
return Response(data = offender.data?.toPerson(), errors = offender.errors)
7879
}

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/OffenderSearchResponse.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps
22

33
data class OffenderSearchResponse(
44
val prisonerOffenderSearch: Person?,
5-
val probationOffenderSearch: Person?,
5+
val probationOffenderSearch: PersonOnProbation?,
66
)

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/Person.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonAlias
44
import io.swagger.v3.oas.annotations.media.Schema
55
import java.time.LocalDate
66

7-
data class Person(
7+
open class Person(
88
@Schema(description = "First name", example = "John")
99
val firstName: String,
1010
@JsonAlias("surname")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps
2+
3+
class PersonOnProbation(
4+
person: Person,
5+
val underActiveSupervision: Boolean,
6+
) : Person(
7+
firstName = person.firstName,
8+
lastName = person.lastName,
9+
middleName = person.middleName,
10+
dateOfBirth = person.dateOfBirth,
11+
gender = person.gender,
12+
ethnicity = person.ethnicity,
13+
aliases = person.aliases,
14+
identifiers = person.identifiers,
15+
pncId = person.pncId,
16+
hmppsId = person.hmppsId,
17+
contactDetails = person.contactDetails,
18+
)

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Offender.kt

+23-18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffende
22

33
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Identifiers
44
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Person
5+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PersonOnProbation
56
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PersonProtectedCharacteristics
67
import java.time.LocalDate
78

@@ -16,25 +17,29 @@ data class Offender(
1617
val contactDetails: ContactDetails? = null,
1718
val otherIds: OtherIds = OtherIds(),
1819
val age: Number = 0,
20+
val activeProbationManagedSentence: Boolean = false,
1921
) {
20-
fun toPerson(): Person =
21-
Person(
22-
firstName = this.firstName,
23-
lastName = this.surname,
24-
middleName = this.middleNames.joinToString(" ").ifEmpty { "" },
25-
dateOfBirth = this.dateOfBirth,
26-
gender = this.gender,
27-
ethnicity = this.offenderProfile.ethnicity,
28-
aliases = this.offenderAliases.map { it.toAlias() },
29-
identifiers =
30-
Identifiers(
31-
nomisNumber = otherIds.nomsNumber,
32-
croNumber = otherIds.croNumber,
33-
deliusCrn = otherIds.crn,
34-
),
35-
pncId = otherIds.pncNumber,
36-
hmppsId = if (otherIds.crn?.isNotEmpty() == true) otherIds.crn else otherIds.nomsNumber,
37-
contactDetails = this.contactDetails?.toContactDetails(),
22+
fun toPerson() =
23+
PersonOnProbation(
24+
Person(
25+
firstName = this.firstName,
26+
lastName = this.surname,
27+
middleName = this.middleNames.joinToString(" ").ifEmpty { "" },
28+
dateOfBirth = this.dateOfBirth,
29+
gender = this.gender,
30+
ethnicity = this.offenderProfile.ethnicity,
31+
aliases = this.offenderAliases.map { it.toAlias() },
32+
identifiers =
33+
Identifiers(
34+
nomisNumber = otherIds.nomsNumber,
35+
croNumber = otherIds.croNumber,
36+
deliusCrn = otherIds.crn,
37+
),
38+
pncId = otherIds.pncNumber,
39+
hmppsId = if (otherIds.crn?.isNotEmpty() == true) otherIds.crn else otherIds.nomsNumber,
40+
contactDetails = this.contactDetails?.toContactDetails(),
41+
),
42+
underActiveSupervision = this.activeProbationManagedSentence,
3843
)
3944

4045
fun toPersonProtectedCharacteristics(): PersonProtectedCharacteristics =

src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/PersonControllerTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ImageMetada
2525
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.OffenderSearchResponse
2626
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Person
2727
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PersonName
28+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PersonOnProbation
2829
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PhoneNumber
2930
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response
3031
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApi
@@ -228,7 +229,7 @@ internal class PersonControllerTest(
228229
}
229230

230231
describe("GET $basePath/{id}") {
231-
val probationOffenderSearch = Person("Sam", "Smith", identifiers = Identifiers(nomisNumber = "1234ABC"))
232+
val probationOffenderSearch = PersonOnProbation(Person("Sam", "Smith", identifiers = Identifiers(nomisNumber = "1234ABC")), underActiveSupervision = true)
232233
val prisonOffenderSearch = POSPrisoner("Kim", "Kardashian")
233234
val prisonResponse = Response(data = prisonOffenderSearch, errors = emptyList())
234235

@@ -285,7 +286,7 @@ internal class PersonControllerTest(
285286
it("does not return a 404 status code when a person was found in one upstream API") {
286287
whenever(getPersonService.getCombinedDataForPerson(idThatDoesNotExist)).thenReturn(
287288
Response(
288-
data = OffenderSearchResponse(prisonerOffenderSearch = null, probationOffenderSearch = Person("someFirstName", "someLastName")),
289+
data = OffenderSearchResponse(prisonerOffenderSearch = null, probationOffenderSearch = PersonOnProbation(Person("someFirstName", "someLastName"), underActiveSupervision = false)),
289290
errors =
290291
listOf(
291292
UpstreamApiError(
@@ -352,7 +353,8 @@ internal class PersonControllerTest(
352353
},
353354
"pncId":null,
354355
"hmppsId":null,
355-
"contactDetails":null
356+
"contactDetails":null,
357+
"underActiveSupervision":true
356358
}
357359
}
358360
}
@@ -362,9 +364,7 @@ internal class PersonControllerTest(
362364
}
363365

364366
describe("GET $basePath/$encodedHmppsId/name") {
365-
val probationOffenderSearch = Person("Sam", "Smith", identifiers = Identifiers(nomisNumber = "1234ABC"))
366367
val prisonOffenderSearch = POSPrisoner("Sam", "Smith")
367-
val prisonResponse = Response(data = prisonOffenderSearch, errors = emptyList())
368368

369369
beforeTest {
370370
Mockito.reset(getNameForPersonService)

0 commit comments

Comments
 (0)