From 3d2d78608a264ba4f6b0fd5cacf866b3f0ad3ae3 Mon Sep 17 00:00:00 2001 From: "shrikanth.shetty1" Date: Fri, 15 May 2026 06:34:37 +0100 Subject: [PATCH] SNI-8712 - Fix --- .../view/service/ProgressionService.java | 14 +- .../view/service/ProgressionServiceTest.java | 130 ++++++++++++++++++ 2 files changed, 138 insertions(+), 6 deletions(-) diff --git a/sjp-query/sjp-query-view/src/main/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionService.java b/sjp-query/sjp-query-view/src/main/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionService.java index 5857d231a..a0d18a389 100644 --- a/sjp-query/sjp-query-view/src/main/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionService.java +++ b/sjp-query/sjp-query-view/src/main/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionService.java @@ -90,12 +90,13 @@ public List findDefendantOffences(UUID caseId, DefendantDetail defendant private boolean defendantMatch(JsonObject caseDefendant, DefendantDetail defendant) { final JsonObject personDefendant = caseDefendant.getJsonObject(PERSON_DEFENDANT_FIELD_NAME); final JsonObject caseDefendantPersonalDetails = personDefendant.getJsonObject(PERSON_DETAILS_FIELD_NAME); - final String firstName = caseDefendantPersonalDetails.getString(FIRSTNAME_FIELD_NAME); - final String lastName = caseDefendantPersonalDetails.getString(LASTNAME_FIELD_NAME); - final String dateOfBirth = caseDefendantPersonalDetails.getString(DOB_FIELD_NAME); - final JsonObject address = caseDefendantPersonalDetails.getJsonObject(ADDRESS_FIELD_NAME); - final String addressLine1 = address.getString(ADDRESS1_FIELD_NAME); - final String postCode = address.getString(POSTCODE_FIELD_NAME); + final String firstName = caseDefendantPersonalDetails.getString(FIRSTNAME_FIELD_NAME, null); + final String lastName = caseDefendantPersonalDetails.getString(LASTNAME_FIELD_NAME, null); + final String dateOfBirth = caseDefendantPersonalDetails.getString(DOB_FIELD_NAME, null); + final JsonObject address = caseDefendantPersonalDetails.containsKey(ADDRESS_FIELD_NAME) ? + caseDefendantPersonalDetails.getJsonObject(ADDRESS_FIELD_NAME) : createObjectBuilder().build(); + final String addressLine1 = address.getString(ADDRESS1_FIELD_NAME, null); + final String postCode = address.getString(POSTCODE_FIELD_NAME, null); final PersonalDetails personalDetails = defendant.getPersonalDetails(); @@ -106,3 +107,4 @@ private boolean defendantMatch(JsonObject caseDefendant, DefendantDetail defenda Objects.equals(postCode, defendant.getAddress().getPostcode()); } } + diff --git a/sjp-query/sjp-query-view/src/test/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionServiceTest.java b/sjp-query/sjp-query-view/src/test/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionServiceTest.java index be2a84085..30509a1f4 100644 --- a/sjp-query/sjp-query-view/src/test/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionServiceTest.java +++ b/sjp-query/sjp-query-view/src/test/java/uk/gov/moj/cpp/sjp/query/view/service/ProgressionServiceTest.java @@ -80,6 +80,60 @@ public void shouldFindNoMatchingDefendantOffencesFromProsecutionCase() { assertTrue(defendantOffences.isEmpty()); } + @Test + public void shouldReturnNoOffencesWhenFirstNameIsMissingInJson() { + final DefendantDetail defendantDetail = createDefaultDefendantDetail(); + lenient().when(envelope.payloadAsJsonObject()).thenReturn(createProsecutionCaseWithMissingField("firstName")); + final List defendantOffences = + progressionService.findDefendantOffences(UUID.randomUUID(), defendantDetail); + assertTrue(defendantOffences.isEmpty()); + } + + @Test + public void shouldReturnNoOffencesWhenLastNameIsMissingInJson() { + final DefendantDetail defendantDetail = createDefaultDefendantDetail(); + lenient().when(envelope.payloadAsJsonObject()).thenReturn(createProsecutionCaseWithMissingField("lastName")); + final List defendantOffences = + progressionService.findDefendantOffences(UUID.randomUUID(), defendantDetail); + assertTrue(defendantOffences.isEmpty()); + } + + @Test + public void shouldReturnNoOffencesWhenDateOfBirthIsMissingInJson() { + final DefendantDetail defendantDetail = createDefaultDefendantDetail(); + lenient().when(envelope.payloadAsJsonObject()).thenReturn(createProsecutionCaseWithMissingField("dateOfBirth")); + final List defendantOffences = + progressionService.findDefendantOffences(UUID.randomUUID(), defendantDetail); + assertTrue(defendantOffences.isEmpty()); + } + + @Test + public void shouldReturnNoOffencesWhenAddressLine1IsMissingInJson() { + final DefendantDetail defendantDetail = createDefaultDefendantDetail(); + lenient().when(envelope.payloadAsJsonObject()).thenReturn(createProsecutionCaseWithMissingAddressField("address1")); + final List defendantOffences = + progressionService.findDefendantOffences(UUID.randomUUID(), defendantDetail); + assertTrue(defendantOffences.isEmpty()); + } + + @Test + public void shouldReturnNoOffencesWhenPostcodeIsMissingInJson() { + final DefendantDetail defendantDetail = createDefaultDefendantDetail(); + lenient().when(envelope.payloadAsJsonObject()).thenReturn(createProsecutionCaseWithMissingAddressField("postcode")); + final List defendantOffences = + progressionService.findDefendantOffences(UUID.randomUUID(), defendantDetail); + assertTrue(defendantOffences.isEmpty()); + } + + @Test + public void shouldReturnNoOffencesWhenEntireAddressObjectIsMissingInJson() { + final DefendantDetail defendantDetail = createDefaultDefendantDetail(); + lenient().when(envelope.payloadAsJsonObject()).thenReturn(createProsecutionCaseWithNoAddressObject()); + final List defendantOffences = + progressionService.findDefendantOffences(UUID.randomUUID(), defendantDetail); + assertTrue(defendantOffences.isEmpty()); + } + private DefendantDetail createDefaultDefendantDetail() { final DefendantDetail defendantDetail = new DefendantDetail(UUID.randomUUID()); @@ -130,4 +184,80 @@ private JsonObject createProsecutionCase(PersonalDetails personalDetails) { createObjectBuilder().add("defendants", defendants)).build(); } + private JsonObject createProsecutionCaseWithMissingField(String omittedPersonField) { + final JsonArray offences = createArrayBuilder(). + add(createObjectBuilder().add("wording", "Offence-1").build()). + build(); + final PersonalDetails pd = defaultDefendant.getPersonalDetails(); + javax.json.JsonObjectBuilder personDetailsBuilder = createObjectBuilder(); + if (!omittedPersonField.equals("firstName")) personDetailsBuilder.add("firstName", pd.getFirstName()); + if (!omittedPersonField.equals("lastName")) personDetailsBuilder.add("lastName", pd.getLastName()); + if (!omittedPersonField.equals("dateOfBirth")) personDetailsBuilder.add("dateOfBirth", pd.getDateOfBirth().toString()); + personDetailsBuilder.add("address", createObjectBuilder(). + add("address1", defaultDefendant.getAddress().getAddress1()). + add("postcode", defaultDefendant.getAddress().getPostcode()). + build()); + final JsonObject personDefendant = createObjectBuilder(). + add("personDetails", personDetailsBuilder.build()). + build(); + final JsonArray defendants = createArrayBuilder(). + add(createObjectBuilder(). + add("offences", offences). + add("personDefendant", personDefendant). + build()). + build(); + return createObjectBuilder().add("prosecutionCase", + createObjectBuilder().add("defendants", defendants)).build(); + } + + private JsonObject createProsecutionCaseWithNoAddressObject() { + final JsonArray offences = createArrayBuilder(). + add(createObjectBuilder().add("wording", "Offence-1").build()). + build(); + final PersonalDetails pd = defaultDefendant.getPersonalDetails(); + final JsonObject personDetails = createObjectBuilder(). + add("firstName", pd.getFirstName()). + add("lastName", pd.getLastName()). + add("dateOfBirth", pd.getDateOfBirth().toString()). + build(); + final JsonObject personDefendant = createObjectBuilder(). + add("personDetails", personDetails). + build(); + final JsonArray defendants = createArrayBuilder(). + add(createObjectBuilder(). + add("offences", offences). + add("personDefendant", personDefendant). + build()). + build(); + return createObjectBuilder().add("prosecutionCase", + createObjectBuilder().add("defendants", defendants)).build(); + } + + private JsonObject createProsecutionCaseWithMissingAddressField(String omittedAddressField) { + final JsonArray offences = createArrayBuilder(). + add(createObjectBuilder().add("wording", "Offence-1").build()). + build(); + final PersonalDetails pd = defaultDefendant.getPersonalDetails(); + javax.json.JsonObjectBuilder addressBuilder = createObjectBuilder(); + if (!omittedAddressField.equals("address1")) addressBuilder.add("address1", defaultDefendant.getAddress().getAddress1()); + if (!omittedAddressField.equals("postcode")) addressBuilder.add("postcode", defaultDefendant.getAddress().getPostcode()); + final JsonObject personDetails = createObjectBuilder(). + add("firstName", pd.getFirstName()). + add("lastName", pd.getLastName()). + add("dateOfBirth", pd.getDateOfBirth().toString()). + add("address", addressBuilder.build()). + build(); + final JsonObject personDefendant = createObjectBuilder(). + add("personDetails", personDetails). + build(); + final JsonArray defendants = createArrayBuilder(). + add(createObjectBuilder(). + add("offences", offences). + add("personDefendant", personDefendant). + build()). + build(); + return createObjectBuilder().add("prosecutionCase", + createObjectBuilder().add("defendants", defendants)).build(); + } + }