diff --git a/src/main/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentService.java b/src/main/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentService.java index 85cb05aed65..13f77970081 100644 --- a/src/main/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentService.java +++ b/src/main/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentService.java @@ -19,6 +19,8 @@ import uk.gov.hmcts.reform.prl.exception.InvalidSolicitorRoleException; import uk.gov.hmcts.reform.prl.models.Element; import uk.gov.hmcts.reform.prl.models.OrgSolicitors; +import uk.gov.hmcts.reform.prl.models.common.dynamic.DynamicList; +import uk.gov.hmcts.reform.prl.models.common.dynamic.DynamicListElement; import uk.gov.hmcts.reform.prl.models.complextypes.PartyDetails; import uk.gov.hmcts.reform.prl.models.dto.barrister.AllocatedBarrister; import uk.gov.hmcts.reform.prl.models.dto.ccd.Barrister; @@ -516,7 +518,18 @@ private void removeBarristerIfPresent(CaseData caseData, ChangeOrganisationRequest changeOrganisationRequest, Consumer> caPartyDetailsElement, Consumer daPartyDetails) { - String solicitorRole = changeOrganisationRequest.getCaseRoleId().getValue().getCode(); + + String solicitorRole = Optional.ofNullable(changeOrganisationRequest) + .map(ChangeOrganisationRequest::getCaseRoleId) + .map(DynamicList::getValue) + .map(DynamicListElement::getCode) + .orElse(null); + + if (solicitorRole == null) { + log.info(" Attempting to remove Barrister but the solicitor role is null for case id {} ", caseData.getId()); + return; + } + String barristerRole = getMatchingBarristerRole(solicitorRole); if (C100_CASE_TYPE.equalsIgnoreCase(caseData.getCaseTypeOfApplication())) { getC100SelectedParty(caseData, barristerRole) diff --git a/src/test/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentServiceTest.java b/src/test/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentServiceTest.java index 6f9c46575bb..1380bfd1b86 100644 --- a/src/test/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/prl/clients/ccd/CaseAssignmentServiceTest.java @@ -1311,6 +1311,48 @@ void testSolicitorStopRepresentingWhenBarristerNotPresent() { isA(CaseAssignmentUserRolesRequest.class)); } + @Test + void shouldNotThrowNpeWhenChangeOrganisationRequestIsNull() { + CaseData caseDataWithNullRequest = CaseData.builder() + .id(1234L) + .caseTypeOfApplication("C100") + .changeOrganisationRequestField(null) + .applicants(List.of(Element.builder() + .value(PartyDetails.builder() + .barrister(Barrister.builder().barristerId("123").build()) + .build()) + .build())) + .build(); + + CaseDetails localCaseDetails = CaseDetails.builder() + .id(1234L) + .data(caseDataWithNullRequest.toMap(objectMapper)) + .build(); + + when(featureToggleService.isBarristerFeatureEnabled()).thenReturn(true); + + CaseAssignmentService localCaseAssignmentService = new CaseAssignmentService( + caseAssignmentApi, + systemUserService, + tokenGenerator, + organisationService, + roleAssignmentService, + maskEmail, + objectMapper, + featureToggleService, + barristerHelper, + barristerRemoveService, + partyLevelCaseFlagsService + ); + + localCaseAssignmentService.removeAmBarristerIfPresent(localCaseDetails); + Barrister barristerAfterCall = caseDataWithNullRequest.getApplicants().get(0).getValue().getBarrister(); + + assertThat(barristerAfterCall) + .as("Barrister should still exist because the code should have returned early") + .isNotNull(); + } + private RoleAssignmentResponse getRoleAssignmentResponse(String actorId, String roleName) { RoleAssignmentResponse roleAssignmentResponse = new RoleAssignmentResponse(); roleAssignmentResponse.setRoleName(roleName);