From b4da70c015b581a5d9f9c5212c15d29175a96f38 Mon Sep 17 00:00:00 2001 From: popey2700 Date: Tue, 21 May 2024 12:38:20 +0100 Subject: [PATCH 1/3] Fix Bug with Perons --- .gitignore | 3 +++ .../ProbationOffenderSearchGateway.kt | 23 +++++++++++++++++-- .../hmpps/ContactDetailsWithEmailAndPhone.kt | 3 --- .../models/probationoffendersearch/Address.kt | 14 ++++++++--- .../probationoffendersearch/ContactDetails.kt | 16 ++++++++++--- .../ContactDetailsWithEmailAndPhone.kt | 17 -------------- .../probationoffendersearch/Offender.kt | 4 ++-- .../v1/person/PersonControllerTest.kt | 4 ++-- .../GetAddressesForPersonTest.kt | 18 +++++++-------- .../smoke/person/PersonSmokeTest.kt | 19 --------------- 10 files changed, 60 insertions(+), 61 deletions(-) delete mode 100644 src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetailsWithEmailAndPhone.kt diff --git a/.gitignore b/.gitignore index a336ebde8..366b5f8d6 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,6 @@ __pycache__/ *.key *.csr *.pem + +# Localstack +localstack/cache diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt index 4b96e7e67..077f0596c 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt @@ -11,6 +11,7 @@ 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 +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch.ContactDetailsWithAddress import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch.Offender @Component @@ -116,8 +117,26 @@ class ProbationOffenderSearchGateway( } fun getAddressesForPerson(hmppsId: String): Response> { - val offender = getOffender(hmppsId) - return Response(data = offender.data?.contactDetails?.addresses.orEmpty().map { it.toAddress() }, errors = offender.errors) + val result = + webClient.requestList( + HttpMethod.POST, + "/search", + authenticationHeader(), + UpstreamApi.PROBATION_OFFENDER_SEARCH, + mapOf("crn" to hmppsId), + ) + + return when (result) { + is WebClientWrapperResponse.Success -> { + return Response(result.data.firstOrNull()?.contactDetails?.addresses.orEmpty().map { it.toAddress() }) + } + is WebClientWrapperResponse.Error -> { + Response( + data = emptyList(), + errors = result.errors, + ) + } + } } private fun authenticationHeader(): Map { diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/ContactDetailsWithEmailAndPhone.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/ContactDetailsWithEmailAndPhone.kt index 7d3c19214..b74994999 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/ContactDetailsWithEmailAndPhone.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/hmpps/ContactDetailsWithEmailAndPhone.kt @@ -1,9 +1,6 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch.Address - data class ContactDetailsWithEmailAndPhone( - val addresses: List
?, val phoneNumbers: List?, val emails: List?, ) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt index 203b84227..5cf4d2453 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt @@ -1,8 +1,16 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Address +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Address as HmppsAddress import java.time.LocalDate +data class ContactDetailsWithAddress( + val contactDetails: Addresses? = null, +) + +data class Addresses ( + val addresses: List
? = listOf(), +) + data class Address( val addressNumber: String?, val district: String?, @@ -18,7 +26,7 @@ data class Address( val notes: String?, ) { fun toAddress() = - Address( + HmppsAddress( country = null, county = this.county, endDate = this.to, @@ -39,7 +47,7 @@ data class Address( val description: String?, ) { fun toAddressType() = - Address.Type( + HmppsAddress.Type( code = this.code, description = this.description ?: this.code, ) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetails.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetails.kt index 09359e205..8b46de1d2 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetails.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetails.kt @@ -1,5 +1,15 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch -open class ContactDetails( - open val addresses: List
? = listOf(), -) +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PhoneNumber +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ContactDetailsWithEmailAndPhone as PersonContactDetails + +class ContactDetails( + val phoneNumbers: List?, + val emailAddresses: List?, +) { + fun toContactDetails(): PersonContactDetails = + PersonContactDetails( + phoneNumbers = this.phoneNumbers, + emails = this.emailAddresses, + ) +} diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetailsWithEmailAndPhone.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetailsWithEmailAndPhone.kt deleted file mode 100644 index 52a75d79b..000000000 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/ContactDetailsWithEmailAndPhone.kt +++ /dev/null @@ -1,17 +0,0 @@ -package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch - -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.PhoneNumber -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ContactDetailsWithEmailAndPhone as PersonContactDetails - -class ContactDetailsWithEmailAndPhone( - override val addresses: List
?, - val phoneNumbers: List?, - val emails: List?, -) : ContactDetails(addresses) { - fun toContactdetails(): PersonContactDetails = - PersonContactDetails( - addresses = this.addresses, - phoneNumbers = this.phoneNumbers, - emails = this.emails, - ) -} diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Offender.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Offender.kt index 7176eb913..348159c67 100755 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Offender.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Offender.kt @@ -13,7 +13,7 @@ data class Offender( val gender: String? = null, val offenderProfile: OffenderProfile = OffenderProfile(), val offenderAliases: List = listOf(), - val contactDetails: ContactDetailsWithEmailAndPhone? = null, + val contactDetails: ContactDetails? = null, val otherIds: OtherIds = OtherIds(), val age: Number = 0, ) { @@ -34,7 +34,7 @@ data class Offender( ), pncId = otherIds.pncNumber, hmppsId = otherIds.crn, - contactDetails = this.contactDetails?.toContactdetails(), + contactDetails = this.contactDetails?.toContactDetails(), ) fun toPersonProtectedCharacteristics(): PersonProtectedCharacteristics = diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/PersonControllerTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/PersonControllerTest.kt index 49ba0c9d3..eee8728a3 100755 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/PersonControllerTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/PersonControllerTest.kt @@ -74,14 +74,14 @@ internal class PersonControllerTest( lastName = "Allen", middleName = "Jonas", dateOfBirth = LocalDate.parse("2023-03-01"), - contactDetails = ContactDetailsWithEmailAndPhone(emptyList(), phoneNumbers, emails), + contactDetails = ContactDetailsWithEmailAndPhone(phoneNumbers, emails), ), Person( firstName = "Barry", lastName = "Allen", middleName = "Rock", dateOfBirth = LocalDate.parse("2022-07-22"), - contactDetails = ContactDetailsWithEmailAndPhone(emptyList(), phoneNumbers, emails), + contactDetails = ContactDetailsWithEmailAndPhone(phoneNumbers, emails), ), ), ), diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/probationoffendersearch/GetAddressesForPersonTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/probationoffendersearch/GetAddressesForPersonTest.kt index e0af99afb..e2a24b482 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/probationoffendersearch/GetAddressesForPersonTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/probationoffendersearch/GetAddressesForPersonTest.kt @@ -29,17 +29,15 @@ class GetAddressesForPersonTest( ) : DescribeSpec( { val probationOffenderSearchApiMockServer = ProbationOffenderSearchApiMockServer() - val hmppsId = "2002/1121M" + val hmppsId = "X777776" beforeEach { probationOffenderSearchApiMockServer.start() probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", """ [ { - "firstName": "English", - "surname": "Breakfast", "contactDetails": { "addresses": [ { @@ -102,7 +100,7 @@ class GetAddressesForPersonTest( it("returns an empty list when no addresses are found") { probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", """ [ { @@ -123,7 +121,7 @@ class GetAddressesForPersonTest( it("returns an error when no results are returned") { probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", "[]", ) @@ -134,7 +132,7 @@ class GetAddressesForPersonTest( it("returns an empty list when there is no contactDetails field") { probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", """ [ { @@ -152,7 +150,7 @@ class GetAddressesForPersonTest( it("returns an empty list when contactDetails field is null") { probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", """ [ { @@ -171,7 +169,7 @@ class GetAddressesForPersonTest( it("returns an empty list when contactDetails.addresses field is null") { probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", """ [ { @@ -192,7 +190,7 @@ class GetAddressesForPersonTest( it("returns an empty list when the type is an empty object") { probationOffenderSearchApiMockServer.stubPostOffenderSearch( - "{\"pncNumber\": \"$hmppsId\"}", + "{\"crn\": \"$hmppsId\"}", """ [ { diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt index 7a3ebd89f..819e9d804 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt @@ -70,25 +70,6 @@ class PersonSmokeTest : DescribeSpec( "pncId": "2012/0052494Q", "hmppsId": "A123456", "contactDetails": { - "addresses": [ - { - "addressNumber": "string", - "district": "string", - "buildingName": "string", - "county": "string", - "from": "2019-08-24", - "postcode": "string", - "streetName": "string", - "type": { - "code": "string", - "description": "string" - }, - "to": "2019-08-24", - "town": "string", - "noFixedAbode": true, - "notes": "string" - } - ], "phoneNumbers": [ { "number": "string", From 8c88e0ab9fd20d7da3c729b838cca993982d71eb Mon Sep 17 00:00:00 2001 From: popey2700 Date: Tue, 21 May 2024 12:43:28 +0100 Subject: [PATCH 2/3] Format code --- .../gateways/ProbationOffenderSearchGateway.kt | 2 +- .../models/probationoffendersearch/Address.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt index 077f0596c..4f82d4e24 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/gateways/ProbationOffenderSearchGateway.kt @@ -128,7 +128,7 @@ class ProbationOffenderSearchGateway( return when (result) { is WebClientWrapperResponse.Success -> { - return Response(result.data.firstOrNull()?.contactDetails?.addresses.orEmpty().map { it.toAddress() }) + return Response(result.data.firstOrNull()?.contactDetails?.addresses.orEmpty().map { it.toAddress() }) } is WebClientWrapperResponse.Error -> { Response( diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt index 5cf4d2453..c38e2c542 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/models/probationoffendersearch/Address.kt @@ -1,13 +1,13 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.probationoffendersearch -import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Address as HmppsAddress import java.time.LocalDate +import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Address as HmppsAddress data class ContactDetailsWithAddress( val contactDetails: Addresses? = null, ) -data class Addresses ( +data class Addresses( val addresses: List
? = listOf(), ) From 815de5c917e699783aa5ca8c8840b87f8eb3769b Mon Sep 17 00:00:00 2001 From: popey2700 Date: Tue, 21 May 2024 13:03:32 +0100 Subject: [PATCH 3/3] Fix smoketests --- .../smoke/person/PersonSmokeTest.kt | 128 +++++++++--------- 1 file changed, 65 insertions(+), 63 deletions(-) diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt index b67ff8ebe..57749782c 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/person/PersonSmokeTest.kt @@ -44,70 +44,72 @@ class PersonSmokeTest : DescribeSpec( response.body().shouldBe( """ - { - "data":{ - "prisonerOffenderSearch":{ - "firstName":"Robert", - "lastName":"Larsen", - "middleName":"John James", - "dateOfBirth":"1975-04-02", - "gender":"Female", - "ethnicity":"White: Eng./Welsh/Scot./N.Irish/British", - "aliases":[ - { - "firstName":"Robert", - "lastName":"Lorsen", - "middleName":"Trevor", - "dateOfBirth":"1975-04-02", - "gender":"Male", - "ethnicity":"White : Irish" - } - ], - "identifiers":{ - "nomisNumber":"A1234AA", - "croNumber":"29906/12J", - "deliusCrn":null - }, - "pncId":"12/394773H", - "hmppsId":null, - "contactDetails":null - }, - "probationOffenderSearch":{ - "firstName":"string", - "lastName":"string", - "middleName":"string", - "dateOfBirth":"2019-08-24", - "gender":"string", - "ethnicity":"string", - "aliases":[ - { - "firstName":"string", - "lastName":"string", - "middleName":"string", - "dateOfBirth":"2019-08-24", - "gender":"string", - "ethnicity":null + { + "data": { + "prisonerOffenderSearch": { + "firstName": "Robert", + "lastName": "Larsen", + "middleName": "John James", + "dateOfBirth": "1975-04-02", + "gender": "Female", + "ethnicity": "White: Eng./Welsh/Scot./N.Irish/British", + "aliases": [ + { + "firstName": "Robert", + "lastName": "Lorsen", + "middleName": "Trevor", + "dateOfBirth": "1975-04-02", + "gender": "Male", + "ethnicity": "White : Irish" + } + ], + "identifiers": { + "nomisNumber": "A1234AA", + "croNumber": "29906/12J", + "deliusCrn": null + }, + "pncId": "12/394773H", + "hmppsId": null, + "contactDetails": null + }, + "probationOffenderSearch": { + "firstName": "string", + "lastName": "string", + "middleName": "string", + "dateOfBirth": "2019-08-24", + "gender": "string", + "ethnicity": "string", + "aliases": [ + { + "firstName": "string", + "lastName": "string", + "middleName": "string", + "dateOfBirth": "2019-08-24", + "gender": "string", + "ethnicity": null + } + ], + "identifiers": { + "nomisNumber": "G5555TT", + "croNumber": "123456/24A", + "deliusCrn": "A123456" + }, + "pncId": "2012/0052494Q", + "hmppsId": "A123456", + "contactDetails": { + "phoneNumbers": [ + { + "number": "string", + "type": "TELEPHONE" + } + ], + "emails": [ + "string" + ] + } + } } - ], - "identifiers":{ - "nomisNumber":"G5555TT", - "croNumber":"123456/24A", - "deliusCrn":"A123456" - }, - "pncId":"2012/0052494Q", - "hmppsId":"A123456", - "contactDetails":{ - "phoneNumbers":[ - { - "number":"string", - "type":"TELEPHONE" - } - ], - "emails":null - } - } - } -} + } """.removeWhitespaceAndNewlines(), ) }